毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

毕业论文

基于微型计算机的人脸识别门禁系统设计

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计
毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计
毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

1. 课题意义及目标

随科技的不断发展,安全性的要求也不断提高,IC卡等传统身份识别工具已不能满足社会需求。所以从通用性、安全性、成熟性和造价性等多方面综合考虑,研究新的识别工具是一个必然的趋势。基于人脸识别的门禁系统的设计,能够提高传统安保行业的安全性、方便性、直观性等,最为有效的杜绝了门禁管理中的人为因素,充分体现了门禁管理的人工智能性,避免不必要的安全隐患和人员纠纷。因此本次毕业设计选择了人脸识别门禁系统的研究与实现,以保证门禁数据的真实性,真正做到安全、方便和直观的门禁管理,从而进一步提高公司、仓库、家庭等地的安保水平和管理稳定性。

本次设计将以微型计算机为核心,需选择合适的电源模块、检测模块、、数据存储模块、键盘模块、显示模块和声光报警模块,完成人脸识别系统的检测并报警处理的设计。要求能够将出入门禁系统的人员面部进行识别,能够在人脸数据匹配预存数据库资料时启动门禁系统中开门系统,当人脸数据不匹配预存数据库资料时启动门禁系统中闭门系统,实现防范防盗的作用,创造安全良好的生活工作环境。

2.主要任务

(1)查阅资料,了解人脸识别门禁系统的原理和基本构成,提出系统总体设计方案。

(2)通过学习完成的各个控制硬件电路设计(如检测模块,A/D转换模块,声光报警模块,系统电源模块等)。

(3)完成人脸识别门禁系统的软件设计。

(4)完成人脸识别门禁系统的调试、仿真和实物制作。

(5)完成设计说明书。

基于微型计算机(树莓派)的人脸识别门禁系统

摘 要

随科技的不断发展,社会不断的进步,人们的自身安全意识和要求也再不断提高,IC卡等传统身份识别工具已不能满足社会需求。所以从通用性、安全性、成熟性和造价性等多方面综合考虑,研究新的识别工具是一个必然的趋势。为能够提高传统安保行业的安全性、方便性、直观性和有效的杜绝了门禁管理中的人为因素,通过人工智能方式,避免不必要的安全隐患和人员纠纷。

提出一种基于微型计算机(树莓派)的人脸识别门禁系统,该系统通过使用人脸识别云服务可以实时对人员进行分析辨认,以保证门禁数据的真实性,真正做到安全、方便和直观的门禁管理,从而进一步提高公司、仓库、家庭等地的安保水平和管理稳定性。文中详细描述了该系统的搭建和实现过程,为相关产品提供了一套很好的解决方案。对所设计的系统进行了模拟测试,其测试结果达到了设计目标。

关键词: 微型计算机(树莓派),人脸识别,云服务,Python

Face recognition access control system based on microcomputer (raspberry pi )

Abstract

With the continuous development of science and technology, the continuous progress of society, people’s awareness of their own safety and requirements have been continuously improved, and other traditional identification tools such as IC card can not meet the social needs. Therefore, considering the versatility, security, maturity and cost, it is an inevitable trend to study new identification tools. In order to improve the security, convenience, intuitive and effective of the traditional security industry, and eliminate the human factors in the access control, we can a
void unnecessary security risks and personnel disputes through artificial intelligence.

Based on micro computer (raspberry) face recognition access control system, the system through the use of cloud services can be real-time face recognition of personnel to analyze and identify, in order to ensure the authenticity of data access, truly safe, convenient and intuitive access management, and further improve the company, from the warehouse, and family security the level of management and stability. The construction and implementation process of the system are described in detail, which provides a good solution for related products. The designed system has been simulated and tested, and the test results have reached the design goal.

Keywords:micro computer(raspberry pie), face recognition, cloud services, Python

目录

第 1 章 绪 论

1.1 研究背景

随着社会的发展,安全教育不断的深化,人们的安全防范意识也逐渐赠强,这里面不光包括个人安全,还涉及到了财产和知识产权的保护,安检的高效,贸易的顺利流通等方面的需求增加,这种生物识别技术又得了新的重视和快速发展。人脸识别随着近几年的发展,成本也逐渐降低,已被广大客户所接受,其中人脸识别技术是应用最为广泛的。在国外,人脸识别技术早已被大量使用在国家重要部门以及军警等安防部门。在国内,对于人脸识别技术的研究始于上世纪90年代,目前主要应用在公安、金融、网络安全、物业管理以及考勤等领域。

市场对门禁的安全性和可靠性的要求也越来越高,技术也在不断革新,云技术的兴起使得这现技术,又向前迈进了一步,不光是安全性和可靠性的提高,主要是体现在该技术的成本、编程、应用领域等方面变得更低,更简单,更广泛了。坚信这项技术会越来越好,甚至到时候生物识别技术又会有新的识别方式取代。

1.2 人脸识别的研究目的和意义

生物识别技术领域里极富挑战性的课题之一,再加上该技术应用广泛,对这项技术的研发需要的知识领域十分广泛,需要数学函数,生物技术,生理学,构图等诸多学科的内容。如今,虽然在这方面的研究已取得了一些可喜的成果,但是FRT在实用应用中仍面临着很严峻的问题,因为人脸五官是非常相似的,而且人脸本身又是由很灵活的肌肉群组成,所以人脸可以做出很多表情,于是给准确识别带来了相当大的麻烦。如何能正确识别大量的人并满足实时性要求是迫切需要解决的问题。

基于视觉通道信息的面部感知系统,包括人脸检测和跟踪、面部特征定位、面部识别、人脸归类(年龄、种族、性别等的判别)、表情识别、唇读等分系统,这些往往是要进行检测的,但最难的还是在图像提取上,提取哪些特征量才能将这些信息反馈,提高安全性和可靠性呢?这里首要考虑的就是人体本身,再次就是监测的环境也十分重要,其中光线的影响就很大,光的强弱有时候会将人脸特征遮蔽和凸显,造成人脸识别的误差,如果可以进步解决这些问题,就会提高安全性和可靠性,保证人民的人身及公共财产安全。

1.3国内外研究现状

1.3.1人脸识别图像处理的国外研究现状

上世纪80年代初,在美国马尔博士多年来一直参与机器视觉的研发,在机器视觉领域占有重要地位,马尔博士从图像处理的角度认为机器视觉大致分为三个层次,主要包括原理层次、软件层次和硬件层次三个层次,他是第一个提出了系统的比较完整的视觉结构图。马尔的视觉结构认为,三维图像画面可以感知各种不动的或者变化的空间,这是机器视觉系统首要完成的工作,其中测量、确定固定位置与识别空间中的三维物体尤为重要。上世纪下叶,行动,应用的自由主义派别,第一次引用并应用了自主机器识别系统,把物种视觉的理念与看法结合在了一起,突出了视觉机器系统的觉察性、理念性以及可行性。自主机器识别系统认为,机器识别应自动改变摄像头小孔内径,角度,方位等参数并主动得到图像内容。自主机器识别系统主要研究以下方面:

