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

毕业论文

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

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

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

致 谢

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

|

树莓派win10 IoT:从hello world到人脸识别刷脸门禁第一课

‘你好,世界!’

在这个示例中,我们将创建并部署运行Windows 10 IoT Core任何设备的第一个应用程序“Hello,world!”。

创建一个新的C#项目


所有示例代码都可以下载,但作为练习,本教程将带您完成从头开始创建此应用程序的所有步骤。您需要确保您已经从这里安装了Windows 10 IoT核心项目模板。

  1. 启动Visual Studio 2017。

  2. 用(文件| 新建项目 …)创建一个新项目。

    在新建项目对话框中,导航到通用(Universal),如下所示(在对话框的左窗格中:Templates | Visual C#| Windows | Universal)。

  3. 选择模板空白应用程序(Windows通用)。

    记得给你的第一个应用程序一个好名字!在这个例子中,我们调用了项目“HelloWorld”。

树莓派win10 IoT:从hello world到人脸识别刷脸门禁第一课

注意

如果这是您创建的第一个项目,Visual Studio可能会提示您启用Windows 10的开发者模式。

添加对Windows IoT扩展SDK的引用


由于物联网扩展SDK默认不会添加到项目中,因此我们需要添加一个引用,以便像Windows.Devices.Gpio这样的名称空间在项目中可用。为此,只需右键单击项目下的“引用”条目,选择“添加引用”,然后将结果对话框导航至Universal Windows->Extensions->UWP的Windows IoT Extensions,选中该框并单击确定。

树莓派win10 IoT:从hello world到人脸识别刷脸门禁第一课

将内容添加到MainPage.xaml


让我们添加一些内容到MainPage。从解决方案资源管理器中,选择MainPage.xaml文件。我们要添加一个文本框和一个按钮,以显示一些交互。所以我们将编辑XAML文件来添加这些元素。找到设计器的XAML部分中的<Grid>标记,并添加以下标记。

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush  }"> <StackPanel HorizontalAlignment="Center" VerticalAlignment="Center"> <TextBox x:Name="HelloMessage" Text="Hello, World!" Margin="10" IsReadOnly="True"/> <Button x:Name="ClickMe" Content="Click Me!" Margin="10" HorizontalAlignment="Center"/> </StackPanel> </Grid>

现在我们有了一个TextBox和一个Button,我们可以添加一些代码,这些代码在按下按钮时将被执行。双击设计图面中的按钮:Visual Studio将Click属性添加到Button XAML标记,并在MainPage.xaml.cs中生成ClickMe_Click方法。我们在这个方法中添加一行简单的代码。

MainPage.xaml中:

<Button x:Name="ClickMe" Content="Click Me!" Margin="10" HorizontalAlignment="Center" Click="ClickMe_Click"/>

MainPage.xaml.cs中:

private
void ClickMe_Click(object sender, RoutedEventArgs e) {  this.HelloMessage.Text = "Hello, Windows 10 IoT Core!";


  }

在本地构建和测试应用程序


  1. 通过调用调试(Build) |确保应用程序正确构建 Build Solution菜单命令。

  2. 由于这是一个通用Windows平台(UWP)应用程序,因此您也可以在Visual Studio机器上测试应用程序:只需按F5,应用程序就可以在您的机器中运行。你应该看到这样的东西:

树莓派win10 IoT:从hello world到人脸识别刷脸门禁第一课

完成验证后关闭应用程序。

将应用程序部署到Windows IoT Core设备

当然,我们希望将我们的第一个应用程序部署到我们的物联网核心设备。这很容易。在PowerShell文档中,可以找到为您的IoT Core设备选择唯一名称的说明。在这个示例中,我们将在Visual Studio的“远程机器调试”设置中使用该名称(尽管您也可以使用您的IP地址)。

如果你要部署到Minnowboard Max,请在Visual Studio工具栏体系结构下拉列表中选择x86。如果部署到树莓派 2或3或DragonBoard,请选择ARM。

接下来,在Visual Studio工具栏中,单击本地计算机下拉列表并选择远程计算机

