基于人脸识别的酒店自助入住管理系统的设计与实现_第1页
基于人脸识别的酒店自助入住管理系统的设计与实现_第2页
基于人脸识别的酒店自助入住管理系统的设计与实现_第3页
基于人脸识别的酒店自助入住管理系统的设计与实现_第4页
基于人脸识别的酒店自助入住管理系统的设计与实现_第5页
已阅读5页,还剩44页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

口,固然产生了一大批制造自助入住终端机的公司,每个公司所采用的软件系统又不一样,表面有界面设计的不一样,所用的人脸检测接口也不一样。并非所有公司都会花钱去研究人脸识别技术,这样不仅耗费大量成本并且难以在此领域立足,毕竟目前已有非常成熟的人脸识别技术。2020年的开年迎来前所未有的具强感染力心冠肺炎病毒,据北京一篇报道[1],酒店已成为当前情况下无论是跨省返工或是回国人员选择隔离的场所。各个酒店行业都采取了相应的疫情防控措施,为此保障酒店客人与员工的生命健康,并且一部分酒店还借此疫情推出了“无接触”项目,酒店客人从大厅到房间都无需与人接触。这次疫情无疑是快速推动了生物特征的识别领域,较传统的指纹识别,人脸识别更具无无接触的特点,较传统的身份证认证,它具有生物信息的唯一性,稳定性,可保证信息的不被伪造性,即身份验证的准确唯一性。目前的酒店终端机尚未完全解放人们的双手,如今的自助系统仍需入住旅客在指定屏幕上进行入住登记等一系列工作,如果酒店仅仅只需要进行人脸识别与认证,其他预定,入住,离店等功能都体现在自己的手机app或者是小程序,如此的话这样才是真正意义上的实现与他人“无接触”。在人脸识别这一块领域里,大致做了好几类研究,有基于深度学习的人脸识别[2],利用CNN架构训练人脸识别模型,然后再使用opencv获取实时摄像头进行在线捕捉人脸图像,亮点在于梯度训练使用Adam优化算法,ReLU激活函数从而构造此人脸识别的CNN结构。此研究重在认证的效率。而另一种基于区块链和人脸识别的双因子身份认证[3]重点则在认证上,确保人脸识别的身份认证的安全性,在人脸识别上利用了SphereFace算法,即采用的是改进的基于角度距离的损失函数而优于传统的euclideanloss和tripletloss。去中心化的存储保证了身份的安全与隐私,即形成了身份链,即若从旅客认证通过打开房门之后,可保证与确保旅客的身份同时,若需要进行其他服务已不需再进行身份验证。1.3研究目的通过对人脸识别的研究了解人工智能的趋势,人脸识别早期1994年使用CNN判断每个图片是否包含人脸;到1996年Rowley取得旋转不变性检测成就;再到2002年卷积神经网络得到了发展,虽是一些简单的数据,但亦能取得不错的结果。这一系列机器学习的趋势正是带动着智能时代的变迁,在科技与人的交互上,若要取得一定成就那将必然以人为本,服务于酒店旅客是此项研究与设计的最终结果,希望通过研究能找到同路人。一定程度上彻底解放人们的双手,利用随身携带的手机联网实现远程人机交互。研究更具身份验证可靠性的人脸识别技术必将推动生物特征识别的发展,亦能使酒店成为旅客出行的第二个家,甚至更加方便于自己家。推动智能家居的发展必将依靠人工智能设备,人脸识别即将成为代替身份证的新型身份识别。除了对时代趋势方面研究人脸识别之外,我还希望通过对人脸识别的研究提升自己对该领域的认知程度,虽说在大学期间并没有全心全力专研学术,但至少也是需要增加自己的知识储备能力的,或许暂时不能马上使用到该技术,但是至少了解得比别人多,认知得更多就能让自己更加清晰地看世界,不被糊弄与欺骗。1.4研究步骤1.4.1主题的拟定人脸识别已成为人们出行购物、政府办事大厅、银行等等需要身份验证必不可少的一步,那么酒店作为唯一直接连接公安系统的大行业,对身份验证十分重视与眼睛的行业,在将来需要改变的不会是制度,而是属于酒店自己的一套制度,严格来讲是盈利制度,那么能执行制度的除了人就是机器了,作为消费行业但凡能够便于消费者群体的项目必将是发展的趋势,固然基于人脸识别的酒店自助入住系统就此诞生。1.4.2文献综述一方面是酒店管理系统的研究,千篇一律,流程万变不离其中,翻阅的文献并不多。另一方面是人脸识别,然而这才是自己给自己挖的一个大坑,有关人脸识别的技术这几年急速发展,如今拼的已经在识别速度与防控研发,认证准确率基本上在99%以上。1.4.3实地考察二种酒店自助入住形式。第一种是传统的酒店智能化设备,在酒店大厅中终端机上进行订单核对,人脸身份验证,下发房卡或者房门密码,完成入住;第二种是完全解放入住繁琐办理事项,仅需网上预定,到店人脸识别核对身份即可使用酒店所有硬件设施,即马云杭州的“无人酒店”。1.4.4结合实际整理设计思路通过对人类历史发展的研究,人类文明会逐渐提高,实现全民高素质发展趋势。解放人们便捷的消费体验以为,更加需要解放的是人们的思想。无需酒店大厅,无需电梯身份验证,仅需进门人脸识别认证即可,如同iphone的FaceID一般,打开自己的房门跟解锁手机屏幕一般简单。1.4.5调整设计计划原计划的主题偏向于实地考察的第一种酒店自助入住模式,后来经过市场实际考察,发现还可以以此为基础对系统进行升华,但是又不用第二种“无人酒店”那般极具科技感的设计。调整为消费者以手机操作为主,到店仅需对接人脸识别设备即可。图1-1研究步骤图1.5论文架构本文主论述五个章节,如下所述:第一章绪论,主要讲解基于人脸识别的酒店自助入住的背景,研究人脸识别技术的动机,还有其目的与意义,计划论文工作的开展和系统的设计。第二章对文献探讨,通过对大量的文献翻阅进行对系统设计的计划与开发,并探讨部分文献对人脸识别领域的技术应用,参考其重要研究内容。第三章主要讲研究方法,整体的应用以及其系统架构,采用的一系列技术开发应用。第四章实验设计,呈现软件执行的流程。第五章系统测试结果,展示相关模块代码并对运行结果进行分析测试,对其数据进行分析以及调整页面设计。第六章是结论与未来研究方向,研究该项目所产生的价值,根据测试结果进行模块功能的说明,进行该项目的比较分析与效益分析,因为此项设计所萌发的对未来想研究的方向以及想去完成的。最后进行致谢:对所经历所感受的人与事怀揣感恩之心。第二章文献探讨2.1基于人脸识别的相关算法机器学习时代以来,机器深度学习研究领域潮流迸发,基于卷积神经网络的深度学习在人脸识别的特征学习上被应用得淋漓尽致,通过电脑卷积神经网络处理待分类图像,那么此图像的特征自然就被学习出来,无需传统的人工特征提取。在研究深度学习的过程中,反而距离度量学习方法被发现非常适合人脸识别。深度学习的不断学习中,研究人员已对其卷积神经网络模型不断的加以训练并不断改进,人脸识别技术的识别能力以及准确率提高了不少,那么后期随着摄像头的清晰度以及算法运算能力,该模型对计算和存储的需求也将大大提高,逐渐会淘汰掉一大部分的低性能设备,所以正如SOPHANYOULY[4]总结的基于ShuffleNet模型的数据测试,是Face++提出的深度网络模型,正好适合于笔者想要开发的移动设备端的在线管理酒店系统。ShufflNet引入了PointwiseGroup,这个所带来的问题在于群设定数量越多,信息更丰富但是对于各组的输入通道数量会变少,导致单个卷积核的退化,降低网络的表达能力,为了解决这个问题,研究者用Shuff'Net将以分组好的输入通道随机打乱,为了保证所有卷积核的感受能分散到来自不同分组的通道。借鉴ResNet的思路,ShuffNet引入类似的网络单元,用concat操作代替add,用平均池化代替1*1的卷积操作,从而减少计算量和提高准确率。与研究者的水平差距有限,对于他给出的研究与算法仅供学习参考。2.2应用领域智能化酒店行业的发展,“刷脸”成为人机交互必不可少的程序,那么不仅在现有的“无人酒店”,在各行各业甚至是出门购物都可以实现不带现金不用手机了,脸逐渐成为身份象征,虽然脸排在虹膜与指纹之后,但是在方便的发展上研究人员终有一天能将最方便的特征应用在所需要的行业当中。人脸识别在APP中的应用更为广泛,从iphone的faceid到applepay支付宝的人脸支付,与酒店一样同样都为公安系统直接监控,不一样的是入住酒店的旅客还需要相应的信息记录,而每一家酒店的信息有独立的系统记录。在金融与安防两大领域中,人脸识别技术作为两者主角,目前机场、火车站、学校、等公共场所的安检系统已采用人脸识别技术。自助设备基本上都配备摄像头以供人脸识别功能。2.3国内外评价关于人脸识别的评价有支持亦有不足,虽然在我们生活中给予了我们便利,但是还未完全发展完善。人脸识别受摄像头的辨析程度影响,系统对人脸图片收集也要有一定的要求,当画面出现模糊时摄像头难以辨识出相应的脸部。另一方面,对于人脸相当接近时,也会导致人脸识别出现困难,但随着科技设备的发展,算法的不断更新与修改,识别能力也在逐日增加,高清摄像头等等。为了系统匹配更高的准确性,也有必要的条件。关于生物的唯一无需主动特征,较虹膜与指纹相比,人脸通过摄像头收集进行网络恶意攻击,也是容易出现信息泄露的问题。面对人脸识别的“双刃剑”,该如何发展就交给研究他们的手上了。第三章研究方法3.1系统架构项目系统包括酒店自助入住管理系统,人脸识别门控系统,和人脸识别模块,移动端APP在线预定模块链接。简单来说采用了酒店预订系统增加了人脸识别模块,而酒店人脸识别门控属于辅助酒店管理系统辅助验证工具,免去了传统的身份证以及对人脸的双重认证,实现真正意义上的“无接触”入住。为了系统搭建的便捷,系统采用线上的方式执行,在如今网络平台上搭建系统一方面考虑了系统搭建的效率另一方面考虑到信息储存的安全性。移动端采取目前火热的app、公众号或者微信小程序进行消费者预定平台的搭建,商家则需要在PC端申请相关平台进行搭建,因为互联网的高速发展以及平台的稳定安全性,找一些知名品牌的平台搭建即可,模块可自动生成,只需要给平台相应的平台服务费即可,远比一个软件开发的运营成本来得亲民。人脸识别的模块的接口当然也需要交费,那么市面上也有非常多的选择,最好是选择人脸识别技术成熟并且有附带人脸识别设备的商家,这样合作起来就比较全面。3.2数据来源清华创业团队所推出的人脸云识别开放平台Face++的API总调用超过60万亿,并且在安防领域开始了商业化探索成果Face++Financial,Face++BI等垂直人脸验证的解决方案产品。如今年轻女生喜欢的美颜相机,美图秀秀等等用了Face++所提供的领先人脸检测与人脸关键点检测技术。Linkface提供了全球领先的人脸检测技术,LFW人脸识别准确率已达99.5%以上,FDDB人脸检测公开测试稳居世界第一。图1-2人脸识别准确度较高公司排名系统需求分析4.1需求规格4.1.1系统的构成部分 前台功能模块:用户登陆模块:用户登陆模块是提供给住客进行登陆的功能,采用JSP实现,用户进行预定时自动弹出登陆界面,让住客进行用户名密码的填写,并使用了ajax进行住客的相关验证从而登陆,在密码与用户正确的前提下点击登陆并完成登陆。只有登陆成功的用户方能预定房间。图4-1登陆流程图用户注册模块:用户注册模块是提供给用户进行注册的功能,采用JSP实现,用户点击登陆界面的注册按钮后,弹出注册界面,让用户进行相应信息的填写,并带有数据合法性检验功能,用户数据合法后点击注册按钮完成注册。图4-2注册流程图预订房间模块:当用户点击选择房间按钮时,触发点击事件,系统将信息将传给服务器并访问数据库中的数据,将数据以图片的形式展示在页面中,如下图4-3所示。图4-3选择房间流程图查看预定订单模块:用户通过点击预定订单模块进入界面,系统响应反馈出现酒店订单详情包括预定是填写的信息与预定记录。一键入住模块:用户在预定界面点击一键入住后,在预定酒店时填写的证件号及时反馈到酒店内部数据库,待管理员核对后发送请求到门禁系统,用户对准门口的摄像头,核对成功后门自动打开。后台功能模块:用户管理模块:用户管理模块下有用户列表,利用了SQL的用户增删查改原理进行对用户的实时管理,非常有效与方便。系统日志模块:此模块针对管理员开发的系统日志,同样是利用了SQL的增删查改原理进行对文本的管理。房型管理模块:管理员在房型管理这块可以进行对房间类型分类并且标价,可住人数,床位数,房间数,可用房间数,已预定数,已住人数,状态以及房间类型的备注进行增删查改指令。房间管理模块:管理员可以在此上传房间图片,更改房间编号,房间类型,楼层以及入住状态和备注预订管理模块:管理员进入预订管理模块后能够清楚的查询到用户预订信息并对此相关管理,同样使用了SQL的增删查改功能实现。入住管理模块:当管理员核对用户信息之后,可以对用户进行入住管理的设定,从而使用户进入可入住状态,实现管理员对系统的互动响应。营业统计模块:通过简单的算法计算出用户订单情况形成可视化数据统计图像,有利于管理者对酒店进一步的管理。4.1.2非功能性需求此项目UI界面设计简洁清晰,由于技术有限,人脸识别功能需手动对用户进行核对信息,方能使住客完成入住。固然对于所需要的系统配置不用很高,运行起来相对稳定,也是大部分酒店都比较适用,灵感参考一般的酒店预订系统。4.2开发环境的选择系统需求分析阶段采用了MicrosoftWindows10。后期系统代码开发阶段则采用idea+mysql+springmvc+jsp+mybatis+tomcat7的运行环境。下面我主要介绍一下这两个工具,在设计这个项目过程中,为了方便处理数据,会用到数据库这个东西来为系统提供有效地访问数据的方式,数据库能够提高程序的安全性以及方便性,同时还减少了我们开发的时间。图4-4数据库系统和接口的原理图数据库一般是分为两种,一种是关系型的数据库(Oracle,DB2,MySQL,SQLServer),还有一种就是是非关系型数据库(NoSql、MongeDB),本人就选择了MYSQL数据库。MySQL由于比较大众,并且还能提高速度,而且提高了多种借口来实现数据的交互,虽然功能还不咋样,但是面对本人这个项目的话就足够了,后期有需要的话也可以再次加工。利用MYSQL数据库来进行数据的存储好处有很多,这里主要将它和控制层连接在一起,通过sql语句进行增删改查这种小功能,如果后面有需要才会增加新的功能。Tomcat是一个轻量级的服务器,目前多用于中小型企业开发首选,而且Tomcat还是免费,开源的应用服务器,在运行时占用资源少,扩展性也强,本课题也将使用它作为服务器。第五章系统的实现5.1总体实现系统的运行首先是登录模块,用户端分为商家与消费者,两者都需要对用户进行人脸识别与身份验证,通过之后方能进入系统主页面,两种用户端有不同的系统操作页面,商家主要链接着系统的各种管理功能模块以及消费者订单信息,身份信息以及人脸信息直接储存到相关云端,甚至可直接接入公安系统。商家端需要人脸识别身份认证登录后台,消费者端在登陆时需要人脸注册登陆,接入公安系统认证,直接进行预定和退房等等酒店功能,门控系统连入WIFi直接进行对消费者的人脸进行识别与认证即可。服务基本上可以在移动端上实现,图5-1总体系统设计结构5.2预订界面的实现部署的网站为http://localhost:8080/HotelSSM/home/index,使用Chrome进去之后的首页如图5-2首页酒店预订图。图5-2首页酒店预订图5.3客户端的实现5.3.1登陆与注册页面已注册用户可直接使用用户名与密码进行网页登陆从而进行正常预订流程,若没有注册过直接点击立即注册然后进行相应的信息填写,如图5-3所示。图5-3用户登陆界面注册页面如图5-4所示。图5-4注册页面图5.3.2用户中心登陆进入用户主页面之后回到网页一开始的预订界面,预订之后可以查询用户中心,然后可以查询预订的相关信息,可以进行修改密码,修改个人资料。如图5-5所示。图5-5用户中心图5.3.3预订房间界面用户通过点击预订按钮弹出预订界面, 然后进行相关新的填写图5-6预订房间界面具体代码如下: /** *@parammodel *@return */ @RequestMapping(value="/book_order",method=RequestMethod.GET) publicModelAndViewbookOrder(ModelAndViewmodel,LongroomTypeId ){ model.addObject("roomType",roomTypeService.find(roomTypeId)); model.setViewName("home/account/book_order"); returnmodel; } /** *预定信息提交 *@paramaccount *@return */ @RequestMapping(value="/book_order",method=RequestMethod.POST) @ResponseBody publicMap<String,String>bookOrderAct(BookOrderbookOrder,HttpServletRequestrequest){ Map<String,String>ret=newHashMap<String,String>(); if(bookOrder==null){ ret.put("type","error"); ret.put("msg","请填写正确的预定订单信息!"); returnret; } Accountaccount=(Account)request.getSession().getAttribute("account"); if(account==null){ ret.put("type","error"); ret.put("msg","客户不能为空!"); returnret; } bookOrder.setAccountId(account.getId()); if(bookOrder.getRoomTypeId()==null){ ret.put("type","error"); ret.put("msg","房型不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getName())){ ret.put("type","error"); ret.put("msg","预定订单联系人名称不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getMobile())){ ret.put("type","error"); ret.put("msg","预定订单联系人手机号不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getIdCard())){ ret.put("type","error"); ret.put("msg","联系人身份证号不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getArriveDate())){ ret.put("type","error"); ret.put("msg","到达时间不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getLeaveDate())){ ret.put("type","error"); ret.put("msg","离店时间不能为空!"); returnret; } bookOrder.setCreateTime(newDate()); bookOrder.setStatus(0); if(bookOrderService.add(bookOrder)<=0){ ret.put("type","error"); ret.put("msg","添加失败,请联系管理员!"); returnret; } RoomTyperoomType=roomTypeService.find(bookOrder.getRoomTypeId()); //预定成功后去修改该房型的预定数 if(roomType!=null){ roomType.setBookNum(roomType.getBookNum()+1); roomType.setAvilableNum(roomType.getAvilableNum()-1); roomTypeService.updateNum(roomType); //如果可用的房间数为0,则设置该房型状态已满 if(roomType.getAvilableNum()==0){ roomType.setStatus(0); roomTypeService.edit(roomType); } } ret.put("type","success"); ret.put("msg","预定成功!"); returnret; }5.4服务端的实现5.4.1登陆界面5-7登陆界面图5.4.2房型列表管理员通过对房型的管理可以定义酒店的房间类型价格以及相关属性,让用户实时查看可预订的房间相关信息。实现图片如图5-8所示。图5-8酒店房型图5.4.3房间管理管理对房间的管控也是一道工序,该功能呈现的效果是管理员可以更改房间的入住情况,若有人入住则标记入住,若有人退房,则标记打扫中或者可入住,如图5-9所示。图5-9房间管理图5.4.4预订管理管理员可增删查改用户的相关信息,在此进行人脸身份与身份证核对,方能更改入住状态,一般是从预定中改为已入住,相关界面如图5-10。图5-10预订管理界面相关代码如下:packagegrammer.controller.admin;importgrammer.entity.BookOrder;importgrammer.entity.RoomType;importgrammer.page.admin.Page;importgrammer.service.AccountService;importgrammer.service.BookOrderService;importgrammer.service.RoomTypeService;importmons.lang.StringUtils;importorg.springframework.beans.factory.annotation.Autowired;importorg.springframework.stereotype.Controller;importorg.springframework.web.bind.annotation.RequestMapping;importorg.springframework.web.bind.annotation.RequestMethod;importorg.springframework.web.bind.annotation.RequestParam;importorg.springframework.web.bind.annotation.ResponseBody;importorg.springframework.web.servlet.ModelAndView;importjava.util.Date;importjava.util.HashMap;importjava.util.Map;/***@authorAdministrator*/@RequestMapping("/admin/book_order")@ControllerpublicclassBookOrderController{ @Autowired privateAccountServiceaccountService; @Autowired privateRoomTypeServiceroomTypeService; @Autowired privateBookOrderServicebookOrderService; /** *预定订单管理列表页面 *@parammodel *@return */ @RequestMapping(value="/list",method=RequestMethod.GET) publicModelAndViewlist(ModelAndViewmodel){ model.addObject("roomTypeList",roomTypeService.findAll()); model.addObject("accountList",accountService.findAll()); model.setViewName("book_order/list"); returnmodel; } /** *预定订单信息添加操作 *@parambookOrder *@return */ @RequestMapping(value="/add",method=RequestMethod.POST) @ResponseBody publicMap<String,String>add(BookOrderbookOrder){ Map<String,String>ret=newHashMap<String,String>(); if(bookOrder==null){ ret.put("type","error"); ret.put("msg","请填写正确的预定订单信息!"); returnret; } if(bookOrder.getAccountId()==null){ ret.put("type","error"); ret.put("msg","客户不能为空!"); returnret; } if(bookOrder.getRoomTypeId()==null){ ret.put("type","error"); ret.put("msg","房型不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getName())){ ret.put("type","error"); ret.put("msg","预定订单联系人名称不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getMobile())){ ret.put("type","error"); ret.put("msg","预定订单联系人手机号不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getIdCard())){ ret.put("type","error"); ret.put("msg","联系人身份证号不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getArriveDate())){ ret.put("type","error"); ret.put("msg","到达时间不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getLeaveDate())){ ret.put("type","error"); ret.put("msg","离店时间不能为空!"); returnret; } bookOrder.setCreateTime(newDate()); if(bookOrderService.add(bookOrder)<=0){ ret.put("type","error"); ret.put("msg","添加失败,请联系管理员!"); returnret; } RoomTyperoomType=roomTypeService.find(bookOrder.getRoomTypeId()); //预定成功后去修改该房型的预定数 if(roomType!=null){ roomType.setBookNum(roomType.getBookNum()+1); roomType.setAvilableNum(roomType.getAvilableNum()-1); roomTypeService.updateNum(roomType); //如果可用的房间数为0,则设置该房型状态已满 if(roomType.getAvilableNum()==0){ roomType.setStatus(0); roomTypeService.edit(roomType); } } ret.put("type","success"); ret.put("msg","添加成功!"); returnret; } /** *预定订单信息编辑操作 *@paramaccount *@return */ @RequestMapping(value="/edit",method=RequestMethod.POST) @ResponseBody publicMap<String,String>edit(BookOrderbookOrder){ Map<String,String>ret=newHashMap<String,String>(); if(bookOrder==null){ ret.put("type","error"); ret.put("msg","请填写正确的预定订单信息!"); returnret; } if(bookOrder.getAccountId()==null){ ret.put("type","error"); ret.put("msg","客户不能为空!"); returnret; } if(bookOrder.getRoomTypeId()==null){ ret.put("type","error"); ret.put("msg","房型不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getName())){ ret.put("type","error"); ret.put("msg","预定订单联系人名称不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getMobile())){ ret.put("type","error"); ret.put("msg","预定订单联系人手机号不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getIdCard())){ ret.put("type","error"); ret.put("msg","联系人身份证号不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getArriveDate())){ ret.put("type","error"); ret.put("msg","到达时间不能为空!"); returnret; } if(StringUtils.isEmpty(bookOrder.getLeaveDate())){ ret.put("type","error"); ret.put("msg","离店时间不能为空!"); returnret; } BookOrderexistBookOrder=bookOrderService.find(bookOrder.getId()); if(existBookOrder==null){ ret.put("type","error"); ret.put("msg","请选择正确的数据进行编辑!"); returnret; } if(bookOrderService.edit(bookOrder)<=0){ ret.put("type","error"); ret.put("msg","编辑失败,请联系管理员!"); returnret; } //判断房型是否发生变化 if(existBookOrder.getRoomTypeId().longValue()!=bookOrder.getRoomTypeId().longValue()){ //房型发生了变化 //首先恢复原来房型的预定数及可用数 RoomTypeoldRoomType=roomTypeService.find(existBookOrder.getRoomTypeId()); oldRoomType.setAvilableNum(oldRoomType.getAvilableNum()+1); oldRoomType.setBookNum(oldRoomType.getBookNum()-1); roomTypeService.updateNum(oldRoomType); if(oldRoomType.getStatus()==0){ //旧的房间原来是满房,现在不满房的话,恢复状态 if(oldRoomType.getAvilableNum()>0){ //设置成状态可用 oldRoomType.setStatus(1); roomTypeService.edit(oldRoomType); } } //修改新的房型的可用数和预定数 RoomTypenewRoomType=roomTypeService.find(bookOrder.getRoomTypeId()); newRoomType.setAvilableNum(newRoomType.getAvilableNum()-1); newRoomType.setBookNum(newRoomType.getBookNum()+1); roomTypeService.updateNum(newRoomType); if(newRoomType.getAvilableNum()<=0){ //没有可用房间数 newRoomType.setStatus(0);//设置成满房 roomTypeService.edit(newRoomType); } } ret.put("type","success"); ret.put("msg","修改成功!"); returnret; } /** *分页查询预定订单信息 *@paramname *@parampage *@return */ @RequestMapping(value="/list",method=RequestMethod.POST) @ResponseBody publicMap<String,Object>list( @RequestParam(name="name",defaultValue="")Stringname, @RequestParam(name="accountId",defaultValue="")LongaccountId, @RequestParam(name="roomTypeId",defaultValue="")LongroomTypeId, @RequestParam(name="idCard",defaultValue="")StringidCard, @RequestParam(name="mobile",defaultValue="")Stringmobile, @RequestParam(name="status",required=false)Integerstatus, Pagepage ){ Map<String,Object>ret=newHashMap<String,Object>(); Map<String,Object>queryMap=newHashMap<String,Object>(); queryMap.put("name",name); queryMap.put("status",status); queryMap.put("accountId",accountId); queryMap.put("roomTypeId",roomTypeId); queryMap.put("idCard",idCard); queryMap.put("mobile",mobile); queryMap.put("offset",page.getOffset()); queryMap.put("pageSize",page.getRows()); ret.put("rows",bookOrderService.findList(queryMap)); ret.put("total",bookOrderService.getTotal(queryMap)); returnret; } }5.5数据库设计房间表(rooms表)用于管理酒店的房间的信息,这里面包括(长度,宽度,类型,价格,照片等),其中rid为主键值,数据类型为int,其他都为varchar如图3.1rooms表所示表5.1rooms表列名数据类型长度约束ridint200PRIMARYKEYWidthVarchar200DEFAULTNULLStateVarchar200DEFAULTNULLTelVarchar200DEFAULTNULLTypeVarchar200DEFAULTNULLMoneyVarchar200DEFAULTNULLPhotoVarchar200DEFAULTNULL 用户表(user表)是用于管理和储存注册用户的相关信息,这里面包括(id,名字,手机号,身份证,性别,密码,号数),如图3.2user表所示表5.2user表列名数据类型长度约束idint300PRIMARYKEYnameVarchar300DEFAULTNULLphoneVarchar300DEFAULTNULLIdentifyVarchar300DEFAULTNULLsexVarchar300DEFAULTNULLpasswordVarchar300DEFAULTNULLcardVarchar300DEFAULTNULL5.6人脸识别模块实现该酒店管理系统以人脸识别技术贯穿,云端通过移动端摄像头对客户人脸信息进行采集并直接发送至智能门控系统中,通过人脸匹配后控制房门锁,实现一步到位,无需通过酒店前台工作人员,入住全程由客人自行办理,一定从程度上减少酒店管理成本,还能得到顾客新鲜体验感。目前技术有限,仅可以实现一人一房一张脸,如有随从住客,仅能由通过认证的住客带入房间。图8人脸识别模块人脸识别检测模块的调用首先要去大厂平台获取APP_ID、APP_KEY、SECRET_KEY三个重要密钥,然后借用大厂上的APIExplorer自动生成调用代码。个人密钥可以免费申请,稍微填一下资料就可以的。图9人脸验证接口调用publicclassVerifyFace{publicstaticvoidmain(String[]args){try{Credentialcred=newCredential("Secretld密钥","SecretKey密钥");HttpProfilehttpProfile=newHttpProfile();httpProfile.setEndpoint("");ClientProfileclientProfile=newClientProfile();clientProfile.setHttpProfile(httpProfile);IaiClientclient=newIaiClient(cred,"ap-guangzhou-open",clientProfile);Stringparams="{\"PersonId\":\"1\"}";VerifyFaceRequestreq=VerifyFaceRequest.fromJsonString(params,VerifyFaceRequest.class);VerifyFaceResponseresp=client.VerifyFace(req);System.out.println(VerifyFaceRequest.toJsonString(resp));}catch(TencentCloudSDKExceptione){System.out.println(e.toString());}}}当接口过期的时候,可采用单机的人脸识别算法需要手动核对信息,以下为关键代码图。图5-人脸识别关键实现代码以下为人脸识别效果图,运用opencv与os框架实现。图5-人脸识别效果图第六章系统测试严格来说本论题的系统测试应该包括硬件测试、软件测试与整机测试的,由于整机还有待开发,固目前只分析硬件与软件测试。其中最为核心的是系统的人脸识别准确度和识别效率。6.1系统功能测试首先通过服务器链接进行对移动APP联网响应,再将门控系统通电并且连接网络,服务器显示正常即测试通过。其次测试员对准门控系统的摄像头,摄像头自动识别人脸并进行验证,测试范围内的时间里,验证通过则反馈到云端服务器并发送开门指令,执行开门动作,若验证失败,则保持关门状态。当门控系统断网时,不与服务器发生响应,即保持关门状态。此时只能依靠在通电的情况下提前录入相关数据的酒店管理员进行单机人脸识别验证方能执行开门动作。6.2人脸识别模块测试通过对不同公司的人脸识别API接口以及相关可靠数据测试得出,在测试人数一定的情况下以及其摄像头灯光充足下,识别率基本上稳定在99%以上,平均的人脸识别准确率以及其响应效率控制在1s左右。其中Face++公司以及阿里旗下的较为先进。人脸识别的测试早已在多年前根据不同层次的卷积程度以及其不同算法进行无数次的测试,虽然目前所作的测试相比之下微不足道,但是还是对人脸识别模块有所研究,以下是对人脸识别登陆测试的核心代码。publicstaticJSONObjectFaclogin(ImageimageU){//人脸登录 JSONObjectjson=newJSONObject(); json.put("error_msg","error"); if(imageU!=null){ JSONObjectdfjson=DetectionFace.Detection(imageU);//合格照片检查 if("SUCCESS".equals(dfjson.get("error_msg"))){ JSONObjectuf=UserFace.User(imageU);//提交 if("SUCCESS".equals(uf.get("error_msg").toString())){//查询出结果 Doublescore=newDouble(uf.get("score").toString()); if(score>70){ json.put("error_msg","SUCCESS"); json.put("user_id",uf.get("user_id").toString()); }图10人脸识别登陆测试用例6.3远程控制端性能测试门控系统中的人脸识别模块通过WIFI远程控制端发送相应数据到服务器中,再到移动端的云端服务器中,因为网络问题必然存在一些网络延迟,通过对比普通APP与微信小程序可知,微信小程序中调用的云端数据处理稍微快那么0.5s左右,不过差距也不大目前还是可以满足其系统的运行效率标准。第七章结论与未来研究方向7.1结论通过对基于人脸识别的酒店自助管理系统研究,其中花了大量时间在人脸识别的研究上,后来发现这是一个无底洞并且也值得我接下来业余时间对此进行研究,目前的技术有限,无法自己另外做一套区别于市面上的人脸识别算法,接入外部模块是如今云端系统最好的选择,结合当前现况来讲需要花时间的不再是从前的敲代码反而是对软件的设计与界面UI设计来得比较真实与快捷,毕竟如今模拟平台数不胜数,甚至有不少自动生成代码的移动端设计。酒店的智能化程度推动着人工智能发展,而人脸识别便是人工智能最开始的产物,这也将会是以后继续需要研究的领域,虽说人脸识别的缺点多于虹膜与指纹识别,但随着科技的发展,人脸识别必将成为人们出行的主导作用。酒店管理系统的基础上,设计结果颠覆了传统的登陆模式,不再是以往的手机号与账号注册登陆了,而是直接人脸识别认证登陆,这有便于监控APP本身以外还能对住客及时接入公安系统,也被实时监控。那么进入预定界面之后跟如今的酒店预定差别不大,在预定好并完成支付的时候,云端将把人脸图像特征采集等传输到智能门控,实现一步到位无需办理中间入住手续。当然,其中有不少弊端,兴许大家会考虑安全问题,毕竟所有人都可以上酒店电梯,酒店里面的所有监控如果都能智能识别到住客的危险并实时接入公安系统,那么是不是住客就不需要担心危险了。除了模块流程以外跟重要的是模块体验感,如今手机上的软件如云,如何吸引消费者的眼球越来越成为软件设计主流,模块多数可以采用第三方的而通过比较,界面相对简陋或者设计感不强的商家成交量也不会太大。那么利用小程序设计出来的界面效果也算是界面模块了,这个模块所涵盖的工作量就比较大了,首先是商家管理系统,包含了住客信息模块和房间状态模块,若出现异常,商家可在管理平台上进行信息修改,为了防止商家管理者出现责任争执,每次不同商家在平台的修改都有记录。系统并不全面,仍然有多处模块需要完善与修改的地方,希望的是在不断修改与突发奇想之后并被相关酒店管理者借鉴参考也算是实现了此系统的价值了。通过对传统的入住系统的对比分析,基于人脸识别的酒店自助入住系统不仅在入住效率上有所提高还能让消费者有着愿意去尝试的心态做出尝试消费,这种消费理念在消费行为里是很难得的,也使得酒店管理者减少了管理成本。系统设计论述得比较笼统,具体详细设计还需要进一步完善与开发。7.2未来研究方向未来可能会往小程序方面发展,开发对自己工作有帮助的小程序,前一段时间在一家公司实习就被需要这项技能,因为技术不够成熟没有拿下该项目,这是一个动力与方向指导我去学习小程序,目前的小程序模块也越来越丰富,很多都可以调用了。待时机成熟之时,属于自己开发那套小程序被运营起来是我毕业之后最想去完成的事情之一。还需要不断地磨练自己,严格鞭策自己重新投入到学习之中,即使边工作边学习,也不能耽误了今后研究的方向,成为社会有价值的人,做有价值的事。参考文献潘福达.进酒店自助办理入住.全流程无接触[N].北京日报客户端,2020-02-19.江白华.基于深度学习的人脸识别研究[D]安徽.安徽理工大学.2019.吕婧淑.基于区块链和人脸识别的双因子身份认证模型[J]应用科学学报,2019,(2):164-178.THACHANSOPHANYOULY.基于ShuffleNet的人脸识别[D]浙江.浙江大学.2019.Shieyguoxiaoling.微信小程序--人脸采集与识别[Z]/shirleyguoxiaoling/java/article/details/80474910,2018-05-28.李晓风.基于人脸识别的自助式酒店入住装置[P].中国专利:201920813192.6.2019-05-31未知.酒店入住自助办理系统设计方案[Z]/p-1422604031.html.2016-01-10张家亮.主题酒店智能集成控制系统设计与实现[D]武汉.武汉理工大学.2014.孔垂禹.远程终端可控AI门禁系统[J].吉林大学学报,2019,(5):533-539.[10]顾德喜.基于百度AI开放平台的人脸识别门禁系统[D]江南.江南大学.2019.[11]赵琪.基于Android系统设计的人脸识别门锁[D]江苏.三江学院.2017致谢首先感谢徐老师对我论题的认可,当时这个论题也是自己一时兴起想到的,也没有考虑得特别周到,甚至是没有考虑到自己曾经掌握的知识是否能驾驭此论文,但是徐老师还是选择了对我的相信,并在论文撰写期间与论文指导工作中对我细心并耐心教导。在学校快要通知提交论文之时,老师也能对我忙碌的工作有所理解,让我及时跟上毕业论文进度,以防耽误毕业,感谢!其次要感谢的是过去四年的老师,对每个同学都不放弃不抛弃,真心诚意对待同学并鼓励我们通过实际操作提升自己的能力。还要感谢的是即将要参加答辩的老师,虽然还没开展答辩,我想评阅与答辩老师都会对我们的论文极其负责与指导,使得我们画上完美的毕业句号。最后我还想要感谢大学以来陪伴我的同学们还有背后支持我的父母,是身边的人才让我们活得更加有意义,大学四年同学们也选择相信我才让我一直以来从事班长这一职务,但是期间也留下了不少遗憾。总有一些遗憾才会让生活过得去,才会使我们变得更加的努力,不管是毕业以后做什么事,时刻怀揣一颗感恩之心也是会收获更多!

