基于ARM的视频人脸识别系统设计与实现
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于ARM的视频人脸识别系统设计与实现
发表时间:2018-10-22T09:48:05.817Z 来源:《防护工程》2018年第12期作者:招永铸
[导读] 现代社会对个人身份认证的方便性和有效性要求越来越高,传统的身份认证方法面临着严峻的挑战, 本文设计和实现了一种基于ARM 嵌入式视频的实时人脸识别系统,经测试验证了其实用性以及实时性,可以推广应用。
招永铸
广东鼎华科技股份有限公司广东佛山 528000
摘要:现代社会对个人身份认证的方便性和有效性要求越来越高,传统的身份认证方法面临着严峻的挑战, 本文设计和实现了一种基于ARM 嵌入式视频的实时人脸识别系统,经测试验证了其实用性以及实时性,可以推广应用。
关键词:ARM嵌入式;远程视频;实时;人脸识别
人脸作为一种人体生物特征,具有难以伪造、不会遗失、随身携带、方便易用等特点。人脸识别技术特指利用分析、比较人脸视觉特征信息进行身份鉴别的计算机技术,是模式识别在图像领域中的具体运用,其应用前景非常广阔,可以应用到身份证件的鉴别、自动门禁控制系统、银行取款机、家庭安全,图片检索等领域。可传统的人脸识别系统以电脑为平台,体积大,使用不灵活,而嵌入式ARM平台具有体积小、低功耗、高性能、低成本的特点,因此基于ARM平台开发人脸识别系统具有重要的应用价值。
1.基本结构及工作原理
远程视频实时人脸识别系统的设计,集视频前端和显示终端为一体。视频前端采用搭载了linux操作系统的三星公司ARM 芯片作为开发环境,外部接有UVC 摄像头和无线网卡等。为了减轻CPU 的工作压力,UVC 摄像头自带DSP 芯片自动压缩采集到的图像为MJPEG 格式,然后再将无线网卡设置为AP热点模式而无需路由器的介入,并通过它来建立起一个视频前端服务器,用以接收控制信号和发送视频。显示终端基于Qt+OpenCV 的开发环境,首先接收视频前端传来的视频流并进行图像的预处理,并结合相应算法实现最终的视频监控以及人脸识别等功能,总体硬件框架如图1所示
图1 总体硬件框架
2.视频前端部分设计
2.1 硬件部分选型
视频前端采用三星公司的ARM9系列S3C2440作为处理器,工作频率可达400 MHz,完全能够满足高效的视频采集和视频传输要求,同时该处理器也内置各类控制器,对于引脚的控制十分方便,易于开发。
摄像头模块采用百问网公司的UVC 摄像头,它既可以支持USB接口,也可以支持CMOS接口。USB模块上集成了DSP 芯片,可以自动将图像压缩成MJPEG 格式从而避免了软压缩的缺陷,减少CPU 的压力从而大幅提高性能。CMOS模组为OV7740,最大分辨率640*480。无线网卡选用美国ATHEROS AR9271 高阶芯片,材料全部采用知名供应商,且获得了FCC,ROHS,支持IEEE802.11B/G/N协议,传输速率相对较高。
2.2 软件部分设计
视频前端软件部分设计需先进行uboot移植,linux内核移植和根文件系统的制作,同时根据相应要求编写或调试相关驱动程序以满足外设要求,最后编写上层应用程序。操作系统采用Linux 3.4内核。对内核的配置工作,内核支持的菜单项更加容易操作Makefile 中的模块,删除不必要的驱动模块从而缩小体积和加快速度。
新版本的内核中支持了USB 总线的框架,将通用层包装起来,差异层提取出来以供修改,大大减少开发周期,设计使用的摄像头驱动程序是基于V412框架的视频设备标准的,其为应用层提供了函数调用的基础。当接入设备时,会触发硬件中断,内核会去识别它并且根据其设备描述符找到与之匹配的设备驱动程序,从而可以在应用层使用底层函数接口来操作摄像头硬件。视频的采集流程如图2所示。
图2视频采集流程图
在采集到视频数据后需要发送到上位机去显示,在网络传输部分采用TCP 协议,通过socket编程使得视频前端作为服务器端,上位机作
为客户端来交互地传递数据。视频传输流程如图3所示。
3.显示终端部分设计
3.1 Qt+OpenCV 的开发环境
Qt Creator 是Qt 开发的轻量级跨平台集成开发环境,其包含了一系列高效的创建和测试工具,可以很方便地利用各种控件做出友好的界面。
OpenCV 用于视觉领域,是一款跨平台开源库,内部代码可免费查看和修改。其中有许多模块可以帮我们更好地进行图像处理,也可以跟踪进相应函数了解算法流程。本设计在Qt Creator中调用OpenCV的相应库实现视频的显示和人脸识别等功能。
图3视频传输流程
在界面中用到一个Qlabel类作为静态图像的显示容器,然后结合Qtimer 类的定时器来实现图像的不断刷新,并且给出QPushButton类利用信号与槽机制来实现视频的打开、关闭、人脸识别和手工/智能录像等功能。
3.2 人脸识别方法
3.2.1 人脸检测
本系统选取基于目标检测方法来进行人脸检测。首要工作就是根据需要训练样本得到低级分类器,再将多种低级组合成高级分类器。得到高级分类器后就可以用来进行检测,并将结果返回。但是由于物体距离的远近会导致目标区域的大小不确定,所以分类器设计时也该可以随尺寸变化。其可以用不同比例的扫描窗口来达到这个目的。
具体检测步骤如下:
(1)使用Haar特征检测;
(2)使用积分图对haar特征求值进行加速;
(3)使用Adaboost算法实现分类器的由弱转强;
(4)将得到的强分类器连接起来以达到更高的精确度。
文中使用OpenCV 自带的级联分类器harrcascade_frontalface_alt2.xml,它能很好地检测人脸,使用CascadeClassifier类的Load函数对其进行加载,然后再进行人脸检测。
3.2.2 人脸识别
经过之前的人脸检测后将会得到人脸区域的图像,在经过图像预处理之后就可以使用特征脸(PCA)的方法进行人脸识别。
在识别之前还需要创建人脸库并进行训练,本文选取了10个人的10幅图片来进行训练,即每人选取不同姿态、表情和光照的尺寸为100*100 的正面人脸图像。OpenCV 的一系列函数可以大大简化了人脸库的创建和加载工作,其代码如下:
Ptr
Model = createEigenFaceRecognizer();
model->train(images,labels);
model->save("ORL_PCAModel.xml");
model->load("ORL_PCAModel.xml");
具体识别步骤如下:
(1)创建人脸库;
(2)读取库文件并训练;
(3)把所有的训练数据投影到PCA子空间;
(4)把待识别图像投影到PCA子空间;
(5)找到训练数据投影后的向量和待识别图像投影后的向量最近的那个。
3.3 人脸识别系统实现
人脸识别流程如图4所示,本系统中首先提取视频前端发来的数据,并加载训练好的人脸检测分类器以及训练好的人脸识别库。