(1)工作能力。近几年来的自主机器识别系统的研究对机器视觉过程中的工作能力不断看重,其中有对性能以及认识策略等各种问题的研究,首先要理解清楚哪些是原先就拥有的观点,哪些是后天理解认识所得到的成果,各种工作方针与策略就是在此原有知识理论上得到进一步认识。

(2)主动视觉空间变化,即SpaceVariant信号的处理,选择以及注意机制(SelectiveAttention)的表示。摄像头拍摄获取到的图像有较复杂且给处理器带来较多的信息冲击等特点,导致机器识别系统无法客观主动地解决。自主机器识别在信号来临的初期阶段对信号在时间上和较大领域按一定方式缩小简化,保存一些对处理器有价值方面,以便后续的处理。

主动视觉的前期研究进展缓慢。上世纪80年代初, krotkov和brown及ballard完成了以联合检测传感器为基础的实验,打破了主动视觉的关键性。在研究中,krotkov和brrown及ballarad通过一系列的工作完成了对检测仪表的自动控制,摄像头通过对外界环境的摄取,随时跟随外部环境的变化实现对行驶小车的控制[]。从此以后,摄像机就被用做视觉检验的工作。

到目前为止,机器视觉仍然有非常明显的优点,比如摄取的内容丰富,能够远程控制,可以及时地检测和响应路况的变化;同时,机器视觉识别最大的缺点是检测到的信息量太大,有时候会影响着系统的实时性。高性能硬件的开发,新的算法是视觉性能提高的关键性因素。我们知道日本研发的集成电路大规模的应用到机器视觉对视觉的发展有着很大的促进作用;UBM大学重新设计的EIMS.Vision系统,在机器视觉领域也有着不可替代的作用。由于上面的方法成本较高,现在很多科研人员又在重新思考新的解决办法,目前有人想到采用高效的内部算法来实现。最先接触主动机器视觉理论的科学家是一名来自University of Pennsylvania的R.Bajcsy教授,随后在重新构建的三维空间中应用到了E.Krotkow系统。在Krotkow系统中,我们很容易实现的调整摄像机的高度,调节摄像机的像素,这样有利于我们更大程度上研究机器视觉。在接下来几年的探索中,科学家们通过改变其他摄像头检测,以及内部调节器的参数,构建新的解决算法也有一定的可行性。例如:国外的科研人员使用Hough变换的方法,从摄像头拍摄到的信息中提取外界环境标志物,采用SSD算法,并用数据测量采用自适应滤波处理,可减少误差测量。虽然国内在机器视觉摄像头领域的研究起步较晚,但已经取得了突飞猛进的发展。机器视觉系统中对于障碍物的检测问题具有很大的现实作用,如果我们能够在这一领域内有突破性的研究成果,将会更好的改善我们的生活状况。

1.3.2人脸识别图像处理的国内研究现状

人脸识别系统现在在大多数领域中起到举足轻重的作用,尤其是用在机关单位的安全和考勤、网络安全、银行、海关边检、物业管理、军队安全、智能身份证、智能门禁、司机驾照验证、计算机登录系统。我国在这方面也取得了较好的成就,国家863项目&

ldquo;

面像检测与识别核心技术&

rdquo;

通过成果鉴定并初步应用,就标志着我国在人脸识别这一当今热点科研领域掌握了一定的核心技术。北京科瑞奇技术开发股份有限公司在2002年开发了一种人脸鉴别系统,对人脸图像进行处理,消除了照相机的影响,再对图像进行特征提取和识别。这对于人脸鉴别特别有价值,因为人脸鉴别通常使用正面照,要鉴别的人脸图像是不同时期拍摄的,使用的照相机不一样。系统可以接受时间间隔较长的照片,并能达到较高的识别率,在计算机中库藏2300人的正面照片,每人一张照片,使用相距1–7年、差别比较大的照片去查询,首选率可以达到50%,前20张输出照片中包含有与输入照片为同一人的照片的概率可达70% 。 2005年1月18日,由清华大学电子系人脸识别课题组负责人苏光大教授主持承担的国家”十五”攻关项目《人脸识别系统》通过了由公安部主持的专家鉴定。鉴定委员会认为,该项技术处于国内领先水平和国际先进水平。

人脸识别技术已经被广泛应用于公安侦破、考勤系统、摄像头监视系统、网络应用、身份识别、支付系统等领域,云技术则简化了人脸识别技术,促进了这项的发展,让使用更加广泛,成本也相对降低。

1.4 本设计主要研究内容

本文通过基于微型计算机(树莓派)的人脸识别门禁系统展开探索研究,通过对人脸识别和门禁系统的的功能分析,完成人脸识别和门禁系统开闭的整体设计,从整体上来看,系统设计分为软件和硬件两部分,其中最主要的,也是本设计的难点当属内部软件算法,也就是采集图像后的图像处理。本设计的基本任务是对人员脸部进行识别,通过数据的比对,并控制门禁系统的开闭,也就是当数据匹配成功时,启动门禁系统,当数据匹配不成功时,不启动门禁系统。本文内容总共分为6章,第一章是&

ldquo;

绪论&

rdquo;

,是对本文的大体概括,第二章至第五章是本论文最主要的部分,也是该设计最具体的工作,第六章是&

ldquo;

总结与展望&

rdquo;

,是作者自己在整个过程的收获与体会。具体结构如下:

第一章 绪论

大体讲述本毕业设计,即人脸识别图像处理的研究价值意义以及发展历程,非常具体地讲述了人脸识别图像处理的国内外研究现状。本文设计的人脸识别门禁系统,通过程序内部的图像处理,数据匹配来实现对大门的控制,通过这一阶段的探索研究,能够有效地实现门禁系统的启停,起到安全防范作用,研究目的在为今后的人脸识别门禁系统的设计提供一些想法和思路,同时通过这一设计,增加自己的专业技能,使自己能对本专业的理论知识有更深入地理解。

第二章 人脸识别门禁系统总体设计方案

本文从人脸识别门禁系统总体设计方案出发实际情况出发,结合自身水平条件的限制,详细分析了摄像头的使用条件以及内部原理,以及摄取到的图像的基本信息。同时论文也简单叙述了人脸识别门禁系统的门禁系统驱动模块,以及摄像头模块的硬件连接情况,并且也绘制了人脸识别门禁软件系统总体框架流程图。

第三章 人脸识别门禁系统的硬件设计