此时,Visual Studio将显示“远程连接”对话框。把你的物联网核心设备的IP地址或名称(在这个例子中,我们使用“我的设备”),并选择通用(未加密协议)的身份验证模式。然后点击选择。

树莓派win10 IoT:从hello world到人脸识别刷脸门禁第一课

树莓派win10 IoT:从hello world到人脸识别刷脸门禁第一课

  • 您可以使用IP地址而不是物联网核心设备名称。

  • 您可以验证和/或修改导航到项目属性的这些值(在解决方案资源管理器中选择“属性”),然后选择左侧的“调试”选项卡:

  • 现在我们准备部署到远程物联网核心设备。只需按F5(或选择Debug | Start Debugging)开始调试我们的应用程序。你应该看到应用程序出现在IoT核心设备屏幕上,你应该可以点击按钮。

  • 您可以设置断点,查看变量值等。要停止应用程序,请按“停止调试”按钮(或选择“调试”|“停止调试”)。

  • 在成功部署和调试您的第一个应用UWP,通过简单地改变从Visual Studio工具栏下拉配置创建一个发布版本调试到释放。您现在可以通过选择Build |来构建应用程序并将其部署到您的设备 重建解决方案和构建| 部署解决方案。

  • 恭喜!您只是将第一个UWP应用程序部署到运行IoT Core的设备上!

将您的应用程序设置为启动应用程序

  1. 您可以将您的应用程序设置为Windows IoT Core设备的“启动应用程序”,以便在设备重新启动时自动启动您的应用程序。为此,您需要在Windows IoT Core设备上运行名为iotstartup的命令行实用程序。我们将使用PowerShell来做到这一点。

  2. 按照此处所述,使用Windows IoT Core设备启动PowerShell(PS)会话。

  3. 从PS会话中,键入(为了简单起见,我们将假定应用程序的名称是HelloWorld,请替换您的应用程序的实际名称):

    [192.168.0.243]: PS C:>iotstartup list HelloWorld

    你应该看到UWP应用程序的全名,即:

    Headed : HelloWorld_n2pe7ts0w7wey!App

    该实用程序正在确认您的应用程序是一个“头”的应用程序,并正确安装。

  4. 现在,将这个应用程序设置为“启动应用程序”很容易。只需输入命令:

    [192.168.0.243]: PS C:>iotstartup add headed HelloWorld

    该实用程序将确认新的启动领导应用程序现在是您的应用程序:

    AppId changed to HelloWorld_n2pe7ts0w7wey!App

  5. 继续并重新启动Windows IoT Core设备。在PS会话中,您可以发出关机命令:

    [192.168.0.243]: PS C:>shutdown /r /t 0

  6. 一旦设备重新启动,你会看到你的应用程序自动启动。

  7. 此时,您可以恢复为使用DefaultApp作为“启动应用程序”。只需输入命令:

    [192.168.0.243]: PS C:>iotstartup add headed IoTCoreDefaultApp

    该实用程序将确认新的启动应用程序现在是IoTCoreDefaultApp:

    AppId changed to IoTCoreDefaultApp_kwmcxzszfer2y!App

有了第一次的了解 对于下面的人脸识别刷脸项目才能更好的理解。感兴趣的同学务必尝试一下第一个hello world。

原文始发于:树莓派win10 IoT:从hello world到人脸识别刷脸门禁第一课

|

树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

项目中使用的硬件与软件

树莓派3B × 1
面包板 × 1
12伏直流电动门 × 1
双通道5V继电器模块 × 1
直流电源适配器 × 1
12V 5A开关电源任何高于3A应该工作。必须是12V。 × 1
网络摄像头网络摄像头保证工作。 × 1
通用键盘和鼠标任何键盘和鼠标都可以。 × 1
通用扬声器由于面部识别门使用音频反馈,因此可以将一对扬声器连接到Raspberry Pi。 × 1
Microsoft Visual Studio 2017
微软Azure
Microsoft Windows 10 IoT核心

