《智能安防摄像头的设计与实现.doc》由会员分享,可在线阅读,更多相关《智能安防摄像头的设计与实现.doc(37页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、 论文编号: 广州商学院本科毕业论文(设计)题 目:智能安防摄像头的设计与实现 姓 名:余建鎏学 号:201508030059院 系:信息技术与工程学院专业班级:电子信息科学与技术 应电1501指导教师:邹艳碧2019年5月4日学位论文原创性声明本人郑重声明:所呈交的学位论文,是本人在导师的指导下,独立进行研究工作所取得的成果。除文中已经注明引用的内容外,本论文不含任何其他个人或集体已经发表或撰写过的作品或成果。对本文的研究做出重要贡献的个人和集体,均已在文中以明确方式标明。本声明的法律结果由本人承担。论文作者签名: 年 月 日学位论文版权使用授权书本学位论文作者完全了解学校有关保留、使用学位
2、论文的规定,同意学校保留并向国家有关部门或机构送交论文的复印件和电子版,允许论文被查阅和借阅。本人授权广州商学院可以将本学位论文的全部或部分内容编入有关数据库进行检索,可以采用影印、缩印或扫描等复制手段保存和汇编本学位论文。本学位论文属于1、保密,在_年解密后适用本授权书。2、不保密。(请在以上相应方框内打“”)作者签名: 年 月 日指导老师签名: 年 月 日智能安防摄像头的设计与实现摘要本文设计并实现了一个智能安防摄像头,在传统的安防摄像头的基础上进行了创新和优化,帮助业主更好地管理房子的财产和安全问题。本次设计就是以RASPBERRY PI 树莓派3代B+型为基础,结合摄像头,python
3、,OpenCV开源视觉库,face+等功能组合成的智能安防摄像头。整个系统分为两部分,此设计的部分主要实现树莓派3代B+型和OpenCV和face+部份的功能。在本次设计中采用树莓派为核心控制系统,然后结合OpenCV开源视觉库和face+人脸对比库,tomcat服务器和云服务器,最后还有终端app,然后使用python进行编程来完成所有功能的组合。本设计最后通过各个模块的集成调试,能按照预期实现识别人脸、室外环境情况、室外人口接近情况来进行人脸识别和报警功能。使用该智能安防摄像头,人们在家可以安心的休息,在外可以安心工作、游玩,不用担心外来人员对室内造成侵扰,有可疑情况也能第一时间通过app
4、给手机发送报警信息。本文最后也在智能安防的发展方面做了优化展望。关键词:树莓派;face+;OpenCVAbstractIn this paper, an intelligent security camera is designed and implemented. Based on the traditional security camera, it is innovated and optimized to help the owners better manage the property and safety of the house.This design is based on
5、 RASPBERRY PI 3 generation B+ type, combined with camera, python, OpenCV open source visual library, face+ and other functions to form a smart security camera. The whole system is divided into two parts, the design of the main raspberry PI 3 generation B+ type and OpenCV and face+ part of the functi
6、on. In this design, raspberry PI is adopted as the core control system, and then the combination of OpenCV open source visual library and face+ face comparison library, tomcat server and cloud server, and finally terminal app is adopted. Then python is used for programming to complete the combinatio
7、n of all functions.Finally, through the integration and debugging of each module, the design can realize face recognition, outdoor environment and outdoor population proximity as expected to carry out face recognition and alarm function. With this smart security camera, people can rest at ease at ho
8、me, work and play outside, and do not worry about intrusions caused by external personnel indoors. If there is any suspicious situation, they can also send alarm messages to their mobile phones through the app in the first time. At the end of this paper, the development prospect of intelligent secur
9、ity is also discussed.Key words: RASPBERRY PI; face+; OpenCV目录摘要IAbstractII目录III1绪论11.1背景11.1.1国内外研究情况11.1.2发展前景11.1.3相关工作11.2论文组织22系统分析与设计32.1需求分析32.2设计概要33硬件设计53.1系统硬件电路设计53.2系统部分功能模块硬件介绍和设计53.2.1树莓派3代B+型的概述53.2.1BCM2837B0 处理器63.2.2树莓派各版本的比较63.3系统硬件实物搭建说明74软件设计84.1系统程序流程84.2树莓派的环境配置和系统安装84.2.1树莓派的
10、系统安装84.2.2系统的初始化94.2.3树莓派的远程连接104.3人脸识别模块114.3.1安装python依赖环境114.3.2安装OpenCV124.3.3使用OpenCV进行人脸检测154.4人脸比对模块174.5云服务器194.6App195系统测试245.1测试计划245.1.1模块测试245.1.2整体测试245.1.3测试结果246总结与展望27附录28参考文献30致谢31IV1 绪论1.1 背景随着科技的进步和人们生活水平的不断提升,人们追寻更加便捷的生活方式,对智能化的未来生活有了更高的期望。人脸识别以其快速简单的认证优点,成为最理想的一种自动身份验证手段,其应用前景非常
11、广阔,已成为计算机视觉领域的研究热点。随着中国的经济水平提高,人们的生活水平开始提高,大多数人进入了小康的生活,每个家庭都有自己的家,家庭安全的问题也逐渐成为人们心里担心的问题,有不少人都要在工作中出差,出差的时候并不能准确而又迅速的知道自己家里面的情况,一般来说小偷如果要进行盗窃的话要在前期做好准备,例如在门口探点,所以这个时候能在门口弄一个装置,能够识别在门口走来走去,停留的人,能在手机或者电脑上看到自己家的情况能够让人们放下心中的担忧,放心的出外工作。1.1.1 国内外研究情况目前人脸识别已经可以进行多方位的识别,人脸检测可以先检测视频流或图片中的人脸并返回人脸框坐标。支持储存检测到的人
12、脸数据。而检测到的人脸,能够获取精准的人脸属性信息,包括性别、年龄、头部姿态、表情、眼睛状态、人种等,通过人脸对比,精准判断两张人脸是否是同一个人,并返回相应的阈值和置信度分数,以便评估相似度。并且可以使用人脸搜索的功能,在预置的人脸中搜索相似的人脸。通过人脸搜索可确认目前人脸的身份,目前已广泛用于人脸门禁、安防监控等场景。1.1.2 发展前景伴随着现代每家每户都关心自己的房子安全,这样就会选择在房子的周围安装摄像头,在门口安装摄像头去方便自己能安心出远门,智能安防摄像头当然也要跟上大好的浪潮。它能够依据当前门口所拍摄到的人执行对应的操作,能给人们的生活带来极大的舒适和安全感。但是极大多数的人
13、会在门口安装的开门装置也自带摄像头但是只仅限于室内开门使用,所以拥有智能安防摄像头就显得尤其重要。1.1.3 相关工作经过分析,智能安防的设计需要有拍照上传,下载的功能和后台检测系统。拍照系统由一个普通的摄像头和RASPBERRY PI 树莓派3代B+型组成,基于人脸识别的防盗系统是树莓派3代B+型开发板为主板核心, 树莓派上调用OpenCV开源计算机视觉库是运用Python语言编程,使用树莓派、普通的摄像头以及移动端,实现对未上传注册人脸和对陌生人的报警功能。本次的系统用树莓派作为本系统的主板,摄像头是装在树莓派的usb接口上的,我这次设计用到的摄像头并不是树莓派的摄像头,然后在树莓派上运行
14、python编译,摄像头通过python能识别人和其他物件,如果识别到人的话会拍照并上传到发送到OpenCV中,OpenCV通过face+接口,再通过face+进行对tomcat和云服务器上的存好的亲人照片和目前拍摄的人照片进行对比和判断,对比和判断完后会再发送一个结果到云服务器和tomcat中,读取信息就会知道是不是同一个人,如果结果反应的并不是存好的亲人照片的信息,那么就会开始报警,再通过云服务器和tomcat发送到手机app中发送报警信息并将照片发送给我。图片要先从app上传到tomcat和云服务器上或者提前存入云服务器的文件中,首先要将服务器跟tomcat通过代码连接上,那么face+
15、就能利用tomcat和云服务器进行交互通讯,去对比和判断存好的亲人图片以致能做到安防的功能,app也能访问tomcat和云服务器从而达到报警的目的。手机中的app连接着tomcat和我的云服务器,app访问tomcat的数据,tomcat就能将图片发到app上。1.2 论文组织本论文主要分了五个章节介绍该系统以及本人的主要工作情况:第一章主要是对智能安防摄像头的研究的背景和意义、国内外研究情况、发展前景以及本人的相关工作内容做一个较简单的介绍和说明。第二章主要是整个系统的分析与设计,用图文并茂的方式简单介绍每个系统的工作情况和预期达到的目的和效果,并对选用的方案和元件进行对比采取最优选择来实现
16、每个部分功能的实现。第三章主要是针对硬件模块的运行情况做一个简单介绍,并对部分重要的核心元件、硬件,对它们做一个介绍和进行分析第四章主要是软件部分做一个简单的流程图示意功能的运行和达到的效果。第五章是实物搭建的过程与成品展示,还有就是全部模块综合而成的最终调试所遇到的情况。第六章是总结本次毕业设计所遇到的情况和难点,并对自我做出一个评定,以及对整个系统的展望升华的总结。2 系统分析与设计2.1 需求分析经过对以往的关于智能安防摄像头的调查和剖析,发现其存在较多的弊端:1.大多数的安防的装置都是一直开着,就是摄像头会一直保持开着状态的一直在拍照或者录像;2.大多数的安防设备在检测到人在外面或者室
17、内走来走去的时候,仅仅在app上提醒主人有人在家门口经过或者停留,但是并不能识别亲人和不能录入人像信息。这就导致了主人会收到无关紧要的信息,从而导致对房子的安全的问题降低了一个程度。所以在这个设计中,我们针对上面的需求分别设想了对应的解决方案,比如说可以通过人脸识别去识别不是在录入的人像库中的陌生人,从而可以提醒主人等、可以通过app上发送安防摄像头拍摄到的陌生人的图片给主人并提醒。2.2 设计概要在此系统中,我所设计的内容主要包括把摄像头通过代码识别人和其他物件,通过后台识别人和对比人像库,通过app给主人报警和发送照片的功能。如图2-1系统概要流程图所示:图2-1 系统概要流程图各功能的详
18、细介绍如下:1. 自动报警功能建立在部分功能的基础上,会及时反映给主人拍摄到陌生人的情况。2. 图片要先从app上传到tomcat和云服务器上或者提前存入云服务器的文件中,首先要将服务器跟tomcat通过代码连接上,那么face+就能利用tomcat和云服务器进行交互通讯,去对比和判断存好的亲人图片以致能做到安防的功能,app也能访问tomcat和云服务器从而达到报警的目的。3. 摄像头装在树莓派的usb接口上,在树莓派上运行python,摄像头通过python编译调用OpenCV就能够识别人和其他物件,如果识别到人的话会拍照并上传到发送到OpenCV中,OpenCV通过face+接口,再通过
19、face+进行对tomcat和云服务器上的存好的亲人照片和目前拍摄的人照片进行对比和判断。3 硬件设计3.1 系统硬件电路设计智能安防摄像头系统的硬件由两个模块组合构成,摄像头模块接入RASPBERRY PI 树莓派3代B+型控制系统,经过模块化再整合成为一个完成的系统。3.2 系统部分功能模块硬件介绍和设计3.2.1 树莓派3代B+型的概述RASPBERRY PI 树莓派3代B+型,它是一款基于ARM的微型电脑主板,其系统是基于Linux,它的大少只有银行卡那么大的微型电脑,以SD/MicroSD卡为内存硬盘,可连接键盘、鼠标和网线,同时拥有视频模拟信号的HDMI高清视频输出接口,以上部件全
20、部整合在一张仅比银行卡稍大的主板上,具备所有PC的基本功能只需接通电视机和键盘,所以树莓派可靠性及实用性相对较强,可以应对很多的功能。就像其他任何一台运行Linux 系统的台式计算机或者便携式计算机那样,利用Raspberry Pi 可以做很多事情。当然,也难免有一点点不同。普通的计算机主板都是依靠硬盘来存储数据,但是Raspberry Pi 来说使用SD 卡作为“硬盘”,你也可以外接USB 硬盘。利用Raspberry Pi 可以编辑Office 文档、浏览网页、玩游戏即使玩需要强大的图形加速器支持的游戏也没有问题。Raspberry Pi 的低价意味着其用途更加广泛,利用Raspberry
21、 Pi 可以播放视频,甚至可以通过电视机的USB 接口供电。它的系统如图3-1所示:图3-1树莓派3代B+型系统图3.2.1 BCM2837B0 处理器RASPBERRY PI 树莓派3代B+型搭载了Broadcom BCM2837B0 处理器(原本是 1.2GHz 的 BCM2837)现在是四核心 1.4GHz,它还拥有更好的电源完整性和散热设计。除此之外,新品还支持 2.4GHz 和 5GHz 双频 Wi-Fi,并可通过 USB 2.0 实现千兆以太网,速度最高可达 300Mbps(是之前的三倍)。同时支持低功耗的蓝牙 4.2 模组这是用于树莓派3和树莓派2的Broadcom芯片。BCM2
22、837的基础架构与BCM2835相同。唯一显著的区别是用ARM Cortex A53(ARMV8)处理器替换了ARMV7四核处理器。ARM内核以1.4GHz的频率运行,使设备比树莓派2快50%。VideoCore IV的运行频率为400兆赫。3.2.2 树莓派各版本的比较图3-2树莓派各版本比较图如图3-2所示,树莓派在各版本上没有什么本质上的区别,但是cpu的增强使得树莓派越来越好用,树莓派3是第三代树莓派,它在2016年2月份开始取代掉上一代的树莓派2B,树莓派3代的配置如下:一个1.4GHz四核64位ARMv8 CPU、802.11n无线 LAN、蓝牙4.1、低功耗蓝牙。同时,它和Pi2
23、具有同样的4个USB端口、40针GPIO、HDMI端口、以太网端口、3.5mm音频接口与复合视频输出、摄像头端口(CSI)、显示端口(DSI)。Micro SD 卡插槽(插拔式,代替原来的按压式),可以防止意外将SD卡按出来。VideoCore IV 3D 图像处理核心。3代树莓派在外形上具有着和2代树莓派完全相同,以及在功能上和软件上兼容树莓派1和2代。这一次RASPBERRY PI 树莓派3代B+型搭载的BCM2837B0 处理器,这个芯片保留了与BCM2835和BCM2836完全相同的基础架构。所以,所有的树莓派工程和对树莓派硬件的准确描述教程都会完整的兼容。一个900MHz 32位的四
24、核Cortex-A7 CPU被一个自定义的1.4GHz 64位四核Cortex-A53 ARM取代。这个新的芯片包含了增强33%的系统时钟速率以及各种架构上的增强,在性能上比树莓派2要提升50%-60%,或者粗略的说要比最原始的树莓派性能提升10倍。所以在此设计中我选择了RASPBERRY PI 树莓派3代B+型作为系统主板。3.3 系统硬件实物搭建说明在此设计中,我们并不需要用到树莓派的引脚,只需要将摄像头插到RASPBERRY PI 树莓派3代B+型的usb接口上就可以使用,这就形成了此设计的系统。4 软件设计4.1 系统程序流程本系统树莓派使用Python语言进行的编写,编写过程中先把编
25、写各个模块功能的程序等调试好再整合调试。整体设计思想是先配置好树莓派的环境,安装树莓派所使用的系统,接着进行树莓派与OpenCV的连接,然后连接调用Face+,再使用云服务器和Tomcat通过所获得的数据进行相应的功能判断,最后要用app作为报警的目的,其主要程序流程如图4-1主程序设计流程图所示。图4-1主程序设计流程图4.2 树莓派的环境配置和系统安装4.2.1 树莓派的系统安装找到我所需要用到的树莓派系统,在这里我选用的是Raspbian 的树莓派系统,树莓派可以使用很多系统,例如:OpenELEC、Pidora、Arch Linux ARM等系统,但是Raspbian是树莓派官方所提供
26、的系统,这个系统比较的稳定和广泛使用,所以我在这里使用的是Raspbian系统,如图4-2所示。图4-2树莓派系统将下载好的Raspbian系统镜像写入到tf卡中,如图4-3所示。图4-3树莓派系统写入tf卡4.2.2 系统的初始化先在tf卡中创建一个新的ssh的空文件,然后就可以打开ssh功能,然后要设置树莓派上网,在tf卡上也就是现在的boot盘上新建一个wpa_supplicant.conf文件,在里面配置上网的命令。命令代码如下:country=CNctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdevupdate_config=
27、1network= ssid=yjl psk=yjl123456 key_mgmt=WPA-PSK priority=1为了可以显示画面,继续在root目录下找到并打开config.txt文件,选择里面的命令,以至于可以使用树莓派在屏幕上显示画面,选择的命令如下:disable_overscan=1#去掉围绕开机屏幕的黑色边框hdmi_force_hotplug=1#hdmi_group=2#打开DMT模式hdmi_mode=58 #树莓派分辨率会适应屏幕分辨率hdmi_drive=2config_hdmi_boost=4dtparam=audio=on再更换树莓派的软件源,我用的是stret
28、ch版本的系统,要用到的是阿里云的软件源。先用sudo vim /etc/apt/sources.list命令打开文件,然后编辑文件,修改里面的代码为:deb stretch main contrib non-free rpideb -src stretch main contrib non-free rpi保存文件后用命令sudo apt-get updatesudo apt-get upgrade y执行命令,更换软件源成功。4.2.3 树莓派的远程连接因为智能安防摄像头需要用到远程连接的功能,所以需要在树莓派中安装RDP SERVER 及VNC SERVER,需要命令sudo apt-g
29、et install xrdpsudo apt-get install tightvncserver。如图4-4所示:图4-4 RDP SERVER 及VNC SERVER安装命令执行图安装好RDP SERVER 及VNC SERVER之后,需要RDP SERVER在开机后自动运行,实现树莓派在开机后即可用电脑远程连接树莓派,执行命令sudo systemctl enable xrdpsudo rebootsudo systemctl enable xrdp之后查看树莓派板子wlan0的ip地址,以进行电脑和树莓派的远程连接控制,可以看到我的树莓派ip地址为192.168.43.155,如图4
30、-5所示:图4-5 查找树莓派ip地址图在电脑上用win+R执行mstsc,输入192.168.43.155,进行远程连接,远程连接成功后,远程连接的树莓派界面上会出现需要RDP远程连接的账号密码,这里默认的账号是Pi,密码是raspberry,输入进去就可以远程连接成功。如图4-6所示:图4-6 树莓派与电脑远程连接图4.3 人脸识别模块此人脸识别模块的实现需要用到树莓派中用python作为OpenCV视觉库的接口,用OpenCV去做人脸识别的功能,所以要先在树莓派中编译然后安装python。4.3.1 安装python依赖环境打开树莓派的控制台,输入$ sudo apt-get updat
31、e$ sudo apt-get upgrade这两个命令先更新树莓派系统,再用命令$ sudo apt-get install build-essential libsqlite3-dev sqlite3 bzip2 libbz2-dev$ wget https:/www.python.org/ftp/python/2.7.13/Python-2.7.13.tgz$ tar zxvf Python-2.7.13.tgz$ cd Python-2.7.13$ sudo ./configure$ sudo make$ sudo make install安装python所依赖的环境和下载python
32、版本源码编译安装,最后检查安装 图4-7检查安装python图4.3.2 安装OpenCVOpenCV是一个可以用于图像处理、分析、机器视觉方面的很方便的开源函数库。OpenCV是一个基于BSD许可(开源)发行的跨平台计算机视觉库,它能运行在Linux、Windows、Android和Mac OS操作系统上。也就是说OpenCV是可以用在树莓派上作为人脸识别的视觉库。它轻量级而且高效由一系列 C 函数和少量 C+ 类构成,同时提供了Python、MATLAB等语言的接口,OpenCV有很多通用的算法能够实现图像的处理和计算机视觉方面的功能。OpenCV用C+语言编写,虽然它的主要接口也是C+语
33、言,但是依然保留了大量的C语言接口。该库也有大量的MATLAB/OCTAVE(版本2.5)、Java and Python的接口。这些语言的API接口函数可以轻松的通过在线文档获得。如今也提供对于C#、Ch、Ruby,GO的支持。所以在此设计中我使用了用Python去作为OpenCV的接口。我使用OpenCV作为我本次设计的视觉库的原因是:它是一套关于计算机视觉的开放源代码的API函数库。(1)不管是科学研究,还是商业应用,都可以利用它来作开发,因为它对于两者都是免费的。(2)它公开所有API函数的源代码,其内部实现的程序步骤你可以清楚的看到。(3)你可以修改OpenCV的源代码,编译生成你自
34、己需要的特定API函数。(4)作为一个库,它所提供的,是一些常用的,经典的,大众化的算法的API。(5)它同时提供了Python、MATLAB等语言的接口,这样它会提供给你一个很好,方便的机器视觉接口函数下面就是如何安装OpenCV的过程:先使用代码命令更新软件源,固件和升级安装包,安装跟OpenCV有关联的工具,其中包括build-essential、cmake、git和pkg-config,再安装常用的图像工具包,工具包里包括jpeg格式的图像工具包,tif格式的图像工具包,jpeg-2000的图像工具包,png的图像工具包,然后还要安装视频I/O包,gtk2.0包,优化函数包。命令如下图
35、4-8所示:图4-8 更新软件源代码图接下来我要进行的是下载安装OpenCV,然后准备一下编译OpenCV源代码的工作,先使用wget工具下载将要使用的OpenCV 压缩包到用户目录下,解压OpenCV,下载并解压OpenCV_contrib库,进入OpenCV源码文件夹,在里面新建一个名为release的文件夹存放cmake编译时产生的临时文件,配置cmake编译参数,代码如下:wget -O opencv-3.4.1.zip unzip opencv-3.4.1.zipwget -O opencv_contrib-3.4.1.zip unzip opencv_contrib-3.4.1.z
36、ipcd opencv-3.4.1mkdir releasecd releasesudo cmake -D CMAKE_BUILD_TYPE=RELEASE -D CMAKE_INSTALL_PREFIX=/usr/local -D OPENCV_EXTRA_MODULES_PATH=/opencv_contrib-3.4.1/modules -D INSTALL_PYTHON_EXAMPLES=ON -D BUILD_EXAMPLES=ONcmake的编译参数如图4-9所示:图4-9 cmake编译参数图准备工作完成后就正式开始编译用三条代码命令去执行编译,安装,更新动态链接库,命令如下:s
37、udo makesudo make installsudo ldconfig经过这三个命令后,成功安装OpenCV,之后用一个简单的Python程序检验OpenCV是否正常工作,代码如下:# -coding:utf-8-import cv2import numpy as npcv2.namedWindow(white)img = np.zeros(512,512),np.uint8) #生成一张空的灰度图像cv2.line(img,(0,0),(511,511),255,5) #绘制一条白色直线cv2.imshow(gray,img) #显示图像 while True: #循环等待,按q键退出
38、 key=cv2.waitKey(1) if key=ord(q): breakcv2.destoryWindow(white)在树莓派中显示结果如图4-10所示:图4-10 检验OpenCV安装图4.3.3 使用OpenCV进行人脸检测因为OpenCV使用的是Numpy库,因此先通过命令pip install numpy安装Numpy库。安装完后,尝试导入,没有报错,进入OpenCV官网下载Numpy库对应的版本并安装,尝试导入。开始使用OpenCV进行人脸检测,因为OpenCV已经为我们提供了很多有关于人脸检测的pre-trained分类器,如图4-9所示,所以我将选择一个使用。图4-11
39、 OpenCV中人脸检测的分类器简介图在本次设计中我使用的是haarcascade_frontalface_default.xml这个分类器,我首先将分类器的XML文件先从opencv文件夹/sources/data/haarcascades/下的haarcascade_frontalface_default.xml文件复制到我的项目目录opencv文件夹/sources/data/haarcascades/下。然后就能加载我所需要的分类器,再测试我们的摄像头,在这里我使用的代码如下:detector = cv2.CascadeClassifier(haarcascade_frontalfac
40、e_default.xml)cap = cv2.VideoCapture(0)ret, img = cap.read()cv2.imshow(windowname, img)cv2.waitKey(0) cap.release()# 释放摄像头资源运行这个代码将会看到摄像头所拍到的画面,如图4-10所示:图4-12摄像头拍摄图看到了摄像头的运行能清晰的看到人脸,然后我将摄像头所拍到的图片转换为灰度图片,为了能直观的看出检测结果,我用方框将人脸框出来,代码为:gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)faces = detector.detectMu
41、ltiScale(gray, 1.3, 5)for (x, y, w, h) in faces: cv2.rectangle(img, (x, y), (x + w, y + h), (255, 0, 0), 2)现在运行发现摄像头可以检测出人脸了,如图4-11所示:图4-13 人脸检测图发现人脸检测可以使用后,因为现在我已经通过摄像头检测到人脸了,但是我在这里需要的不是一张静态的图片,我们需要的是一个能检测人脸的实时的动态视频。因此我们把代码弄成一个循环,然后不断的检测,最终在显示在新窗口中我将代码写成文件进行一个循环的人脸检测并在另一个对话框中显示出来,结尾中我用了waitKey和ord命
42、令实现了按q退出的功能,就是每一毫秒都在检测键盘有没有按下了q,要是按下了就退出循环了,就相当于结束进程。接下来就释放资源,代码如下图4-12所示:图4-14 人脸代码图4.4 人脸比对模块人脸对比模块我用的是Face+,Face+是一个新型视觉服务平台,Face+平台通过提供云端API、离线SDK、以及面向用户的自主研发产品形式,将人脸识别技术广泛的应用到互联网及移动应用场景中,人脸识别云计算平台市场前景广阔。Face+平台能提供人脸对比,人脸检测,人脸关键点,人脸搜索,人脸属性等技术,正因为它的人脸属性能够获取精准的人脸属性信息,包括年龄、性别、表情、头部姿态、眼睛状态、人种等。所以它的人
43、脸比对技术也很强大,能够在不同表情,年龄中去对比人脸,这是我为什么使用Face+的原因。因为在树莓派中我用到的是python语言,所以在face+我也继续使用python作为接口去连接它和各个模块去进行通信互动,代码我继续加在opencv进行人脸检测的代码下面,方便face+去进行人脸对比,从而快速的得出对比结果并回馈给树莓派,代码如下:图4-15 人脸对比代码图发起请求后就等待返回值,这里我们设置等待返回值5秒,超过5秒则报错,接收到返回值后,就开始解析json,获取相似度confidence,如果confidence大于75则显示trun,否则显示false,具体代码如下:try:#req
44、.add_header(Referer,#post data to serverresp = urllib2.urlopen(req, timeout=5) #把请求的所有数据发给face+服务器,5秒内没有结果就报错#get responseqrcont=resp.read() #接收返回值print qrcontif hj.has_key(confidence): print hjconfidence if hjconfidence70: print trun ser.write(A) break else: print falseexcept urllib2.HTTPError as e: print e.read()这段代码是作为face+接口的代码,它连接着树莓派,并在云服务器,tomcat下获取亲人图片和拍照所拍到的人的图片进行比对,最后返回结果给树莓派,树莓派再发送出去。4.5 云服务器此设计用到的云服务器是阿里云云服务器和tomcat轻量级应用服务器,我在阿里云服务器中搭载运行tomcat服务器,使得face+可以从tomcat中获取亲人图片,app可以通过云服务器去获取报警