为了比较准确的采集人脸图像,对图像进行处理,在进行数据匹配,来实现对人脸的识别,并控制门禁系统的驱动模块,必须提供稳固的硬件保障。基于微型计算机(树莓派)的人脸识别门禁系统的硬件系统部分进行设计。触摸传感器被触发后启动人脸识别的主程序。蜂鸣器和LED流水灯发出提示讯号,当检测人脸为正确人脸并与通过与本地照片对比正确后,步进电机转动即开门。硬件系统部分包括:图像处理模块、系统电源供电模块、树莓派专用摄像头检测模块、步进电机运动控制驱动模块、报警模块、显示模块等。

第四章 人脸识别门禁系统的软件系统设计

详细介绍了软件系统的安装过程,软件部分包括:win32 DiskImager、SDFormatter、树莓派镜像文件。之后还需要对软件进行配置中文环境以及扩展文件系统,因为大部分软件系统都是默认英文字库,需要找到一个良好的中文词库,进行修改。具体说了RPI.GPIO搭建及使用,用第三方写好的库函数来完成具体的操作,主要运用的编程语言就是Python,以及Opencv运行环境的搭建,本次设计主要利用opencv进行拍照,掌握opencv的简易人脸识别的原理及对Python编程语言的学习。

第五章 系统运行以及源代码分析

详细介绍了微型计算机(树莓派)的软件系统运行操作,需要先找到自己电脑的IP,打电脑的远程桌面软件,通过该软件进入微型计算机(树莓派)系统后,再连接本地wifi信号。具体说明了旷视FACE++ API的使用,人脸识别需要先采集人脸照片进行上传,再对出入人员进行人脸采集,图像的处理是通过调用Face++ API的云服务功能来实现的,然后反馈人脸相似度的信息,最后当相似度大于百分之七十,则开门,反之则不启动。(电机正转开门 、停止并发出警报声、电机反转关门)具体的对源代码进行了分析。对系统的调试及运行也进行了具体描述,主要指出了调试过程中出现的相应问题,并对其进行了解决处理,这个过程是我更加深入了解了该系统和源代码的组成,对Python编程语言也有了更加深刻的理解。

第六章 总结和展望

对本文主要的研究内容和工作进行总结,结合当前现有成果,针对理论和实际应用中的缺陷,指出进一步可展开的工作。

第2章 人脸识别门禁系统总体设计方案

控制要求是指在目标系统早期实现的能力、特征、外围设备等方面的前提和初步设想。有必要考虑设计的实际情况和设计时要解决的关键问题,以建立可行性分析和规划或建立模型。通过各方面的互相补充,落实最后的设计方案,以此保证最后的成品符合要求。一方面,设计方案是分析系统设计的基本要求,需要通过软件进行验证。另一方面,该系统的设计方案是软件从设计到维护的一系列工作的主要依据。

2.1人脸识别门禁系统的总体设计方案

基于微型计算机(树莓派)树莓派的人脸识别门禁系统分为微型计算机(树莓派)开发板模块、电源模块、转5V降压模块、触摸感应传感器模块、报警模块和步进电机模块。使用本套系统之前需要在本地存储若干张人脸照片,来进行人脸识别,也可以是多人。程序运行时微型计算机(树莓派)会将照片中的面部图像发送至云端服务进行分析,并把人脸的面部参数存储到face++开发者网站,待其处理完毕后再从云端传回识别结果。触摸传感器触发人脸识别主函数进行实时拍照并将此照片发送至云服务处理并将比对结果发送到微型计算机(树莓派)。流水灯和蜂鸣器提示、识别正确后步进电机转动,并将结果显示在微型计算机(树莓派)终端。

由此可设计出人脸识别门禁系统的总体结构框图,如图2-1所示:

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图2.1 人脸识别门禁系统的总结构框图

本次设计中测试及最终使用,一直采用Python2.7编程语言对微型计算机(树莓派)系统进行开发和设计,其中人脸识别调用了face++的API, 官网提供了基于Python的SDK,该语言的可读性高很适合本系统的开发。本系统总体结构图如上。本地终端为微型计算机(树莓派),云服务采用了FACE++人工智能开发平台。

2.2系统主要功能实现

本论文中所设计的系统是对人脸图像进行处理识别并与门禁系统配合起到安全防盗的基本功能。工作原理是首先将三张待检测人员的照片存储到树莓派文件系统,执行此段程序时,调用face++的detectAPI将三张照片中的人脸信息存储在开发者账号,然后执行search的API,对现在进行的人脸识别程序中拍摄的照片进行处理,检测照片中的人脸信息并与之前上传的人脸信息对比,并返回相似度最高的人脸信息。我们在程序中只提取confidence的值,即人脸相似度。当触摸开关被按下,程序会发出警报LED闪烁,接着进行一张人脸的采集。并将此照片与已经上传的三张照片做对比。判断出相似的人脸。当相似度大于70%,则开门(电机正转开门 、停止并发出警报声、电机反转关门)。

系统由微型计算机(树莓派),驱动模块,检测模块,显示模块,报警模块,电源模块等组成。系统带有按键,用户可以通过按键触发人脸识别功能;系统具有采集和检测人脸功能,可以当进入人员匹配成功时,开启大门,同时报警装置启动;当进入人员匹配失败时,大门不开启以保障安全。

在本设计中,系统主要模块各自的功能如下:

(1)主控模块。在本设计中主要起到集中分配的作用,不仅需要即时采集人脸图像,调用API处理图像,同时还要提供摄像头检测、驱动芯片、显示屏等数字器件的工作信号。

(2)按键模块。系统的输入部分,实现人机交互。通过接收触控按键的电平信息,使得微型计算机(树莓派)得到需要的数据。

(3)驱动模块。厂门电极作为大门开闭的过程控制的控制元件,其驱动主要由驱动芯片实现。通过操纵大门电机正转和反转,实现对大门的开闭控制。

(4)显示模块。以连接一台电脑显示器即可

(5)系统电源模块。系统电源模块主要负责给系统提供符合要求的电流与电压,由于微型计算机(树莓派)使用低压直流电压,就需要将两节锂电池18650电源7V转换为符合要求的电压、电流。从而使整个系统有持续的供电保证。[4]

本系统的设计具有半自动门禁系统的特点。待检测人员需要用手按下触摸开关,进而触发人脸识别。系统将对其进行摄像并将图像发送至云端服务进行处理,待处理完之后微型计算机(树莓派)对返回的比对数据结果进行判断。如果对比成功,则驱动步进电机开始旋转。系统的实时性是用户体验的关键要素,系统正常工作时待识别的人员感觉不到卡顿状况 ,实时性良好。

第3章 人脸识别门禁系统硬件设计

3.1主控模块

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图3.1 主控模板实物图