家庭安全系统是制造商日益增长的项目领域。自建系统不仅比庞大的专业安装便宜,而且还可以完全控制和定制,以满足您的需求。随着微软的Oxford项目的推出,面部识别应用程序现在比以往更容易被制造商所接受。这个项目利用树莓派,基本的网络摄像头和互联网连接来创建一个通过面部识别自动解锁的门。如果门口的访客被识别,门就会解锁!

1. 根据这些说明设置PC和Raspberry Pi 3 。

2. 接下来,按下图所示连接门铃和电源继电器。功率继电器将用于锁定和解锁门。

树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

3. 现在将相同的电源继电器连接到锁上,或电动门打开,如下所示。

树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

3/3

4. 将USB摄像头,键盘和鼠标插入Raspberry Pi 3。

软件设置

1. 使用命令提示符导航到您想要项目的文件夹:

2. 下载项目:

git clone https://github.com/ms-iot/Facial-Recognition-Door.git

3. 使用Visual Studio 2017 ,在刚下载的FacialRecognitionDoor文件夹中打开FacialRecognitionDoor.sln解决方案文件。

4. 在右侧面板的“FacialRecognitionDoor”项目下,导航到Constants.cs文件。你应该在顶部看到一个名为“一般常量”的部分。你需要做的第一件事就是输入你的牛津API密钥。按照这里的说明获取您的钥匙。

5. 用你的新密钥替换OXFORD_KEY_HERE:

树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

6. 仅用于MINNOWBOARD MAX:将DisableLiveCameraFeed变量从true 切换到false:

树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

7. 在Visual Studio的顶部菜单上,如果您使用的是Raspberry Pi,请选择Debug和ARM。如果您正在使用MBM,请选择“调试”和“x86”。

9.按遥控器。在“远程连接”对话框中,您需要输入远程机器IP地址,并使用“通用(未加密协议)”进行认证模式。

使用WindowsIoTCoreWatcher查找您的IP地址。

有关如何在Windows IoT设备上部署应用程序的更多信息,请参阅此文档。

10. 你现在可以运行代码!按绿色的“播放”箭头按遥控器按钮。

软件使用

当你第一次运行项目时,这是你应该看到的屏幕。在MBM上,您可以在软件设置的第6步中将DisableLiveCameraFeed变量设置为false,而不是看到相机图标,您将看到相机正在看到的实时信息。

树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

点击“加号”图标。

有三个按钮位于底部的应用程序栏。第一个是“加号”图标。这用于将新用户添加到“白名单”。白名单上的任何用户本质上都标记为“朋友”,并允许用他们的脸部解锁门。现在尝试按“加号”按钮。你应该看到这个屏幕:

树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

将您自己或朋友放在网络摄像机前面,然后按下“捕获ID照片”按钮。你应该看到你的新拍摄的自拍.

如果您对照片满意,请输入照片中的人物名称,然后按确认。如果没有,只要按取消,然后拍另一张照片。

按确认后,您将被发送回主页面,但您现在将在“白名单访问者”部分下看到一位用户:

点击页面左上角那个用户的图片,导航到用户的个人资料页面:

在此页面上,您可以使用加号图标来添加更多照片。这将改善面部识别门的整体准确性。您也可以按下垃圾箱图标以删除此用户。完成后,按主页图标。

你现在准备打开门!将注册用户放置在网络摄像头的前面,然后按虚拟门图标(位于之前使用的加号图标旁边)或您连线的物理“门铃”按钮。您应该听到音频反馈,通知您门已经解锁!

现在,当未登记的用户在门前时,尝试按下门铃按钮。您应该听到音频反馈,通知您门检测到一个陌生人,不会解锁!

未翻译的原文地址:

https://microsoft.hackster.io/en-US/windows-iot/windows-iot-facial-recognition-door-e087ce?ref=channel&

ref_id=4087_trending___&

offset=6树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

原文始发于:树莓派人脸识别门禁系统第二课:Win IOT微软人脸识别API刷脸开门

|

在树莓派上实现人脸识别

在树莓派上实现人脸识别