捷键与一些电脑小技巧HYPERLINKwinkey+d:

这是高手最常用的第一快捷组合键。这个快捷键组合可以将桌面上的所有窗口瞬间最小化,无论是聊天的窗口还是游戏的窗口……只要再次按下这个组合键,刚才的所有窗口都回来了,而且激活的也正是你最小化之前在使用的窗口!

--这个就是winkeywinkey+f:

不用再去移动鼠标点“开始→搜索→文件和文件夹”了,在任何状态下,只要一按winkey+f就会弹出搜索窗口。

winkey+r:

在我们的文章中,你经常会看到这样的操作提示:“点击‘开始→运行’,打开‘运行’对话框……”。其实,还有一个更简单的办法,就是按winkey+r!

alt+tab:

如果打开的窗口太多,这个组合键就非常有用了,它可以在一个窗口中显示当前打开的所有窗口的名称和图标●,选中自己希望要打开的窗口,松开这个组合键就可以了。而alt+tab+shift键则可以反向显示当前打开的窗口。

winkey+e:

当你需要打开资源管理器找文件的时候,这个快捷键会让你感觉非常“爽”!再也不用腾出一只手去摸鼠标了!

小提示:

winkey指的是键盘上刻有windows徽标的键●。winkey主要出现在104键和107键的键盘中。104键盘又称win95键盘,这种键盘在原来101键盘的左右两边、ctrl和alt键之间增加了两个windwos键和一个属性关联键。107键盘又称为win98键盘,比104键多了睡眠、唤醒、开机等电源管理键,这3个键大部分位于键盘的右上方。

