方 毅, 舒 奎
( 大连工业大学 信息科学与工程学院, 辽宁 大连 116034 )
基于ARM的小区安防人脸识别系统
方 毅, 舒 奎
( 大连工业大学 信息科学与工程学院, 辽宁 大连 116034 )
针对小区安防,利用嵌入式技术进行了基于ARM的人脸识别系统的设计。系统使用三星S3C2440开发板,在OpenCV库的基础上,使用 Bandelet变换对人脸图像进行预处理,使用2DPCA算法对变换图像进行主成分分析,并把人脸信息保存至数据库,通过Euclidean算法确认人脸是否可识别。嵌入式系统相比较于未经过Bandelet变换处理的人脸识别系统在识别率上有了进一步提升,可有效地应用在小区安防。
人脸识别;ARM;2DPCA算法;Bandelet变换
当前,许多生活小区的治安任务由物业保安人员负责完成,保安人员作业往往造成管理困难、薪酬纠纷不断等问题。随着计算机和网络技术的飞速发展,人脸识别技术在小区安防上的应用有效地改善了这一状况。人脸识别技术的研究属于计算机科学与生物科学的有效结合,利用人类独特的有效生物特征来进行识别,经过几十年来的不断发展已经有了不少的研究成果。人脸识别系统的构建涉及一系列的技术,包括人脸的图像采集、图像预处理、人脸定位、人脸训练、人脸识别以及身份信息查找等。人脸识别系统在小区安防上具有广泛的应用前景,如图像检索、数字视频处理和视频检测等方面[1-3]。
目前,人脸识别用的主流主成分分析方法为K-L变换,即PCA方法,但光照和人脸姿态变化等会使该方法受到较大程度的影响。本研究采用Bandelet变换对人脸图像进行预处理,结合2DPCA算法可有效地提高人脸正确识别率。
所设计的人脸识别系统是在Linux操作系统下,利用QT开发工具来进行界面设计,以OpenCV图像开源库作为基础,使用arm-linux-gcc交叉编译工具,通过摄像头对图像帧数据进行采集预处理,调用已训练好的Haar特征级联分类器对采集的人脸头像进行模式匹配和人脸检测,检测结果利用2DPCA算法进行人脸图像训练[4-5],把人脸信息保存至数据库,并通过Euclidean算法来判断人脸是否可识别,利用个人ID号在数据库中进行查找、删除等操作。
Bandelet变换是一种图像表示方法,能够自适应地跟踪图像的几何正则方向,由ELe Pennec和Stephane Mallat于2000年提出。这种变换定义了能表示图像正则方向的几何矢量线,不断地对图像的支撑区间S进行剖分,运用公式S=UiΩi计算,直到每一个剖分区间Ωi中最多只包含一条轮廓。图像灰度的变化在所有不包含图像轮廓线的局部区域Ωi是一致正则的,而且在包含轮廓线的区域中,几何正则的方向与轮廓的切线方向一致。在全局最优的约束条件下,计算区域Ωi上矢量场τ(x1,x2)的矢量线,把Ωi内的区间沿矢量线进行小波变换生成Bandelet基,这样所有剖分区域Ωi上的Bandelet的集合就构成了一组L2(S)上的标准正交基,可以充分地利用图像自身的局部几何正则性。Bandelet变换的基本算法[6-8]流程和效果如图1、图2所示。
图1 Bandelet变换算法流程
(a) 变换前 (b) 变换后
2DPCA算法不同于PCA算法之处是2DPCA算法用二维图像矩阵直接构造一个协方差矩阵,用特征值分解法求其特征值和特征向量,而不是以图像的一维向量作为分析对象。2DPCA算法的核心是选取几个最大的特征值所对应的特征向量作为最佳投影轴,对图像矩阵进行投影后提取主成分分量[9]。所设计系统基于Bandelet变换,利用所得矩阵进行2DPCA主成分分析,从而达到降维的效果。
系统设计基于三星S3C2440开发板,在Linux操作系统下,使用USB可旋转摄像头捕捉图像,用QT 5.4.0开发界面,Xvid视频编解码器进行视频处理,使用Oracle数据库存储信息。应用系统开发主要流程如图3所示。
图3 系统主流程图
3.1.1 图像采集
对于图像的采集,需要调用函数cvCreateCameraCapture(0)来打开摄像头,同时利用start()开启QTimer定时器,并设定每隔33 ms发送一次信号。 QT的信号和槽机制会调用自定义的槽函数,在槽函数中通过cvQueryFrame()在摄像头的视频流中抓取一帧图像放入缓存区,对缓存区图像的大小进行设置。在不做其他处理的情况下,通过函数setPixmap()将所采集的图像投放在界面之中。
3.1.2 图像预处理
首先,对被检测的图像进行缩放处理,在缩放后的小图像上检测可以提高效率。其次,由于人脸检测的很多算法都对图像的大小、亮度、色彩等有很大的影响,因此系统设计使用Bandelet变换对采集图像进行处理和计算。为了使图片达到更好的灰度效果,创建了一个8 bit的单通道灰度图。最后,通过cvEqualizeHist()函数对图像直方图进行归一化处理,这样可以提高图像的对比度[10-11]。
3.1.3 脸部检测
在系统设计中,首先通过cvLoad()函数来加载Haar特征的级联分类器文件haarcascade_frontalface_alt2.xml。利用cvHaarDetectObjects()对采集到的图像进行脸部的检测,在预处理后的图像中进行人脸特征的目标确定。如果检测到多张人脸,则用for循环对每一张人脸画矩形图来进行标记。如果未检测到人脸,则让程序循环进行图像采集,直到检测到图像为止。
3.1.4 脸部识别
人脸的识别是系统设计的关键,在系统设计中分为图像的训练和人脸的识别两个部分。
3.1.4.1 图像训练
首先,要采集需要被训练的人脸图像,训练的图像越多,系统识别图像的正确率也就越高。为了提高精度,采集人脸头像时尽量避免光照、遮挡物等情况。对采集到的图像通过Bandelet变换进行预处理后,系统会自动新建文件夹来保存训练的图像集。为了图像的查找方便,将图片的存储路径保存至文档train.txt。
其次,用保存好的文档加载经过采样等处理后的图像集。采用2DPCA算法对图像进行主成分分析时,系统会分配主特征值、特征向量以及平均图像的存储空间。通过OpenCV库函数cvCalcEigenObjects()在训练人脸照片集上计算特征脸,即计算特征值、特征向量和平均图像,保存最大特征值所对应的N张图片[12-13]。
最后,用cvWrite()和cvWriteInt()将训练好的投影矩阵、特征值、特征向量及平均矩阵等训练结果都存储在facedata.xml文件中,并且将被采样人的信息通过制表的形式存入数据库。训练流程如图4所示。
3.1.4.2 人脸识别
人脸识别阶段的流程如图5所示。首先需要对待测试人员进行人脸图像采集并进行预处理[14],加载训练阶段得到的人脸库facedata.xml。在训练得到的N个特征脸的基础上,再把新采集并处理的图像投影到N个特征脸上,从而得到一个权重集合。通过计算新的权重与原来所有个体的权重的距离,选择距离最近的个体,此个体就是可以识别的图像。如果计算出的最近的距离超出了预定的阀值,则说明这个人脸不可识别。
图4 训练阶段流程
图5 识别阶段流程
在设计中,通过cvEigenDecomposite()函数将新图像投影到子空间。因为Euclidean算法比Mahalanobis算法计算距离的效果更好[15],在定义了最小距离后,采用Euclidean算法来计算新的图像与每一个训练得到的个体之间的距离,找出的那个距离最小的即为可识别的图像。最后根据这些图像的ID号来查找已训练好的数据库,在窗口中显示查询到的此人信息。
3.1.5 视频录像
目前有关安防的系统设计中,一般都会需要调用录像回放来仔细研究一些视频中的细节问题,识别系统的设计也考虑到这一环节。系统设计因在QT开发平台上操作,所以可以在整个界面中调用currentDateTime()来显示事件进行的时间。在安装Xvid的视频编解码器后,通过cvCreateVideoWriter()设置视频编码,使用cvWriteFrame()将摄像头捕捉到的图片写入视频中。系统在开启摄像头后会自动启动一个线程,在线程中完成这些操作,这样就可以很方便地根据时间来查看某一时段的视频录像。
考虑到小区智能检测技术的实际应用,通过ssh工具把程序移植到ARM开发板上。
3.2.1 移植的准备工作
3.2.1.1 安装交叉编译链
交叉编译工具链是为了在一个平台体系结构下(如X86PC机)能够编译、链接、处理和调试另一个平台体系结构下(如ARM)的应用程序,可以使最终编译生成的可执行程序在另一平台下正常运行[16-17]。系统使用的交叉编译工具版本是arm-linux-gcc 4.3.2,解压并安装到目录/opt/arm-linux/4.3.2,在环境变量PATH中添加程序的路径 /opt/arm-linux/4.3.2/bin。
3.2.1.2 编译生成OpenCV库
在使用OpenCV库时,一般使用CMake工具来创建Makefile文件。首先将CMake2.8.2安装包解压到目录/opt/cmake-2.8.2-Linux-i386,然后在环境变量PATH中添加路径/opt/cmake-2.8.2-Linux-i386/bin。
在编译OpenCV库时,首先创建build目录,在CMake工具编译arm时作为工作目录[18]。其次,在linux环境下执行cmake-gui命令,选择源代码所在的目录,目标系统选择arm-linux,在Compilers中选择交叉编译器的gcc和g++,在交叉编译器的路径中填写/opt/arm,点击Generate生成Makefile文件。最后,打开系统的命令终端,在opencvMinGW目录下执行mingw32-make命令,操作完成后再执行mingw32-make install命令。为了使安装完成后的OpenCV库可以正常使用,还需要把/arm /opencv /lib下所有的动态链接库文件拷贝到交叉编译库/arm-non-linux-gnueabi/lib中[19]。
3.2.2 Bootloader的移植与配置
Bootloader 是操作系统和硬件之间的桥梁,它的主要工作包括初始化硬件、引导操作系统内核、为操作系统内核检测各种参数。系统使用 U-Boot[20]作为引导程序,版本是U-Boot-2010.03-tekkaman,通过Jtag将U-Boot烧写到flash中。
3.2.3 文件系统的设计
嵌入式Linux系统的运行需要有文件系统的支持,Cramfs系统由于对文件进行高度压缩,不会影响文件的读取速度而经常被用作嵌入式系统的开发。系统设计使用了busybox工具来构建Cramfs系统,主要内容有:/dev,/bin,/usr,/etc, /proc,/tmp等。
3.2.4 移植到S3C2440开发板
S3C2440为用户提供了数码相机接口,此接口支持STN LCD显示器,外接支持SD/MMC/SDIO,USB设备,拥有触摸屏接口等强大的硬件功能[16]。设计复制主机/opt/arm/lib目录中所有的.so文件到嵌入式Linux根文件系统的/lib/目录下,然后把编译过的可执行文件拷贝到嵌入式系统的/opt/myworks/目录下。
根据小区在白天和夜晚受到不同光照等情况的影响,系统在不同光照条件下进行了多次的试验。将开发板固定在小区入口处,人员进入小区时使用360°可控制旋转摄像头对人脸进行扫描。在光线暗淡的情况下,鹰眼摄像头可自动调节照明灯的亮度,从而减小像素受到光照的影响。小区安防系统的试验效果如图6所示,并进行了两类仿真比对试验。
在数据库中采集15人,每人10幅头像作为训练样本,分别在PC机和ARM9上对这15人进行人脸识别。两种系统的一些数据对比如表1所示。数据显示,嵌入式系统与PC机系统在识别率上差别不大,但识别速度上有明显的优越性。
表1 两种系统的性能比较
为了验证Bandelet变换和2DPCA算法结合比PCA算法在人脸的识别过程中有优越性,在光照不同和姿态不同的条件下,在ORL和Yale标准人脸数据库中进行试验。在ORL标准人脸数据库中,一共有40人,每人10幅头像,选取每个人的前5幅图像作为训练样本。在Yale标准人脸数据库中,一共有15人,同样选取每个人的前5幅头像作为训练样本。不同人脸数据库的正确识别率如表2所示。
表2 不同人脸数据库识别率
数据显示,采用Bandelet变换对图像进行处理,结合2DPCA算法主成分分析,无论是对ORL标准人脸库还是Yale标准人脸库,都可以减少光照和姿态变化等的影响,人脸识别的正确识别率均在80%以上。
所设计的基于ARM的小区安防人脸识别系统,以ARM9为硬件核心,以Linux2.16内核,Cramfs文件系统为软件核心,利用busybox构建系统应用程序,在Bandelet变换和2DPCA算法相结合的基础上进行了多次人脸识别的试验。试验表明,人脸图像在经过Bandelet变换处理后会有效减少光照和姿态等对人脸正确识别的影响。嵌入式系统可以有效地在小区中进行人脸识别。
[1] 布拉德斯基,克勒.学习OpenCV[M].于仕琪,刘瑞祯,译.北京:清华大学出版社,2009.
[2] HARA F, KOBAYASHI H. State of the art in component development for interactive communication with humans[J]. Advanced Robotics, 1996, 11(6): 585-604.
[3] 刘艳丽,赵跃龙.人脸识别技术研究进展[J].计算机工程,2005,31(3):10-12.
[4] 陶颖军.基于OpenCV的人脸识别应用[J].计算机系统应用,2012,21(3):220-223.
[5] 李建勇.人脸识别技术在视频监控系统中的应用[J].中国安防,2009,2(4):48-50.
[6] 杨思燕.Bandelet变换原理及应用研究[J].计算机技术与发展,2013,23(7):234-235.
[7] 龙奕,刘明坤.基于Bandelet变换域的图像自适应增强算法[J].计算机应用,2008,28(5):1222-1223.
[8] 朱卫东,李全海.基于二代Bandelet和主成分变换的高光谱遥感图像融合[J].同济大学学报,2011,39(7):1068-1069.
[9] YANG J, ZHANG D. Two-dimensional PCA: a new approach to appearance-based face representation and recognition[J]. IEEE Transactions on Pattern Analysis and Machine Intelligence, 2004, 26(1): 131-137.
[10] 焦斌亮,陈爽.基于PCA算法的人脸识别[J].计算机工程与应用,2011,37(8):201-204.
[11] 李倩.人脸识别技术及应用[J].黑龙江科技信息,2011(1):60.
[12] 孔凡之,张兴周,谢耀菊.基于Adaboost的人脸检测技术[J].应用科学,2005,32(6):7-10.
[13] BURGES C J C. A tutorial on support vector machines for pattern recognition[J]. Data Mining and Knowledge Discovery, 1998, 2(2): 121-176.
[14] 吴玲.人脸识别中的图像处理技术[J].科技信息,2010(4):246.
[15] 田家林,陈利学,寇向辉.Linux嵌入式操作系统在ARM上的移植[J].微计算机信息,2007,23(11):60-61.
[16] 鞠剑平,冉全,黎曦.嵌入式Linux在S3C2440上的移植[J].科技资讯,2010(8):17-18.
[17] 韦东山.嵌入式Linux应用开发完全手册[M].北京:人民邮电出版社,2008.
[18] 吕志.基于嵌入式Linux的家庭网关的研究与实现[D].上海:上海交通大学,2011.
[19] 程跃森,李驰新.基于ARM的目标检测系统设计[J].兰州工业高等专科学校学报,2010,17(5):29-31.
[20] 宁波.Linux嵌入式系统在工控领域的研究与实现[D].成都:电子科技大学,2007.
CommunitysecurityfacerecognitionsystembasedonARM
FANGYi,SHUKui
(SchoolofInformationScienceandEngineering,DalianPolytechnicUniversity,Dalian116034,China)
A design of face recognition system based on ARM was presented, which could be used in alarm system for residence district. The face image was preprocessed using Bandelet transform based on the face recognition system of S3C2440 development board and OpenCV library. The principal component for image transform was analyzed using 2DPCA algorithm and the face information would be saved to the database. A new face imagine could be checked out using euclidean algorithm by the system. The recognition accuracy of the recognition system was better than that unused Bandelet transform, which could be applied for alarm system in residence district.
face recognition; ARM; 2DPCA algorithm; Bandelet transform
方毅,舒奎.基于ARM的小区安防人脸识别系统[J].大连工业大学学报,2017,36(6):464-468.
FANG Yi, SHU Kui. Community security face recognition system based on ARM[J]. Journal of Dalian Polytechnic University, 2017, 36(6): 464-468.
2016-03-15.
方 毅(1992-),男,硕士研究生;通信作者:舒 奎(1977-),男,副教授.
TP391.4
A
1674-1404(2017)06-0464-05