介绍
预计在不久后的将来,人脸识别和身份认证技术将在我们的日常生活中扮演一个非常重要的角色。这项技术为我们开辟了一个全新的世界,它几乎适用于我们生活的方方面面。面部识别/身份认证的使用案例包括安全系统、认证系统、个性化智能家居和家庭护理助理等。
我们将搭建什么?
本教程将帮助你建立一个可以训练 HARASCALDES 模型的树莓派,该模型可用于检测已识别的/未识别过的人,使用监控摄像头进行实时监控,并利用物联网 JumpWay 来发送传感和警告消息,进而允许你的设备利用其他物联网 JumpWay 网与其他设备进行通信。
本教程将利用 TechBubble Technologies 物联网 JumpWay Python MQTT 库进行通信,利用 OpenCV 实现计算机视觉,在本地端口上建造移动 Web 流和安全的 NGNX 服务器,以便可以安全地从外部访问视频流。
这个例子是我们最初的 TASS 版本,因为我们的进步依靠了很多更先进的计算机视觉库和框架,所以我们决定将代码进行开源。
Python 版本

  • 2.7 版本
  • 3.4 或更高版本

软件要求

  • Jessie
  • TechBubble IoT JumpWay Python MQTT Client(https://github.com/TechBubbleTechnologies/IoT-JumpWay-Python-MQTT-Clients)
  • Linux 驱动
  • Nginx

硬件要求

  • 树莓派
  • Linux 兼容摄像头

准备工作
在开始之前,有几个教程你应该看一下,尤其是如果这是你第一次按照我们的树莓派教程,或者如果这是你第一次使 TekBaseIO-JavaWoW 开发程序。如果这是你第一次在物联网项目中使用 TechBubble IoT JumpWay,在你创建 IOT 设备之前需要注册开发帐户,并在进行一些基本的设置。访问下面的物联网 JumpWay 开发者使用文档(5-10 分钟阅读/设置 https://github.com/TechBubbleTechnologies/IoT-JumpWay-Docs/),并查看引导来进行注册并设置你的位置、区域、设备和应用程序(大约 5 分钟)。

  • 物联网 JumpWay 开发者程序文档 (5-10 分钟 阅读/设置 https://github.com/TechBubbleTechnologies/IoT-JumpWay-Docs/)
  • 准备你的树莓派(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/1-Raspberry-Pi-Prep.md)
  • 设置区域名字 &

    树莓派的 SSL(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/3-Raspberry-Pi-Domain-And-SSL.md)

  • 在你的树莓派上配置 OpenCV(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/2-Installing-OpenCV.md)
  • 在你的树莓派上配置 Linux 驱动(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/5-Installing-Motion.md)
  • 在树莓派上为 Linux 驱动安装(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/6-Secure-Nginx-Server-For-Motion.md)
  • 用 IPTables 确保树莓派的安全(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/4-Securing-Your-Raspberry-Pi-With-IPTables.md)

准备你的树莓派

|花一些时间来确保你的树莓派的硬件和包都是最新的,并且确保你的准备过程严格按照树莓派 3 的教程文件(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/1-Raspberry-Pi-Prep.md),设备是安全的。|

复制 Repo
你将需要将 echBubble IoT JumpWay (https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples)树莓派实例 Examples 示例库下载到你的树莓派上,并导航到你想下载的目录,以下命令是将其下载到主目录最简单的方式。
1
git clone https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples.git
安装要求
接下来,你需要将计算机视觉库导航到目录并按照要求进行安装,如果你已经将库复制到你的主目录上,那么这一部分的命令如下:

|cd IoT-JumpWay-RPI-Examples/Computer-Vision/Python
pip install --upgrade pip
pip install -r requirements.txt|

安装 OpenCV

|OpenCV 需要遵循树莓派教程(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/2-Installing-OpenCV.md)进行安装,它是我们将使用的一种计算机视觉库。|

安装 Linux 驱动
我们将使用 Linux 驱动把视频流传送到树莓派本地端口上,OpenCV 在这里连接到视频流并从中读取图像帧。为了建立 Linux 驱动,遵循安装教程(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/5-Installing-Motion.md)在你的树莓派教上安装 Linux 驱动。
这里有一些修改,在驱动安装教程的第 9 部分中,它告诉你如何修改媒体的保存目录,在本教程中,你应该将这些设置更改为:

|/home/YOURUSERNAME/IoT-JumpWay-RPI-Examples/Computer-Vision/Python/media|

不要忘记注意第 10 部分中关于关闭图像保存来节省磁盘空间的问题。
设置域名和 SSL
我们希望我们提供的教程可以确保帮助人们学会创建安全的项目。为了使视频流安全工作,你需要设置指向你的树莓派域名,你也需要设置 SSL 证书来确保用于视频流的服务器是安全的。树莓派域名和 SSL 设置教程(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/3-Raspberry-Pi-Domain-And-SSL.md)会向你详细解释如何做到这一点,如果有疑问,你可以让你的注册员或主机来协助你。如果你将这个存储库复制到你的主目录中,你需要使用如下的 CSR 和密钥生成的路径:

  • /etc/nginx/key.key
  • /etc/nginx/csr.csr

一旦你从证书颁发机构收到你的签名 crt.crt 和 ca.crt 文件,你需要将它们上传到:

  • /etc/nginx/ca.crt
  • /etc/nginx/crt.crt

为 Linux 驱动安装安全的 NGINX 服务器
我们将使用 NGNIX 作为我们的服务器解决方案,并在 QualSS-SSL 实验室 SSL 报告中将其设置为 A 级+ SSL 等级。为了做到这一点,我们提供了一个可以在 RasBuriPi 上的 Linux 驱动上安装 NGINX 服务器的指南(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/6-Secure-Nginx-Server-For-Motion.md)。在开始这一步之前,你需要在你的树莓派上安装 Linux 驱动(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/5-Installing-Motion.md),并为你的树莓派设置域名和 SSL(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/3-Raspberry-Pi-Domain-And-SSL.md)。
用 IPTables 保证树莓派的安全
下一个你应该采取的安全步骤是设置 IPTABLE。遵循 Securing Your Raspberry Pi With IPTables 文件(https://github.com/TechBubbleTechnologies/IoT-JumpWay-RPI-Examples/blob/master/_DOCS/4-Securing-Your-Raspberry-Pi-With-IPTables.md)来实现这一点。
视频流
如果你遵循了以上步骤,如果它们还没有运行,你需要按照下面的步骤操作。

|sudo service motion start

sudo /etc/init.d/motion start
启动 NGINX
sudo service nginx start

sudo /etc/init.d/nginx start|

重要的是:这种流式传输是一个新的特性,我们仍然在消除一些扭结,如果你想让 OpenCV 直接访问网络摄像头,而不需要驱动/NGNIX 流,那么在 TASS.py
重取消注释 43 行,注释 44 行和 45 行。
连接证书和传感设置
下一步是在互联网 JumpWay 开发者控制台中安装设备实例。遵循 IoT JumpWay Location Device Doc (https://github.com/TechBubbleTechnologies/IoT-JumpWay-Docs/blob/master/4-Location-Devices.md)来设置你的设备。你将需要设置一个有闭路监控的设备,并且添加了传感器/执行器部分。
检索你的连接证书并用新的连接证书和相机 ID 设置更新配置文件 JSON 文件(你需要在创建它之后进入设备页面以获得正确的摄像头 ID)。

|"IoTJumpWaySettings":{
"SystemLocation": 0,
"SystemZone": 0,
"SystemDeviceID": 0,
"SystemDeviceName" : "Your Device Name",
"SystemCameraID":0
  }
"IoTJumpWayMQTTSettings":{
"username": "Your MQTT Username",
"password": "Your MQTT Password"
  }|

训练你的数据
现在基本构架已经搭建好,是时候用你自己的照片训练你的模型了。当你下载这个 RPO 时,在那个被处理的文件夹中已经有一个经过训练的模型和被处理的图像,但是这个模型不会识别你。你需要选择自己在不同的位置和灯光下的照片。你训练模型的照片越多,它就越精确,如果你的设备没有识别你,你只需要用更多的图像来训练它。
你可以添加你喜欢的图片(这取决于你的树莓派 3 可用的空间),有很多像你这样人。为了将训练数据导航到训练文件夹中并创建目录,目录应该是一个数字,而且不是那个已处理文件夹中的数字。
一旦你建立了图像的文件夹,进入 Tas.Py 文件改变第 34 行(self.train = 0)为 self.train = 1,并启动程序。程序将循环检测你的图像,如果它检测到脸部,它将以模型所需的格式重新创建一个图像,将其保存到匹配文件夹处理后的目录中中,并删除原始图像以节省空间。如果它没有检测到面部,它将简单地删除原始图像,因为它是无效的面部识别。
一旦处理阶段完成,你的新模型将自动开始训练,训练完成后,它将自动运行主面部识别程序。把你的脸放在你连接的摄像头前面,看着程序的输出你是谁。
注意:从处理目录中删除 read me 文件。
执行程序

|sudo python/python3 TASS.py
|

自主物联网通信
当你的设备每次检测到一个人时,设备会把传感器数据传送到 TechBubble IoT JumpWay(https://iot.techbubbletechnologies.com/),当运动传感器检测到入侵者时会发出警报。你可以使用传感器值和警告消息与连接到 IoT JumpWay Location 的其他设备实现自主通信。
在「设备编辑」页面上,向下滚动到「执行器/传感器」下的「创建规则」部分。你可以在这里利用下拉菜单创建规则,允许你的设备发电子邮件给你,或者在状态更新、传感器数据和警告的情况下自主地与其网络上的其他设备进行通信。
查看数据
每次你的设备检测到一个人或一个入侵者,它将发送数据到 TechBubble IoT JumpWay。你将能够访问 TechBubble IoT JumpWay 开发区中的数据(https://iot.techbubbletechnologies.com/developers/dashboard/)。一旦登录到开发区,访问 TechBubble IoT JumpWay Location Devices Page 页面(https://iot.techbubbletechnologies.com/developers/location-devices),找到你的设备,然后访问传感器/执行器页和警告页,查看从你的设备发送的数据。物联网 JumpWay 树莓派计算机视觉实例缺陷/问题
当你在运行物联网 JumpWay 树莓派计算机视觉实例遇到困难时请保持一种释然,当你遇到麻烦时你也可以在提问区寻求帮助。
物联网 JumpWay 树莓派实例贡献者
TechBubble 科技公司创始人:Adam Milton Barker(https://github.com/AdamMiltonBarker)
TechBubble Technologies Dev 公司:Andrej Petelin(https://github.com/AndrejPetelin)
原文链接:https://www.hackster.io/AdamMiltonBarker/facial-recognition-identification-on-raspberry-pi-1c7495
转自雷锋网:https://club.leiphone.com/page/TextTranslation/624

原文始发于:在树莓派上实现人脸识别|

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)

  • 前言

 

这是一个轰轰烈烈的全民人工智能的时代。不说自己做了些和大数据、人工智能的工作都感觉有点不好意思说自己是干IT的。据说人工智能已经进入中小学标准教育大纲了。

 

Scratch中实现人脸识别刷脸?能够实现聊天机器人?能够教AI玩游戏(剪刀石头布、井字游戏)?是的,你没有看错。计划通过几次的人工智能课程,让小朋友了解人工智能能够干什么,有哪些应用,并且亲自尝试一下AI的应用,体验未来世界的智能性。

 

当然这还没有涉及到背后的人工智能的实现逻辑。我们只是在应用大厂家的人工智能算法和平台(鼎鼎大名的IBM沃森Watson)。因此这几个例子,也只能说是人工智能的应用,并不属于底层人工智能的研发。当然,市面上,也有不少通过调用通用平台AI功能的AI应用产品。人工智能算法和平台的发展很可能和云平台类似,最终由多个寡头企业主导,或者会逐渐走向开源和免费,成为免费的“水电”。

 

 

2. 目的

人脸识别是人工智能下图像识别的重要科目。大学人工智能专业中,估计有半数是和图像识别相关的。人脸识别非常重要,并且在将来的社会中应用会非常广泛。估计未来将将来全地球人的人脸数据。刷脸购买产品、车牌识别、乘车坐飞机,进入某个区域,都可能直接通过“刷脸”完成验证工作。“人脸”识别还能自动识别“好人”和“坏人”,提升社会的安全。例如在西单广场、交通入口处,设置一堆人脸识别的摄像头,如果发现“坏人”指数大于80%的人,允许警察提前进入警戒状态,甚至允许上前“盘问”。

 

今天的目的是使用人脸识别。在Scratch中拍照,然后系统会识别这是谁,是否允许进入某游戏或系统。当然在这之前,我们要先介绍一下这几个人工智能后面所用的IBM Watson人工智能平台系统,如何申请免费账号,如何培训系统,如何在Scratch中调用和使用这些人工智能的功能。

 

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)

(最终的应用截图,根据角色图片,能够识别这是谁,验证通过与否,同时播放声音。)

 

3. 免费注册IBM 沃森人工智能平台账号

 

IBM Watson人工智能属于IBM 云平台所提供的服务,属于人工智能的大厂家,其人工智能水平还是位于前列的。首先进入https://console.bluemix.net/注册IBM的云平台账号。

 

进入后,如果没有账号,可以在“Create Free Account”中创建免费账号。如果已经拥有账号,可以直接登录。IBM的这个云平台似乎还是在国外,访问比较慢。注册以后需要邮件确认,如果无法完成验证,就只能“翻墙”确认一下了。

 

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)
注册图像识别服务。
 

注册以后,要定于对应的AI服务,例如文本识别、图像识别、数字识别。我们这一次用到了图像识别,因此要注册“Visual Recognition”服务。可以在IBM平台中找到对应的服务,先创建API Key。在machinelearningforkids.co.uk也有链接地址,进入IBM云平台,注册相关的服务。

 

 

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)
IBM图像识别服务按照调用次数收费,Lite的免费版一个月允许调用1000次。对于测试来说,这已经够了。

进入这个服务以后,“Create”创建账号。然后我们可以看到各种版本的收费标准。Lite版本是免费的,每月1000Calls

 

创建这个服务的账号以后,能够获取一个API Key,就是其他应用中访问IBM服务的API Key。会在后面的Scratch项目中用到。

 

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)
获取最关键的API Key。点击复制,复制该API Key,可以先复制到本地的文件中。
 

如果要订阅文本识别类的服务,选择“Watson Assistant(formerlyConversation)

 

微信订阅号:ABO_CRM

 

 

4. 注册MachineLearningForKids.co.uk

这是一个少儿机器学习网站,有十几个案例项目。这些项目都可以应用在Scratch中。这个网站使用的后台AI平台是IBMWatson,因此需要先注册IBMAI平台账号。

 

进入网址,https://machinelearningforkids.co.uk。第一次使用,申请账号。

 

 

 4.1 Worksheets-19AI示例应用

进入“Worksheets”,能够看见19AI的应用项目。随便打开一个,就进入下载页面了。

https://machinelearningforkids.co.uk/#!/worksheets

 

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)

下载页面:下载学生手册和教师手册。

 

手册中有详细的操作步骤。当然手册了里面并没有告诉你如何申请IBM账号。

 

 

 

4.2 设置IBM API Key

 

先别着急创建Scratch项目,需要先申请、设置API Key进入Teacher>API Keys”. 这里有两个链接地址,可以引导我们进入IBMWatson平台,注册文本和图像识别服务。如果第三步没有提前注册,也可以在这里进入,注册。

 

Watson VisualRecognition:

https://www.ibm.com/watson/services/visual-recognition/

 

Watson Assistant:

https://www.ibm.com/watson/services/conversation/

 

这一次需要使用到图像识别。注册IBM图像识别服务以后,在这里”Add new API key”,添加API Key即可。

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)
Teacher>API Keys
 

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)
添加图像识别的IBM Watson API Keyes。

 

4.3 开始人工智能的Scratch项目

一)      新建AI项目

 