再补充点

F1显示当前程序或者windows的帮助内容。

F2当你选中一个文件的话,这意味着“重命名”

F3当你在桌面上的时候是打开“查找:所有文件”对话框

F10或ALT激活当前程序的菜单栏

windows键或CTRL+ESC打开开始菜单

CTRL+ALT+DELETE在win9x中打开关闭程序对话框

DELETE删除被选择的选择项目,如果是文件,将被放入回收站

SHIFT+DELETE删除被选择的选择项目,如果是文件,将被直接删除而不是

放入回收站

CTRL+N新建一个新的文件

CTRL+O打开“打开文件”对话框

CTRL+P打开“打印”对话框

CTRL+S保存当前操作的文件

CTRL+X剪切被选择的项目到剪贴板

CTRL+INSERT或CTRL+C复制被选择的项目到剪贴板

SHIFT+INSERT或CTRL+V粘贴剪贴板中的内容到当前位置

ALT+BACKSPACE或CTRL+Z撤销上一步的操作

ALT+SHIFT+BACKSPACE重做上一步被撤销的操作

Windows键+D:最小化或恢复windows窗口

Windows键+U:打开“辅助工具管理器”

Windows键+CTRL+M重新将恢复上一项操作前窗口的大小和位置

Windows键+E打开资源管理器