本次设计的主控模块是使用微型计算机──树莓派3代B型主板。树莓派3代B型主板,该主控板模块的优势是拥有良好的标准模块扩展性,主板上预留的接口可完美对接与之配套的树莓派500万像素专用摄像头、7英寸液晶触摸屏、Sense Hat传感器模块等。除了可以在爱好者论坛下载网民大神们做好的系统包之外,如今还可以直接购买预装了树莓派代3代B型主板专用NOOBs系统的MicroSD卡。说到这里就又促生了树莓派代3代B型主板的进一步优势,那便是与微软的结合,微软为该产品推出了与之适配的Windows 10 IoT版操作系统,用户可以使用到更加熟悉的UI,使得通过标准扩展模块和GPIO接口扩展模块操作变得简单,IP等协议的配置也变得更加简单,同时驱动又在不断更新,不断完善,所以不用再去考虑重新开发Windows的驱动程序,以上这些与树莓派代3代B型主板的结合,对新入门的玩家以及互联网开发者来说是意义非凡的。

主要包括以下几点:

【Raspberry Pi 3 Model B】

&

middot;

BCM2837

&

middot;

64位的1.2GHz四核ARM Cortex-A53

&

middot;

1GB内存

&

middot;

10/100自适应网卡

&

middot;

802.11n WiFi无线网卡

&

middot;

低功耗蓝牙4.1 (BLE)

&

middot;

HDMI接口

&

middot;

USB 2.0接口 x 4

&

middot;

MicroSD 卡插槽

&

middot;

3.5 mm 音频输出接口

&

middot;

40PIN GPIO接口

&

middot;

CSI摄像头接口

&

middot;

DSI显示接口

&

middot;

升级后的电源管理系统,以便使用更多耗电的外设(须用2.5A以上电源供电) 树莓派3代B型是一款基于ARM的微型计算机主板,以SD/MicroSD卡进行存储,该主板提供USB接口和以太网接口,可以连接键盘、鼠标和网线,该主板具备所有PC的基本功能,例如:高清视频播放、电子表格书写、玩游戏等诸多功能,还整合了视频模拟信号的电视输出接口和HDMI高清视频输出接口。 树莓派将Python作为主要编程语言,支持Java、BBC BASIC (通过 RISC OS 映像或者Linux的”Brandy Basic”克隆)、C 和Perl等编程语言。本设计使用的是最新树莓派官方系统。是基于debian的一种linux32位操作系统。本次设计使用系统中安装的python2.7运行程序。

3.2检测模块

3.2摄像头模块实物图

本次设计的检测模块是使用树莓派专用500W像素摄像头。该摄像头提供了三个应用程序,分别为:raspistill、raspivid、raspistillyuv。其中 raspistill 和 raspistillyuv 非常相似,并且都是用于捕捉图像,而 raspivid 用于捕捉视频。

应用程序使用了四个 OpenMAX(mmal)组件:camera(摄像)、preview(预览)、encoder(编码)、null_sink。所有应用程序均使用了摄像组件,raspistill 使用了图像编码组件,raspivid 使用了视频编码组件,raspistillyuv 没有使用编码组件,而是直接将 YUV 或 RGB 从摄像组件输出到文件。所有应用程序均基于命令行方式运行,通过 OpenMAX 的 mmal API 进行编写。我们在设计中结合Opencv调用摄像头进行拍照操作。

摄像头电路板与树莓派通过一条 15 芯的排线进行连接。具体连接操作如下:先将树莓派上连接座两端卡扣拉起,再把排线插入座中,并竖直,然后按下两端的卡扣。摄像头电路板连接同上。

3.3 驱动模块

当输入信号相对而言比较微弱时,相应功率较小无法正常工作。驱动模块实质是通过放大功率,从而满足负载额定功率使得负载可以正常工作,从而可以响应微弱的输入信号。微型计算机(树莓派)上有IN1, IN2, IN3, IN4四个接口,根据资料,设置为低电平就可以驱动,用杜邦线分别将IN1,IN2,IN3,IN4和GPIO 21(Pin 40),GPIO 20(Pin 38), GPIO 16(Pin 36), GPIO 19(Pin 35)进行连接。每次将四个GPIO端口按下表依次设置好电平后,可以sleep几十毫秒来控制转速

图3.3 步进电机驱动原理

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图3.4 树莓派GPIO编码图

3.3.1 步进电机工作原理

在不超过额定负载时,脉冲信号的频率控制电机转动的速度、脉冲数决定电机止步的位置,均不会因为负载变化而受到任何的影响[8]。步进电机每走一步,就要加一个激磁信号,假如适当的信号,转子以一定的步数转动;无激磁信号输入时,转子保持一定的位置。步进电机工作的基本原理如下:

(1)换相顺序的控制

电机通电后,主要通过脉冲分配来实现工作相序的变化。以步进电机四相八拍工作方式为例,要求各相按照A-AB-B-BC-C-CD-D-DA的顺序来工作,控制脉冲就要按照该顺序来控制A、B、C、D相的通断。

(2)步进电机转向的改变

按照既定工作方式正向转动的顺序来给电机通电,电机就会正向转动;但是按照相反顺序来通电的话,电机会向相反方向转动。

(3)步进电机转动速度的改变

步进电机每一次接收到一个控制脉冲,它就会相应转动一步,转动固定角度。因此步进电机的转动速度就由两脉冲的间隔长短来决定,即是两脉冲发送间隔越长,相应的步进电机转动就越慢。如果要实现对步进电机转动速度调节,就需要改变单位时间内控制模块发出的脉冲个数。

步进电机驱动方法有四相四拍运行方式,即AB-BC-CD-DA-AB;四相八拍运行方式,即A-AB-B-BC-C-CD-D-DA-A。

四相步进电机,供电电源为5伏,5伏电源的正极性端连接电机公共端,而 5伏电源的接地端需要分别和电机剩余的四根控制线顺次接触,可以发现电源地线与电机控制线每接触一下,步进电机就会转动一定角度,电机转动完整一圈的时间,恰好需要如此来回转动的次数可以达到5次。由此可以计算出该步进电机的步进角度为

度。若四条控制线与电源地线接触的顺序恰好相反,那么电机也就随之向相反方向转动。

3.3.2 步进电机驱动电路

由于步进电机的驱动电流的数值相对较高,所以单片机与步进电机不能直接连接,常常采用专门的接口及驱动电路。驱动器可以采用功率比较高的复合管,如ULN2003,L298N,或者购买专用的步进电机驱动器。驱动电路的工作状态是由控制信号来决定的,控制信号需要由主控模块,即单片机来产生。期望实现以下的步进电机驱动要求:

(1)期望驱动电路提供的电流上升和下降速度可以比较快,这样可以使电流的波形尽可能的接近矩形波。

(2)期望驱动电路功率和效率相对比较高,提高运行经济性。

单片机的输出电流太小,无法直接连接步进电机,需要加驱动电路。对于电流小于0.5A的步进电机,可以采用ULN2003类的驱动IC。驱动芯片ULN2003内部结构如图3.4所示。

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图3.4 ULN2003内部结构框图