进入“Projects”,  新建项目“Add a new project,需要录入项目名称Project Name, 识别类型Recognizing,有文字、图形和数字。这里需要选择图形。注意,这里的项目名称依然不支持中文,只能使用英文。

 

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)

 二)      Train:培训计算机识别图形,进行图形分类识别

创建以后,进入项目。有三个功能:“训练Train”,“学习和测试Learn &

Test,”Scratch”

  • Train: 为系统提供需要识别的照片,可以在线拍照,作为素材,训练系统。识别这是谁,那是谁。系统分组识别,因此要分成几组。

  • Learn &

    Test: 系统进行抽取,学习。然后可以测试该模型的可靠性。

  • Scratch: 进入Scratch编程环境,在Scratch环境中调用这个AI模型。

 

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)
 

进入Train, 定义三个分组:Kang, Tong, Others,即为两个人,和其他人。

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)

每组拍10个照片,注意每个照片要更换一定的表情,例如做一下鬼脸之类的。最终目的是,根据所提供的照片,系统能够识别这是谁。

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)

 

三)      Learn &

Test:机器学习和测试

 

上载素材完毕以后,就可以进行机器学习和测试了。进入”Learn&

Test”,点击培训机器学习模型。这时候需要调用WatsonAPI,如果前面没有设置好API,这里就无法继续。