Windows键+F打开“查找:所有文件”对话框

Windows键+R打开“运行”对话框

Windows键+BREAK打开“系统属性”对话框

Windows键+CTRL+F打开“查找:计算机”对话框

SHIFT+F10或鼠标右击打开当前活动项目的快捷菜单

SHIFT在放入CD的时候按下不放,可以跳过自动播放CD。在打开wo

rd的时候按下不放,可以跳过自启动的宏

ALT+F4关闭当前应用程序

ALT+SPACEBAR打开程序最左上角的菜单

ALT+TAB切换当前程序

ALT+ESC切换当前程序

ALT+ENTER将windows下运行的MSDOS窗口在窗口和全屏幕状态间切换

PRINTSCREEN将当前屏幕以图象方式拷贝到剪贴板

ALT+PRINTSCREEN将当前活动程序窗口以图象方式拷贝到剪贴板

CTRL+F4关闭当前应用程序中的当前文本(如word中)

CTRL+F6切换到当前应用程序中的下一个文本(加shift可以跳到前

一个窗口)

在IE中:

ALT+RIGHTARROW显示前一页(前进键)

ALT+LEFTARROW显示后一页(后退键)

CTRL+TAB在页面上的各框架中切换(加shift反向)

F5刷新

CTRL+F5强行刷新1.打开“我的电脑”-“工具”-“文件夹选项”-“查看”-在“显示所有文件和文件夹”选项前打勾-“确定”