ULN2003是由复合达林顿晶体管排列组成,使耐受电压比较高,允许通过电流较大。共有7对NPN达林顿管,分别为芯片7个控制单元,包括功率驱动单元、保护单元等。ULN2003采用DIP-16或者SOP-16双列16脚塑料封装,驱动单元可以与步进电动机直接耦合,连接方便,其数字逻辑电路为非门电路,取反控制。

选取ULN2003作为电机驱动芯片,价格经济,且可以充分发挥功能,实现稳定驱动。可以直接通过电源来调节输出电压,可以直接用单片机的IO口提供信号,而且电路简单。芯片采用单片机作为控制核心,在程序相互调用的方面,更加的方便灵活。

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图3.5 ULN2003引脚图

图3.5所示为驱动器引脚图,图左边1~7引脚为输入端,有单片机直接控制,接单片机输出端,引脚8直接接地;右侧10~16引脚为输出端,接步进电机,引脚9接电源+5V,必要时也可以什么都不接悬空而置,该驱动器可提供最高0.5A的电流。

ULN2003的主要特点是:

(1)驱动ULN2003电流比较大。ULN2003可以较好的用于单片机控制的电路。

(2)ULN2003连接上拉电阻,在驱动电机时可以提高其抵抗干扰的能力。ULN2003的每两个达林顿管视为一个单元,都会串联一定阻值的高值电阻可以直接和TTL 或承载电压为5V的CMOS 装置连接 。

(3)ULN2003的输出采用集电极开路,电流输出值比较大,可以达到500mA。因此可以用来驱动电机。

另外,ULN2003的极限参数分别如表3.1、3.2所列。

表3.1 ULN2003的极限参数

表3.2 ULN2003的极限参数

接线时需要把步进电机电路图的红色线悬空,其它线接驱动板。如果驱动不起来,有可能接线不对或电压低。如果用单片机来控制此步进电机,则只需分别依次给各线一定时间的脉冲电流,电机便可连续转动起来。

ULN2003驱动电机的电路图如下图3.6所示。由单片机P3.4&

mdash;

P3.7口经上拉电阻作为驱动芯片ULN2003的输入。COM端供电12V,输出端10至12引脚均接地。四相五线式步进电机的A、B、C、D四相分别与ULN2003的输出端1C&

mdash;

4C连接,接收控制脉冲,实现控制。

图3.6 ULN2003驱动电机的电路图

3.3.3 步进电机的选型

步进电机是一种专门用于位置与速度精确控制的特种电机,虽然同为电机件,步进电机区别于其他控制电机的最大特点是,它主要采用无反馈环节的开环控制,将微观的电脉冲信号转变为宏观电机转动的角位移或线位移。它通过数字来实现电机控制,控制信号以脉冲形式发出,它所接受到的脉冲可以驱使电机转动,即被转化为相应的角位移,所以只要给步进电机一个合适的脉冲信号,它就随之动作固定角度,当采用单片机来控制步进电机相对简单易操作。绕在定子的线圈配置作为步进电机相数分类的主要依据,主要可分为2相、4相、5相等;根据外部引线步进电机又被分为三线式、五线式、六线式等,但各种类型的电机其控制方法并没有发生太大的变化,均采用脉冲信号进行驱动。

门禁系统的运动不需要加速、减速过程,所需转速较低,所以步进电机选用自启动运行方式。自启动运行方式是指在驱动电机旋转和停止时不经过加速、减速阶段,而直接以驱动脉冲速度启动和停止的运行方式。同时,因为在启动、停止时存在一个突然的速度变化,所以这种方式需要较大的加、减速力矩。由于具体负载重量也会影响其是否产生过大的工作噪音,所以四相五线式步进电机的负载容量可以较好满足要求。另外,出于对电流、步距角、静转矩三大要素的考虑,本设计选择四相五线式步进电机来模拟门禁系统的控制,可以直接插接方便使用。

3.4 报警模块

作为人脸识别门禁系统的设备,声光报警电路不可或缺。在系统工作中,每当人脸数据匹配成功时,便会触发蜂鸣器和发光二极管实现声光报警,使监控人员得到开启大门信号,反之则不报警。半导体二极管和普通二极管都是是类似的PN结结构,具有单向导电性,可以将电能转化成光能。 在将电流通到发光二极管之后,电子从N区移动到P区,并且从P区移动到N区的空穴在PN结附近与孔中的电子复合,N区域产生荧光发光提醒。

声光报警设计部分包括蜂鸣器和LED报警指示灯。声音报警电路如图3.11所示,由于微控制器驱动能力的I / O端口较低,所以需要增加蜂鸣器PNP晶体管驱动,可以让那个蜂鸣器的声音听起来更响,更好地发挥警报功能。为了避免错误的报警添加了三极管基电路,蜂鸣器只有在输出低时才会发出声音。

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图3.8 声音报警电路原理图

3.5 显示模块

设计中为从一定程度上减小操作人员的工作量,特用电脑显示器作为显示模块,电脑显示器就不做过多阐述了。

3.6电源模块

本模块的作用是用来控制电源是否进入工作状态。电源模块一般分为以下几部分:滤波电路模块、全波整流电路模块、电源变压器模块等。一般电源提供的是220V交流电,经过门禁系统的电源模块中变压器的变压,变为直接可以供门禁使用的电压,然后进行全波整流,得到有尖峰脉冲的直流电,然后在滤波电路将有交流成分的电压滤除,最后得到可供系统使用的直流电。但我们的设计不需要这么大电流,电源直接是用两节充电锂电池18650共7v进行供电,所以不需要用稳压芯片。工作原理图如图3.1。

图3.9 电源模块原理图

第4章 人脸识别门禁系统软件设计

4.1安装系统

软件部分:win32 DiskImager、SDFormatter、树莓派镜像文件

硬件部分:SD卡、读卡器

准备工作

1.16G的SD卡一张(树莓派3B专用micro SD卡)2.下载树莓派系统镜像文件3.Windows下安装镜像的工具:Win32DiskImager

安装实战

1.解压下载的系统镜像压缩文件,得到img镜像文件2.将SD卡使用卡托或者读卡器后,连上电脑3.解压并运行Win32DiskImager工具4.在软件中选择系统镜像的img文件,&

ldquo;

Device&

rdquo;

下选择SD卡的盘符,然后点击&

ldquo;

Write&

rdquo;

然后就开始安装系统了,根据你的SD卡的速度,安装过程有快有慢5.安装结束后会弹出完成对话框,说明安装就完成了。

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图4.1 格式化软件工具

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图4.2系统烧录软件工具

首先把SD卡连接到电脑,打开SDFormatter.注意观察盘符不要误将其他SD卡格式化。

接下来打开win32 diskimager.打开存放镜像的路径,点击&

ldquo;

write&

rdquo;

/&

ldquo;

yes&

rdquo;

等待镜像烧录成功。

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图4.3 烧录成功提醒界面

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图4.4 树莓派官方系统Pixel

4.2 配置中文环境以及扩展文件系统