几分钟以后,系统就能建立模型。

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)
建立模型需要花费几分钟,可以返回项目,重新进来。学习完毕以后,还可以删除该模型,注意该模型只能保留一天。第二天来就需要重新学习了。
 

 

模型建立后,点击“Test withWebcam”,可以拍照测试模型。系统列出识别结果即该图属于哪一类的图片,即哪个人。提供给出可信度Confidence,例如91%的概率认为这是某人。

 

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)
 

如果图片正规一点,识别率会高一些。如果图形变化大,识别率可能会小一些。

 

四)      Scratch:进入Scratch环境,调用AI应用。

这里的Scratch环境并不是直接在MIT网上的,但功能类似。可以切换到中文版,但扩展的积木还是英文的。

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)
 

进入后,点击菜单“Project Templates”,有17个模板项目,包括一些示例代码和角色图片。请复制浏览器URL,在新页签中打开,进入Project Templates少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)

如果想省时间,就直接使用这些模板,下载模板中的角色图片,然后编写程序,上载角色。

 

下面开始制作程序:

  1. 首先查看“更多模块”,这里能够看见这个人工智能项目Face Lock的扩展,并且有一个绿色标志,说明这个扩展和AI模型是工作的。

  2. 进入舞台,导入4个舞台背景图片。这些背景图片是从示例项目中直接下载的。第一个是空手机、第二个是Scanning,说明在扫描图片;第三个是识别成功,绿色打钩的通过背景Granted;第四个是未能正确识别的红色锁定背景Denied

