基于OpenCV的人脸识别系统的研究
2016-10-24郭中华苑俊英伍冯洁连亿东中山大学南方学院广州大学实验中心中山大学深圳市广天川科技有限公司
郭中华 苑俊英 伍冯洁 杨 智 连亿东(.中山大学南方学院;.广州大学实验中心;.中山大学;4.深圳市广天川科技有限公司)
基于OpenCV的人脸识别系统的研究
郭中华1,4苑俊英1伍冯洁2杨智3连亿东1(1.中山大学南方学院;2.广州大学实验中心;3.中山大学;4.深圳市广天川科技有限公司)
利用人脸的生物特征,对人的身份进行识别,将是未来社区安全管理的一种方式。本文在tiny210平台上,利用opencv图像处理库和QT作为系统界面框架,实现了人脸的识别。其中人脸检测采用adaboost算法,人脸识别采用pca算法。系统经过测试,人脸识别率较高能够进行身份识别。
opencv;人脸检测;人脸识别
0 引言
人脸识别技术是指根据人脸的面部特征,对人脸进行识别,通过人脸识别技术进行身份识别,是一种方便有效的方式,跟其他身份识别方式相比,具有方便,不宜复制等优点。因此可以广泛用于门禁识别,安防监控等领域。本文正是基于这种需要,提出了将人脸识别技术应用到小区的安防监控之中。
1 系统组成
本文设计的用于智能社区的人脸识别系统主要由人脸图像采集模块,人脸预处理模块,人脸检测模块,人脸特征提取与识别模块组成。其系统结构框图如图1所示:
图1 人脸识别系统结构图
2 系统硬件框架组成
本系统采用友善之臂的TINY210开发板,其处理器为S5PV210,主频可达1GHz,内部集成powerVGSGX540高性能图形引擎,适合图像处理工作。图像采集采用USB摄像头(蓝色妖姬),图像显示采用7寸LCD电容触摸屏。在系统开始工作前,需要搭建系统工作环境。环境分为PC机开发环境和开发板环境。
2.1PC机环境
PC机上是在虚拟机vmwareplayer3.0上安装的ubantu10,并在uabntu10安装了qt4.7,opencv2.4.9。
2.2开发板环境
系统运行平台采用友善之臂公司生产的tiny210v2,在其开发板上安装了linux操作系统,其具体配置为:bootloader为superboot210;内核为linux3.0.8;文件系统为yaffs2,并移植了opencv,qt到开发板。
3 系统实现
系统实现的具体流程分为2块:一块是在PC机上,一块是开发板上,具体如下:
PC机上:通过摄像头采集图像信息,对所采集的图像进行预处理,然后进行人脸检测,将检测到的人脸进行相应处理得到样本训练集,对所得样本进行训练,得到特征脸子空间。
开发板上:通过摄像头采集要识别人的图像信息,将检测到的人脸图片与训练结果做比较,判断该人脸是否存在与人脸库。
3.1人脸图像信息采集与显示
为了通过开发板采集到视频信息,开发板应安装好相应usb摄像头驱动程序,以及对摄像头访问的应用程序。本系统所安装的linux内核中已提供了v4l2摄像头驱动程序,在此只需要编写对摄像头的访问程序即可。通过usb摄像头所获取的图像信息的数据格式为YUV编码格式,而opencv所支持的图像信息颜色通道顺序为BGR格式,在qt中对图像操作的类是Qimage,Qimage支持的颜色通道顺序是RGB,在opencv中实现颜色通道顺序的转换可使用函数cvCvtColor(const CvArr* src,CvArr* dst, int code)来实现。其人脸图像采集与显示具体步骤如下1-2:
1)在opencv中用cvCaptureFromCAM(int index)函数直接打开摄像头,利用该函数可以直接将usb摄像头输出的数据格式转换成opencv所需的BGR格式。
2)frame = cvQueryFrame(capture);在这里从视频流中获取一帧图像,返回给IplImage指针,opencv中图像存储在IplImage。
3)将IplImage中图像读到QImage中,采集的图像最终通过QT绘制的GUI界面显示在lcd屏上,在此通过opencv提供的函数cvCvtColor(frame,frame,CV_BGR2RGB)实现颜色通道顺序转换,否则不能正常显示颜色;然后通过QImage类读取通过opencv获取的图像。
4)通过lable显示图像,通过QPixmap类可将图像直接显示在lable上。
5)连续图像的显示,通过定时器不断刷新界面,即可获取连续图像。
3.2人脸预处理
在采集到人脸图像后,需对图像进行预处理工作,其目的是为了提高对人脸检测的效率。具体做法为:
1)利用OpenCV提供的cvCvtColor(const CvArr* src, CvArr* dst, int code) 函数将采集到的彩色人脸图像转换成灰度图,减少了计算量3。。。
2)为进一步减少计算量和方便后续的识别工作,对进行灰度处理过后的人脸图像进一步缩小,在此利用opencv提供的函数cvResize(const CvArr* src, CvArr* dst,int interpolation CV_DEFAULT(CV_INTER_ LINEAR))完成尺寸缩小的工作。
3.3 人脸检测
本系统人脸检测采用目前比较受欢迎的adaboost算法,此算法使用了haar分类器,该分类器主要用到了特征矩形来表征人脸,采用积分图的方法计算这些特征值,速度得到了提高。
adaboost算法的关键点在于Haar级联人脸分类器的训练与选择[6],如何训练和选择适合本次设计使用的分类器,由于在本系统用在门禁系统中,因此人脸检测采用的是opencv自带的正脸分类器,分别是:haarcascade_frontalface_default.xml;haarcascade_frontalface_alt. xml;haarcascade_frontalface_alt2.xml;haarcascade_frontalface_alt_tree. xml,根据文献[3]所得结论和笔者做过的大量测试,本系统中采用haarcascade_frontalface_alt2.xml作为此次人脸检测所使用的分类器,测试结果表明人脸检测识别率高。
3.4人脸识别
本系统采用人脸识别率相对较高的PCA算法,即主成份分析法,是掌握事物主要矛盾的一种统计方法。由Pentland在上世90年代将PCA方法引入到人脸识别领域[5]。其原理是利用K-L展开式,将高纬向量转换为低纬向量,得到特征向量子空间,该特征向量子空间即为特征脸空间,当进行人脸识别时,将测试图像投影到此空间,得到一组投影系数,然后将各个人脸与之比较进行识别。根据文献资料得知,PCA算法在人脸识别的应用中受光线强弱的影响大,为了解决这一问题,本文在采集样本和训练阶段对样本进行了相关的预处理,在下文中有关于这方面的一些叙述。利用该特征脸进行人脸识别主要包括训练和识别两个阶段。由于PCA算法主要是其主要过程如下。
训练阶段:
1)将人脸检测得到的面部图像自动截取并保存,并将人脸图像与序号关联起来,保存在一个.txt文档中。
2)对所收集的人脸样本进行图像预处理,文中使用直方图均衡化得到光照更加均匀的图像,使用椭圆形掩码得到背景一致的人脸样本。
3)利用“loadFacelmgArray()”函数读取文本文件(人脸样本文件)的内容,将文本文件中的每一个路径下的图片加载到一个图片数组faceImgArr[]中。
4)使用“cvCalcEigenObjects()”和“cvEigenDecomposite()” 函数对样本进行PCA算法的训练。训练结束后得到:①平均人脸图片“pAvgTrainlmg”;②包含特征脸图片的数组“eigenVectArr[]”;③存放每张人脸特征脸比率的特征值矩阵”projectedTrainFaceMat”。如图2为训练之后得到的平均人脸,图3为没有去除背景的特征人脸,图4为去除背景的特征人脸。
图2 平均脸
图3 没去背景的特征脸
图4 去背景的特征脸
5)以上训练结果使用函数“storeTrainingData()”存放到一个.xml文件中,文件名取为:facedata.xml。
识别阶段:
在对样本进行训练后,接下来进入识别阶段。在这里采用欧式距离进行判断,将待识别的人脸图像投影到训练阶段得到的特征脸空间,得到待识别人脸的特征向量,通过计算训练样本与待识别人脸样本之间的距离,来判断该脸是否存在与人脸库中。具体做法如下:
1)将待识别人脸投影到特征脸空间,得到一个特征比率。
2)根据欧式距离公式,计算出待识别人脸距离最近的人脸空间。
3)计算待识别人脸样本与训练样本集中的相似度,在这里根据预设定的阀值进行判断,当大于所设阀值则系统给出所识别人信息,若没有识别出则提示请登记。
4 系统测试
为验证系统识别效果,现做了如下测试:
1)测试环境:
测试人员数目:4名(并对测试人员进行编号)
训练样本:每人取5个样本,共计20张样本
2)训练和测试地点:教室,相同光照情况下
3)测试方法:
训练样本中的4个人分别进行20次识别;
4)测试结果:
表1 人脸识别测试效
通过上述系统测试,可发现利用PCA算法进行人脸识别,识别率较高,识别速度较高。但是在光照发生变化时,识别率有所下降。
5 结论
随着科学技术的发展,利用人的生物特征作为身份识别是现代人对生活的追求。本文利用人脸的生物特征,利用adaboost算法进行人脸检测,pca算法进行人脸识别,使用opencv图像处理库,qt库作为系统界面框架,在tiny210开发板上实现了人脸识别技术在智能社区的门禁系统中的应用,该系统有如下创新点:
1)人脸图像在LCD屏显示时,采用打开摄像头获得摄像头信息后,直接读取一帧图像的方式,解决了图像在LCD屏显示卡的问题。
2)采用椭圆形掩码得到高质量的样本,提高了人脸识别率。
测试结果表明,在光线情况好的情况识别率较高。该系统具有一定应用价值,但是系统还存在很多不足,比如,光照变化大的情况下,识别率还有待进一步研究。
[1]潘超.基于Linux的人脸识别系统的设计与实现[D].西安:西安电子科技大学,2012:38-39.
[2]徐向前.基于Linux的USB摄像头的探索使用和编程实现[J].科技创新导报,2009(36):13-14.
[3]陈鹏.基于ARM11的嵌入式人脸识别系统的设计和实现[D].郑州大学,2013.
[4]郭中华,连亿东,伍冯洁 等.基于嵌入式的人脸图像采集显示系统的制作[J].电脑与电信,2015(7):32-34.
[5]李明瑞.嵌入式人脸检测与识别系统的研究与实现[D].长沙理工大学,2012:39-40.
[6]Matthew Turk,Alex Penfland. Eigenfaces for Recognition.Journal of Cognitive Neuroscieace,1991,3(1):71-86.
Research on Face Recognition Technology based on OpenCV
GUO Zhong-hua1,4,YUAN Jun-ying1,Wu Feng-jie2,Yang Zhi3,LIAN Yi-dong1
(1.Nanfang College of Sun Yat-sen University;2.Laboratory Center of Guangzhou University;3.Sun Yat-sen University;4.Shen Zhen GUANGTIANCHUAN Technology COl,LTD.)
Using the biological characteristics of human face,the identification of human identity,will be a way of future community safety management.In this paper,we use the opencv image processing library and QT as the system interface framework to realize the recognition of human faces on the tiny210 platform.Face detection using AdaBoost algorithm, face recognition using PCA algorithm.After the test,the face recognition rate is relatively high.
OpenCV;Face detection;Face Recognition
郭中华(1977—),女,硕士,讲师,研究方向:嵌入式技术应用,图像处理。
广东省科技计划项目(2013B090500067)。
苑俊英(1979—),女,硕士,副教授,研究方向:模式识别,数据挖据。