树莓派3B默认是采用英文字库的,而且系统里没有预装中文字库,所以在locale中将其改成中文,也不会显示中文,只会显示一堆方块。因此需要手动来安装中文字体。

ssh中输入以下命令:

安装过程中如果碰到(Y/n),都选择y中文字库安装完成之后,还需要安装一个中文输入法。输入如下命令

一样的安装过程,安装完毕后输入

然后选择change_locale,在Default locale for the system environment:中选择zh_CN.UTF-8,配置完成之后,输入命令

重启完成好就可以在VNC连接上去后使用中文显示和中文输入法了,切换中文输入法一样也是ctrl+space。

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图4.5 树莓派安装中文

终端输入:sudo raspi-config 扩展文件系统

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图4.6 树莓派扩展文件系统

&

ldquo;

Expand Filesystem&

rdquo;

回车后将SD空间扩展(重启后生效)。配置中文环境如下所示。

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图4.7 树莓派设置中文(一)

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图4.8 树莓派设置中文(二)

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图4.9 树莓派设置中文(三)

空格选中&

rdquo;

zh_CN.UTF-8 &

ldquo;

回车 &

ldquo;

ok&

rdquo;

输入:sudo reboot 重启后生效

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图4.10 树莓派设置中文(四)

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图4.11 树莓派设置中文(五)

4.3 RPI.GPIO搭建及使用介绍

本系统使用的是树莓派官方系统raspbian。系统预装了python和C编译器等软件。运行本次系统前需要对环境进行搭建。树莓派内核中已经编译自带GPIO的驱动,本次设计采用第三方编写好的库函数来完成具体的操作。python GPIO 是一个小型的 python 库,可以帮助用户完成 raspberry 相关 IO 口操作,但是 python GPIO 库还没有支持 SPI、I2C 或者 1-wire 等总线接口。先安装 python-dev,输入以下指令。

sudo apt-get install python-dev

安装 RPi.GPIO,依次输入以下指令。

&

middot;

下载:$ wget

&

middot;

解压缩:$ tar xvzf RPi.GPIO-0.5.3a.tar.gz

&

middot;

进入解压之后的目录 :$ cd RPi.GPIO-0.5.3a

&

middot;

启动安装 :$ sudo python setup.py
install

导入 RPi.GPIO 模块:

通过该操作,可以将模块名称映射为 GPIO,以便接下来您其它脚本进行使用。

导入模块并检查它是否导入成功,可以尝试:

针脚编号

目前有两种方式可以通过 RPi.GPIO 对 Raspberry Pi 上的 IO 针脚进行编号。

第一种方式是使用 BOARD 编号系统。该方式参考 Raspberry Pi 主板上 P1 接线柱的针脚编号。使用该方式的优点是无需考虑主板的修订版本,您硬件始终都是可用的状态。您将无需从新连接线路和更改您的代码。

第二种方式是使用 BCM 编号。这是一种较低层的工作方式 &

ndash;

该方式参考 Broadcom SOC 的通道编号。使用过程中,您始终要保证主板上的针脚与图表上标注的通道编号相对应。您的脚本可能在 Raspberry Pi 主板进行修订版本更新时无法工作。

指定您所使用的方式(必须指定):

或者

Raspberry Pi 的 GPIO 上可能同时有多个脚本/循环。因此,如果 RPi.GPIO 检测到某个针脚被设置为其它用途而非默认的状态(默认为输入),您会在尝试配置某脚本时得到警告消息。禁用该警告消息:

为每个用于输入或输出的针脚配置通道。配置为输入的通道:

通道编号是基于您所使用的编号系统所指定的(BOARD 或 BC)。配置为输出的通道:

通道编号是基于您所使用的编号系统所指定的(BOARD 或 BCM)。可以指定输出通道的初始值:

输入读取 GPIO 针脚的值:

通道编号是基于您所使用的编号系统所指定的(BOARD 或 BCM)。)这将返回 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True。

设置 GPIO 针脚的输出状态:

通道编号是基于您所使用的编号系统所指定的(BOARD 或 BCM)。)

状态可以为 0 / GPIO.LOW / False 或者 1 / GPIO.HIGH / True。在任何程序结束后,请养成清理用过的资源的好习惯。使用 RPi.GPIO 也同样需要这样。恢复所有使用过的通道状态为输入,您可以避免由于短路意外损坏您的 Raspberry Pi 针脚。注意,该操作仅会清理您的脚本使用过的 GPIO 通道。

脚本结束后进行清理:

4.4 Opencv运行环境的搭建

首先进入Raspberry Pi系统,将树莓派连上网络,然后Ctrl + Alt +t打开命令终端(直接点击终端图标可能会卡),如果终端窗口没有出现的话,从顶部任务栏可以找到,点开就好。首先是以下这几条更新命令,每次单独执行:

sudo apt-get update

sudo apt-get upgrade

sudo rpi-update

然后执行安装opencv的构建相关命令:

sudo apt-get install build-essential git cmake pkg-config

然后是以下这几条命令安装图片工具包,每次单独执行(网上有很多一起执行的,但是经常出现问题)

sudo apt-get install libjpeg8-dev

sudo apt-get install libtiff5-dev

sudo apt-get install libjasper-dev

sudo apt-get install libpng12-dev

然后是视频I/O包:

sudo apt-get install libavcodec-dev libavformat-dev libswscale-dev libv4l-dev

下面安装GTK:

sudo apt-get install libgtk2.0-dev

然后安装优化函数的包:

sudo apt-get install libatlas-base-dev gfortran

然后执行以下命令下载opencv3.0:

cd /home/pi

git clone https://github.com/opencv/opencv.git

cd opencv

git checkout 3.0.0

然后安装opencv_contrib:

cd /home/pi

git clone https://github.com/opencv/opencv_contrib.git

cd opencv_contrib

git checkout 3.0.0

然后安装开发包:

sudo apt-get install python2.7-dev

然后安装pip: SHAPE * MERGEFORMAT

wget https://bootstrap.py
pa.io/get-pip.py

sudo python get-pip.py

然后安装virtualenv virtualenvwrapper:

sudo pip install virtualenv virtualenvwrapper

sudo rm -rf ~/.cache/pip

下面这个步骤不仅仅是命令了,打开~/.profile文件,我是使用vim打开的:

sudo nano ~/.profile(&

rdquo;

~&

rdquo;

符号树莓派键盘打不出来 用笔记本SSH连上去)

打开profile后,在这个文件最后,添加以下内容后保存退出:

# virtualenv and virtualenvwrapper

export VIRTUALENVWRAPPER_PYTHON=/usr/bin/python2.7

export WORKON_HOME=$HOME/.virtualenvs

source /usr/local/bin/virtualenvwrapper.sh

然后执行下面这个命令:

source ~/.profile

然后创建虚拟工作环境并进入:

sudo mkvirtualenv LC

workon LC