如果成功识别某个人,允许进入系统Granted,则使用背景3,否则使用背景4 Denied.

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)

3.  设置一个空白角色,什么都不要放。不过要进入造型,拍一些照片,也可以每次使用的时候拍摄。Scratch没有单独的拍照功能,这点很不好。因此需要一个空造型,在运行开始之前,先给这个造型启动WebCam拍照,才能进行后面的识别环节。

 

微信订阅号:ABO_CRM

 

4.    调用AI人脸识别:这段程序其实很简单。

  1. )点击的时候,先将背景切换到Scanning,显示正在扫描。其实Scratch是有摄像头扫描图片功能的,不过速度太慢了。

     

  2. )设置三个判断,Recognize image () = Kang,则切换背景为Granted;

    说一句话“This is Kang.;

    播放一段声音,自己录制一段声音,“我是Kang Kang。”。第二、三个判断类似,识别TongOthers

Image里面选择Costume Image,就是当前角色的图片。

 

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)
 

   3.)测试:先对角色拍照,可以一次拍多个照片,执行前,选择对应的照片。然后开始,系统会切换背景、说话、并且播放声音。系统的识别能力还是很不错的。

 

少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)
 

下一次试试剪刀石头布。和计算机一起玩剪刀石头布的游戏,我们出剪刀、石头或者布,计算机能够识别出来,并且出题,比对。

 

本程序的图片和Scratch都来自https://machinelearningforkids.co.uk,感谢这个网提供如此美好的AI体验。

原文始发于微信公众号( 艾博特 ):少儿编程Scratch第16讲:初试人工智能-人脸识别(IBM Watson)|