1、基于 Linux 的人脸识别系统设计 陈文浩 顾梅花 西安工程大学电子信息系 摘 要: 文章提出了基于 Linux 系统环境下的人脸识别系统设计, 硬件采用了基于S3C2440 芯片作为处理器, 采用 USB 摄像头进行人脸图像采集, 以 QT 作为人机交互界面。对人脸识别系统设计原理进行了研究, 重点探讨了特征提取、特征降维和人脸识别等技术问题。最后将 PC 上实验成功的人脸识别系统植到开发板上, 测试结果表明, 该系统能准确快速地识别人脸。关键词: Linux; QT; 人脸识别; 特征提取; 作者简介:陈文浩 (1990-) , 男, 江西南昌人, 硕士研究生, 主要研究方向:Linux
2、 嵌入式方向;作者简介:顾梅花 (1980-) , 女, 江苏兴化人, 副教授, 博士, 主要研究方向:彩色图像信息处理。收稿日期:2017-07-20基金:陕西省教育厅科学研究项目 (项目编号:16JK1329) Design of Face Recognition System Based on LinuxCHEN Wen-hao GU Mei-hua Abstract: This paper presents the design of face recognition system under the environment of Linux system based on S3 C2
3、440 chip as the processor, using USB camera for face image acquisition, using QT as the man-machine interface. The principle of design of face recognition system is studied, focusing on the technical problems of feature extraction、feature dimension reduction and face recognition. Finally, the succes
4、sful face recognition system on PC is embedded into the development board, the test results show that the system can quickly and accurately identify the face.Keyword: Linux; QT; face recognition; feature extraction; Received: 2017-07-20随着科学技术的不断发展, 传统的身份识别技术已经不能完全满足人类发展的需求。比如传统的身份识别技术有密码验证和身份证件等。密码存
5、在被他人盗取的风险, 一旦被他人盗取, 对方就能轻而易举进入受控区域。用户本人也存在密码遗忘等风险, 由于遗忘造成了无法验证自身身份而被拒之门外。身份证件容易被他人伪造或者盗用, 对方持卡就能仿冒身份。针对以上弊端, 众多学者开始把目光转移到生物特征识别技术1, 近年来, 生物特征识别技术已经成为许多学者研究的热点。人脸识别技术属于生物特征识别技术的一种, 与其他生物识别技术相比, 人脸识别具有直接、友好和方便等特点, 识别过程无需人体直接接触, 具有非侵犯性, 因此人脸识别技术的研究具有重要意义。传统的人脸识别技术大多是基于 PC 机的2, 有时无法满足特定场合需要, 而基于嵌入式平台的人脸
6、识别技术具有便携性好, 价格低廉, 占用空间小等优点, 因此对嵌入式的人脸识别的研究十分有必要。由于人脸图片数据处理非常大, 而ARM 板子的资源非常有限, 所以数据降维和数据量变小是嵌入式人脸识别的关键。为了解决上述问题, 本文设计出基于 arm9+Linux 的人脸识别系统3, 该系统使用 Adboost 算法实现人脸检测, 采用 PCA 算法实现特征提取和数据降维4, 移植 opencv 计算机视觉库5, 调用其算法, 从而完成人脸识别。1 人脸识别系统硬件设计本文硬件平台选取 S3C2440 处理器的 jz2440 开发板, 其 CPU 主频可以达到400MHz。开发板有 2M Byt
7、e NOR FLASH 和 256M Byte 的 NAND FLASH, 其中 NOR FLASH 通常用来保存 Boot Loader, 引导系统启动, NAND FLASH 用来保存操作系统映像文件和文件系统, 其作用相当于电脑的硬盘6。此外它还有 64M Byte SDRAM, 其相当于电脑的内存条, 在执行程序时需要用到它。该开发板自带 4.3 寸液晶显示屏, 外接 USB 摄像头进行图像采集。采集到的图像数据由S3C2440 微处理器处理, LCD 液晶显示屏和触摸屏构成人机交互模块, LCD 显示用户操作界面和提示信息, 通过触摸屏实现人机交互。系统通过串口与 PC 机进行通信。
8、系统硬件总体框图如图 1 所示。图 1 系统硬件总体框图 下载原图2 系统的软件设计2.1 Linux 系统的搭建Linux 系统主要由四部分组成:引导加载程序 Boot Loader、Linux 内核、根文件系统、设备驱动程序。我们需要在 arm9 开发板上搭建 Linux 系统环境, 首先从官网上下载 u-boot 源码, 然后在 PC 上进行交叉编译, 编译完成后需要烧写到开发板中, 一般烧写方法有 JTAG 和 JLINK, 本文用的是 Open JTAG 工具进行烧写。在烧写完 u-boot 后, 重启开发板, 就可以用 u-boot 来烧写 Linux 内核, 在烧写之前也需要对
9、Linux 内核源码进行配置和编译, 编译后生成的 u Image文件, 可以用 u-boot 烧写进开发板。接着我们要制作根文件系统, 这里需要注意的是根文件系统所用的交叉编译器需要与内核一致, 制作完成后烧写到开发板中就可以加载应用程序。最后移植驱动程序, 像触摸屏、摄像头、LCD 等, 内核通过这些设备驱动来操作控制这些设备。通过以上步骤就可以制作一个基本的 Linux 系统的结构体系, 接下来需要移植应用程序。我们想让它支持触摸屏还需要移植 tslib, tslib 是触摸屏程序, 通常作为触摸屏驱动的适配层, 为上层的应用提供了一个统一的接口。接下来移植 QT, 这样才能使得这个系统
10、支持 QT 应用程序7。2.2 人脸识别系统设计人脸识别分为两大块:人脸检测和人脸识别。其中, 人脸检测实现从输入的图像中找到人脸及人脸存在的位置, 并将其从背景中分离出来。本文采用 haar 特征级联分类器用于人脸检测, 检测出人脸后, 需要进行图像预处理, 包括去除噪声、尺度归一化和灰度归一化、灰度均衡化8。预处理后的图片采用 PCA 算法进行特征降维, 将高维人脸特征空间降低到一个低维特征空间中, 然后把投影得到的特征向量存储在数据库中9。在识别阶段, 将待测人脸图片进行处理后, 将此图像的特征值与数据库中的人脸特征值进行对比, 根据给定的相似度阈值判断是否为数据库中的某一人, 从而实现
11、人脸识别。人脸识别软件流程图如图2 所示。图 2 人脸识别流程图 下载原图2.3 Adboost 人脸检测算法Adboost 是一种递归求取强分类器的方法, 是通过改变样本权重来实现的10。其基本思想是:针对同一个训练集训练不同的分类器, 即弱分类器, 然后把这些弱分类器集合起来, 构造一个更强的最终分类器。在 Opencv 里面有用 haar 特征构建的 boost 级联分类器11。Opencv 有关人脸检测的级联分类器很多, 有用于正面人脸检测的, 也有用于侧脸检测的, 还有检测眼睛、鼻子、嘴巴的。这里我们选择正面人脸检测的分类器。用于正面人脸检测的分类器有以下几种:通过本人亲自实验, 使
12、用 haarcascade_frontalface_alt.xml 用于人脸检测时, 检测率最高, 其中 haarcascade_frontalface_alt_tree.xml 速度较快, 但会产生漏检, haarcascade_frontalface_alt2.xml 速度也较快, 但会产生很多误检, 使用 haarcascade_frontalface_default.xml 进行实验时, 速度很慢, 误检率超高。所以使用 haarcascade_frontalface_alt.xml 用于检测时的综合检测效果最好。当然也可以自己训练分类器, 但是自己训练分类器需要大量的正样本和负样本,
13、 其训练集图像的尺寸大小要统一, 差异性要尽可能大, 这样训练出的分类器才会有较好的效果。本文使用 haarcascade_frontalface_alt.xml 用于人脸检测, 其效果良好。2.4 基于特征脸的人脸识别算法基于 PCA 的人脸识别算法, 也叫特征脸算法。主要分为两个阶段:训练阶段和测试阶段。训练阶段利用 K-L 变换得到人脸数据的主要成分, 由这些主要成分构成特征脸空间12。测试阶段是将待识别的图像和训练集图像都投影到特征脸空间去, 然后根据设定的阈值判断人脸是否是人脸数据库中的13。训练阶段:假设训练集由 N 幅图像组成, 每幅图像都是 m*n 维, 它们所对应的图像矩阵是
14、 m 行 n 列, 把矩阵的每行进行首尾相接组成一个列向量14。设M=m*n, 于是训练样本矩阵为:第一步:计算 N 个样本的平均值:第二步:计算样本图像差值脸:第三步:构造协方差矩阵:第四步:计算协方差矩阵 C 的特征向量和特征值, 注意到 C 是一个 M*M 维的实对称矩阵, 所以它有 M 个特征值, 把前面 K 个特征值所对应的特征向量构成特征脸空间 U= (u1, u2, , uk) , 将每个差值脸 di投影到特征脸空间:需要说明的是:上面 K 的取值是小于 N 的, 其具体值由贡献率决定:其中 a 一般取 90%, 即所选特征值的比重要占总的特征值和的 90%以上。所以通过上面的方
15、法就将 m*n*N 维转化为 k*N 维的数据, 实现降维的目的15。在opencv 中实现 PCA 非常方便, 只需要几行代码就能实现。在实现 PCA 降维以后, 把训练得到的特征向量保存到.xml 的文件中, 以便下次可以直接读取, 在识别阶段时, 首先加载保存在.xml 文件中的训练结果, 随后将测试图片投影到子空间, 然后计算测试图片与训练图片的欧式距离, 找出距离最近的那个训练集图像16。如果此距离在设定的阈值范围内, 则认为是同一个人, 如果超出设定的范围, 则说明训练库中没有此人17。3 实验结果在开发板上搭建好 Linux 环境, 移植 qt 库, 移植 tslib 触摸屏,
16、移植 opencv库后, 我们就可以运行人脸识别程序。本实验需要真人亲临现场进行注册, 在进行训练后实现检测和识别, 或者也可以用测试照片进行实验, 由于条件有限, 我只能用测试图片和本人实验。测试本人亲自进行实时检测识别时, 结果正确。如图 3 所示是本人在开发板上正确识别出本人的效果图。图 3 正确识别效果图 下载原图接着我们选取 10 张照片进行实验, 其中包括一些明星的人脸。在训练集中存放这 10 个人的人脸照片进行训练。每个人的训练照片可以是一张也可以是很多张, 数量越多识别效果越好, 如果是多张照片, 那么选取的照片需要有差别。如图4 所示是这 10 个人对应的人脸照片。图 4 模
17、板库人脸图 下载原图在测试文件夹中我们也存放这 10 个人的照片进行测试, 相同的人给定一个相同的标签加以区分。Truth 对应的是测试图像的标签, neareast 对应的是训练图像的标签, 两者相等说明识别结果正确, 本次选取的十张照片识别结果完全正确。如图 5 所示是输出的识别效果图。图 5 系统识别结果输出图 下载原图4 结束语人脸识别技术经过多年的发展, 已经取得了很多成果, 未来继续是一个研究热门, 其应用前景非常广阔。本文以 ARM9 作为嵌入式平台, 以 LInux 为操作系统设计了一个人脸检测与识别系统。经过大量测试, 该系统效果基本让人满意。但是由于时间和技术的限制, 本系
18、统还只是一个雏形, 许多地方还有待进一步提高。参考文献1张敏, 张海艳, 刘亭, 等.人脸识别系统综述J.电子世界, 2014 (15) :107-108. 2刘耀庭.基于 ARM9 的人脸识别门禁系统设计D.南京航空航天大学, 2011. 3刘永玲.基于 ARM9 和 Linux 的人脸识别系统的研究D.北京交通大学, 2013. 4张成龙.基于 PCA 算法的人脸识别技术研究J.电脑知识与技术, 2016, (22) :182-184. 5顾思思, 胡丽霞.基于 Open CV 的嵌入式人脸识别门禁系统设计J.电脑与电信, 2015, (04) :33-35. 6全治臻, 周锎, 耿卫东,
19、 胡思捷.嵌入式人脸识别系统的硬件方案设计J.南开大学学报 (自然科学版) , 2011, (04) :35-40. 7李学桥, 赵磊, 田现峰.无线图像监控系统中嵌入式 Qt 图形界面设计与实现J.郑州轻工业学院学报 (自然科学版) , 2008, (03) :1-4. 8李姗姗.基于 PCA 的实时人脸识别系统的设计与实现D.北京邮电大学, 2013. 9黄华盛, 杨阿庆.基于 PCA 算法的人脸识别J.电子科技, 2015, (08) :98-101. 10李芳.基于 Ada Boost 算法的人脸检测研究与实现D.武汉理工大学, 2012. 11何荣.基于 Open CV 的人脸识别系统设计D.华南理工大学, 2013. 12王涛.基于 PCA 人脸图像压缩与重建算法的研究与实现D.昆明理工大学, 2014. 13侯小静.基于 PCA 算法和人脸姿态合成的人脸识别D.中南大学, 2013. 14钟官长.基于 Open CV 的人脸识别算法研究与实现D.江西师范大学, 2015. 15张利芳.基于 PCA 算法的人脸识别系统研究D.中北大学, 2015. 16王晓洁.基于 PCA 和 LDA 算法的人脸识别系统J.新乡学院学报, 2015, (12) :37-39+43. 17尹轲.基于群体智能的 PCA 人脸识别算法的优化研究D.青岛理工大学, 2015.