一定要确保进去刚刚创建的虚拟环境了,进入虚拟环境的标志是进去后命令的最前面(绿字前面)都会增加&

ldquo;

(LC)&

rdquo;

下面在虚拟环境中安装numpy:

pip install numpy

sudo rm -rf ~/.cache/pip/

pip install numpy

一定确保在刚刚的虚拟环境下进行以下操作,如果新开了一个命令行窗口,那么就依次执行 source ~/.profile 命令和 workon LC 命令进入虚拟环境再执行以下操作。

执行以下命令来设置编译:

cd ~/opencv

mkdir build

cd build

cmake -D CMAKE_BUILD_TYPE=RELEASE

-D CMAKE_INSTALL_PREFIX=/usr/local

-D INSTALL_C_EXAMPLES=ON

-D INSTALL_PYTHON_EXAMPLES=ON

-D OPENCV_EXTRA_MODULES_PATH=~/opencv_contrib/modules

-D BUILD_EXAMPLES=ON ..

执行以下命令开始正式编译opencv3.0:

make -j4

编译完后进行安装:

sudo make install

安装后进行相关配置:

sudo ldconfig

配置完成

本次设计主要利用opencv进行拍照,确实是有点大材小用。但是通过opencv的使用,加深了对图形处理方面的简单认识和理解。在设计之余学会了opencv进行简易人脸识别的原理。

4.5 系统程序设计

主程序设计

流程图

触摸开关

流程图

摄像头

流程图

步进电机

流程图

第5章 系统运行以及源代码分析

5.1 树莓派系统使用说明

树莓派系统:可以直接用显示器进入系统桌面也可以远程桌面进入系统,或者putty软件SSH。本设计以远程桌面登陆为例。登陆路由器查询分配给树莓派的ip地址。打电脑的远程桌面软件。输入树莓派的IP地址,本次设计中树莓派的IP是192.168.0.115。用户名为pi,密码:raspberry远程桌面进去系统后还可以再去连接本地wifi信号。

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计
毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

5.2 旷视FACE++ API使用说明

本次设计对图像的处理是通过云服务来实现的。主要是调用Face++的API来实现的照片中人脸的对比。首先将三张照片上传树莓派或者用树莓派摄像头采集三张照片。调用Detect API进行人脸检测和人脸分析。识别出的人脸会给出face_token,用于后续的人脸比对等操作。当触摸开关出发实时拍照之后,调用Search API在Faceset中找出与目标人脸最相似的一张或多张人脸。支持传入face_token或者直接传入图片进行人脸搜索。使用图片进行比对时会选取图片中检测到人脸尺寸最大的一个人脸。

Sdk的facepp.py
文件中包含如下底层api接口提供我们使用。

_APIS = [

‘/detect’,

‘/detection/landmark’

‘/compare’,

‘/search’,

‘/faceset/create’,

‘/faceset/addface’,

‘/faceset/removeface’,

‘/faceset/update’,

‘/faceset/getdetail’,

‘/faceset/delete’,

‘/faceset/getfacesets’,

‘/face/analyze’,

‘/face/getdetail’,

‘/face/setuserid’

]

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图5.1 创建FACE++ API key

Detect API

调用者提供图片文件或者图片URL,进行人脸检测和人脸分析。识别出的人脸会给出face_token,用于后续的人脸比对等操作。请注意,只对人脸包围盒面积最大的5个人脸进行分析,其他人脸可以使用Face Analyze API进行分析。如果您需要使用检测出的人脸于后续操作,建议将对应face_token添加到FaceSet中。如果一个face_token连续72小时没有存放在任意FaceSet中,则该face_token将会失效。如果对同一张图片进行多次人脸检测,同一个人脸得到的face_token是不同的。

Search API

在Faceset中找出与目标人脸最相似的一张或多张人脸。支持传入face_token或者直接传入图片进行人脸搜索。使用图片进行比对时会选取图片中检测到人脸尺寸最大的一个人脸。

成功请求返回值示例:

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

5.3 系统调试及运行

整体流程:将三张待检测人员的照片存储到程序所在目录,执行程序时,调用face++的detectAPI将三张照片中的人脸信息存储在开发者账号,然后执行search的API对程序过程中拍摄的照片进行处理。检测照片中的人脸信息与之前上传的人脸信息对比,如果相似度达到百分之80以上返回相似度最高的人脸信息。

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图5.2 程序目录

5.3.1程序初始设置

首先将自己的照片上传到本文件夹并修改图片文件名,然后在代码中将三张待对比照片赋值给face_one、face_two、face_three三个变量。并设置进行对比的照片名为customer.jpg。

face_one = ‘face_one.jpg’

face_two = ‘face_two.jpg’

face_three = ‘face_three.jpg’

face_search = ‘customer.jpg’

设置GPIO编码方式为board,GPIO13为输入模式,GPIO11,12,15,16,40为输出模式。

GPIO.setmode(GPIO.BOARD)

GPIO.setwarnings(False)

GPIO.setup(13,GPIO.IN)

GPIO.setup(11,GPIO.OUT)

GPIO.setup(12,GPIO.OUT)

GPIO.setup(15,GPIO.OUT)

GPIO.setup(16,GPIO.OUT)

GPIO.setup(40,GPIO.OUT)

在python程序中设置调用API的key和secret。

#http_url=’https://api-cn.faceplusplus.com/facepp/v3/detect’

key = “xzFPqqR1q_fasM1D3s4yvUdcBoTovUMX”

secret = “4GXhLafqDOmnfQRxx-6ZlEVwQpOlZoW-“

api = facepp.API(key, secret)

5.3.2 各功能函数

#蜂鸣器,前面已经初始设置GPIO12为输出模式,此处bee()函数设置gpio12为干电平,延时0.5s后置为低。意味着当调用bee()函数时蜂鸣器鸣叫0.5s.

def bee():

GPIO.output(12, False)

time.sleep(0.5)

GPIO.output(12, True)

#步进电机,设置旋转角度为180&

deg;

,closewise=1时,步进电机顺时针旋转,closewise=0时,步进电机逆时针旋转。步进电机驱动模块由树莓派的GPIO35、 GPIO36、 GPIO38 、GPIO40四个GPIO驱动。

def motor_open():

steps = 180;

clockwise = 1;

arr = [0,1,2,3];

if clockwise!=1:

arr = [3,2,1,0];

ports = [40,38,36,35]
# GPIO 21(Pin 40) GPIO 20(Pin 38) GPIO 16(Pin 36) GPIO 19(Pin 35)

for p in ports:

GPIO.setup(p,GPIO.OUT)

for x in range(0,steps):

for j in arr:

time.sleep(0.002)

for i in range(0,4):

if i == j:

GPIO.output(ports[i],True)

else:

GPIO.output(ports[i],False)

#流水灯:初始设置已经将GPIO11、GPIO15、GPIO16为输出模式。分别把三个LED发光二极管的长引脚接到这三个GPIO上,短引脚接至负极。通过把对应的引脚置为高电平延时0.3s后置为低,循环点亮三个小灯。