2.删除以下文件夹中的内容:

x:\DocumentsandSettings\用户名\Cookies\下的所有文件(保留index文件)

x:\DocumentsandSettings\用户名\LocalSettings\Temp\下的所有文件(用户临时文件)

x:\DocumentsandSettings\用户名\LocalSettings\TemporaryInternetFiles\下的所有文件(页面文件)

x:\DocumentsandSettings\用户名\LocalSettings\History\下的所有文件(历史纪录)

x:\DocumentsandSettings\用户名\Recent\下的所有文件(最近浏览文件的快捷方式)

x:\WINDOWS\Temp\下的所有文件(临时文件)

x:\WINDOWS\ServicePackFiles(升级sp1或sp2后的备份文件)

x:\WINDOWS\DriverCache\i386下的压缩文件(驱动程序的备份文件)

x:\WINDOWS\SoftwareDistribution\download下的所有文件

3.如果对系统进行过windoesupdade升级,则删除以下文件:x:\windows\下以$u...开头的隐藏文件

4.然后对磁盘进行碎片整理,整理过程中请退出一切正在运行的程序

5.碎片整理后打开“开始”-“程序”-“附件”-“系统工具”-“系统还原”-“创建一个还原点”(最好以当时的日期作为还原点的名字)

6.打开“我的电脑”-右键点系统盘-“属性”-“磁盘清理”-“其他选项”-单击系统还原一栏里的“清理”-选择“是”-ok了