def light():

GPIO.output(11, True)

time.sleep(0.3)

GPIO.output(11, False)

GPIO.output(15, True)

time.sleep(0.3)

GPIO.output(15, False)

GPIO.output(16, True)

time.sleep(0.3)

GPIO.output(16, False)

#提示做好准备 ,一段时间后进行拍照。在终端窗口输出提示信息。并调用light()来实现LED发光二极管的流水灯效果。并调用bee()让蜂鸣器发出提示声音。

def prep():

print(“欢迎使用人脸识别检测系统 请面对摄像头 5秒钟后进行人脸采集”)

light()

print(“************************5*********************”)

light()

print(“************************4*********************”)

light()

print(“************************3*********************”)

light()

print(“************************2*********************”)

light()

print(“************************1*********************”)

bee()

#调用拍照函数时流水灯点亮,然后使用opencv利用摄像头采集一张照片,将照片保存为customer.jpg。

def take_photo():

light()

capture = cv2.VideoCapture(0)

if not capture.isOpened():
print(‘Capture failed because of camera’)

ret, img = capture.read()

cv2.imwrite(‘customer.jpg’, img)

print(“***********************照片采集完毕 请稍等*************************”)

print ‘=’ * 60

#函数调用API将本地存储的照片进行人脸检测和人脸分析。识别出的人脸会给出face_token,用于后续的人脸比对等操作。然后调用searchAPI在Faceset中找出与目标人脸最相似的一张或多张人脸。进行比对时会选取图片中检测到人脸尺寸最大的一个人脸。

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

触发检测的监测函数det(),程序运行时开始检测触摸开关是否被触发。当触摸开关被触发时会发送高电平信号给树莓派。当检测GPIO13为真时,在终端输出确定信息,并调用主函数进行对比操作。主程序运行结束后继续检测是否被触发。一直循环指导程序退出。

def det():

while True:

if GPIO.input(13)==True:

print “confirm”

main()

else:

print “NO BODY”

time.sleep(2)

det()

提取API.search返回结果,并将返回的信息保存到s,并从中提取相似度的值。转换s[0][&

lsquo;

configdence&

rsquo;

]为整形变量赋值给m。当m大于70时输出通过检测并调用步进电机转动。

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计5.3.3异常处理

当检测时由于没有拍摄到正常的人脸照片,程序则可能由于没有正常的人脸库而报错。此时须将下图中ret=api&

hellip;

&

hellip;

注释掉,并将上一行的注释符号&

ldquo;

#&

rdquo;

取消。毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图5.7 处理报错信息(一)

保存并上传后再次运行。清除无用的人脸库。

然后再将代码修改为初始代码,再次进行正确的人脸采集,程序才可以正常运行。

毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

图5.7 创建一个faceset

这种方式解决报错是复杂的一个过程。由于目的只是删除无用的人脸库,所以新建了一个debug.py
的python文件。当检测失败之后执行一次debug.py
即可。

import facepp

#http_url=’https://api-cn.faceplusplus.com/facepp/v3/detect’

key = “xzFPqqR1q_fasM1D3s4yvUdcBoTovUMX”

secret = “4GXhLafqDOmnfQRxx-6ZlEVwQpOlZoW-“

api = facepp.API(key, secret)

# 创建一个Faceset用来存储FaceToken

# create a Faceset to save FaceToken

def main():

api.faceset.delete(outer_id=’detect’, check_empty=0)

#ret = api.faceset.create(outer_id=’detect’)

#print_result(“faceset create”, ret)

main()

第6章 结 论

几个月的毕业设计将要结束,回忆这段时间收获颇多。经过自己努力,所做的设计基本达到了任务书的要求,可以实现对人脸识别的检测与门禁系统的开闭。

。。。。。。

参考文献

[1] 爱上Raspberry Pi:Matt Richardson / Shawn Wallace著;李凡希译,科学出版社 (2013-10出版) [2] Raspberry Pi Python 编程入门 :Simon Monk 著;姜斐祚 译,科学出版社(2014-02-01出版)[3] Raspberry Pi快速入门指南:Maik Schmidt著;王峰、王江伟、王汝波译,科学出版社(2014-01出版)[4] 树莓派应用速成 网络应用秘方:(美)Rick Golden 著;符鹏飞 译,科学出版社(2014-5-1出版)[5] 树莓派应用速成 Raspbmc媒体中心.(美)Rick Golden 著;符鹏飞 译,科学出版社.2014年

[1] 彭伟.嵌入式设备C语言程序设计实训100例.电子工业出版社.2009年

[2] 吴运昌.模拟电子线路基础.广州:华南理工大学出版社,2004年

[3] 胡汉才.嵌入式设备原理及其接口技术学习辅导与实践教程[M].清华大学出版社,2010 .

[4] 周润景等. Proteus在MCS-51&

ARM7系统中的应用百例[M].电子工业出版社2006

[5] 孙传友.编著.感测技术基础[M].电子工业出版社,2001.

[6] 韩志军等.嵌入式设备应用系统设计[M].机械工业出版社,2004

[7] 王俊峰.孟令启.现代传感器应用技术[M].机械工业出版社,2007.

[8] 马忠梅等.嵌入式设备的C语言应用程序设计[M].北京航空航天大学出版社,2006

[9] 刘树中.孙书膺.王春平.嵌入式设备和液晶显示驱动器串行接口的实现[J].微计信息,2007

[10] V. Yu. Teplov,A.V. Anisimov.Thermostatting System Using a Single-Chip Microcomputer and Thermoelectric Modules Based on the Peltier Effect[J] ,2002

[11] Yeager Brent.How to troubleshoot your electronic scale[J].. Powder and Bulk Engineering. 1995

[12] Adam Loverro,Fractional Calculus:History,Definitions and Applications for the Engineer[EB/OL].http://www.nd.edu/~msen/Teaching/UnderRes/FracCalc.pdf,2007.

[13] Behzad Razavi.Design of Analog CMOS Integrated Circuits[M]. . 2001

[14] Rhee W.Design of high-performance CMOS charge pumps inphase-locked loops. IEEE International Symposium on Cir-cuits and Systems. 1999 [3] Todd Charles Weigandt.Low-phase-noise,low-timing-jitter design techniques for delay cell based VCOs and frequency synthesizers[C]//PHDthesis. . 1998

[15] George Lee,Karina Ng,Edmond Kwang.Design of ring oscillator based voltage controlled oscillator. Project Final Report[R]. 2005 [5] T. C. Weigandt,B. Kim,and P. R. Gray.Analysis of Timing Jitter in CMOS Ring Oscillators. IEEE International Symposium on Circuits and Systems. 1994

致 谢

原文始发于:毕业论文:基于树莓派的人脸识别门禁系统本科毕业设计

|

发表评论