7、在各种软硬件安装妥当之后,其实XP需要更新文件的时候就很少了。删除系统备份文件吧:开始→运行→sfc.exe/purgecache近3xxM。(该命令的作用是立即清除"Windows文件保护"文件高速缓存,释放出其所占据的空间)

8、删掉\windows\system32\dllcache下dll档(减去200——300mb),这是备用的dll档,只要你已拷贝了安装文件,完全可以这样做。

9、XP会自动备份硬件的驱动程序,但在硬件的驱动安装正确后,一般变动硬件的可能性不大,所以也可以考虑将这个备份删除,文件位于\windows\drivercache\i386目录下,名称为driver.cab,你直接将它删除就可以了,通常这个文件是74M。

10、删除不用的输入法:对很多网友来说,WindowsXPt系统自带的输入法并不全部都合适自己的使用,比如IMJP8_1日文输入法、IMKR6_1韩文输入法这些输入法,如果用不着,我们可以将其删除。输入法位于\windows\ime\文件夹中,全部占用了88M的空间。

11、升级完成发现windows\多了许多类似$NtUninstallQ311889$这些目录,都干掉吧,1x-3xM

12、另外,保留着\windows\help目录下的东西对我来说是一种伤害,呵呵。。。都干掉!

13、关闭系统还原:系统还原功能使用的时间一长,就会占用大量的硬盘空间。因此有必要对其进行手工设置,以减少

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论