近年来,随着安防行业的不断向前发展,智能化是未安防行业发展的一大发展趋势。所谓人脸识别技术,即基于人的脸部特征,对输入的人脸图象或者视频流进行判断,首先判断其是否存在人脸。如果存在人脸,则进一步的给出每个脸的位置、大小和各个主要面部器官的位置信息。并依据这些信息,进一步提取每个人脸中所蕴涵的身份特征,并将其与已知的人脸进行对比,从而识别每个人脸的身份。
人脸识别技术原理分析
人脸由于其易采集的特性,受到很多行业客户的关注,特别是公安、海关、商场等。人类每天都在进行人脸识别,因此也最能接受这种身份认证方式。人脸识别的研究始于上世纪中期,经历了数十年的努力,现在已经可以应用在我们的实际生活中,为我们提供各种便利。
人脸识别主要分为人脸检测(face detection)、特征提取(feature extraction)和人脸识别(face recognition)三个过程.
人脸检测:人脸检测是指从输入图像中检测并提取人脸图像,通常采用haar特征和Adaboost算法 训练级联分类器对图像中的每一块进行分类。如果某一矩形区域通过了级联分类器,则被判别为人脸图像。
特征提取:特征提取是指通过一些数字来表征人脸信息,这些数字就是我们要提取的特征。常见的人脸特征分为两类,一类是几何特征,另一类是表征特征。几何特征是指眼睛、鼻子和嘴等面部特征之间的几何关系,如距离、面积和角度等。由于算法利用了一些直观的特征,计算量小。不过,由于其所需的特征点不能精确选择,限制了它的应用范围。另外,当光照变化、人脸有外物遮挡、面部表情变化时,特征变化较大。所以说,这类算法只适合于人脸图像的粗略识别,无法在实际中应用。
表征特征利用人脸图像的灰度信息,通过一些算法提取全局或局部特征。其中比较常用的特征提取算法是LBP算法。LBP方法首先将图像分成若干区域,在每个区域的像素640x960邻域中用中心值作阈值化,将结果看成是二进制数。图3显示了一个LBP算子。LBP算子的特点是对单调灰度变化保持不变。每个区域通过这样的运算得到一组直方图,然后将所有的直方图连起来组成一个大的直方图并进行直方图匹配计算进行分类。
人脸识别:这里提到的人脸识别是狭义的人脸识别,即将待识别人脸所提取的特征与数据库中人脸的特征进行对比,根据相似度判别分类。而人脸识别又可以分为两个大类:一类是确认,这是人脸图像与数据库中已存的该人图像比对的过程,回答你是不是你的问题;另一类是辨认,这是人脸图像与数据库中已存的所有图像匹配的过程,回答你是谁的问题。显然,人脸辨认要比人脸确认困难,因为辨认需要进行海量数据的匹配。常用的分类器有最近邻分类器、支持向量机等。
与指纹应用方式类似,人脸识别技术目前比较成熟的也是考勤机。因为在考勤系统中,用户是主动配合的,可以在特定的环境下获取符合要求的人脸。这就为人脸识别提供了良好的输入源,往往可以得到满意的结果。但是在一些公共场所安装的视频监控探头,由于光线、角度问题,得到的人脸图像很难比对成功。这也是未来人脸识别技术发展必须要解决的难题之一。
现在已有一些机构、高校在进行人脸识别新领域、新技术的研究。如远距离人脸识别技术,3D人脸识别技术等。远距离人脸识别系统面临两个主要困难。一是如何从远距离获取人脸图像。其次,在得到的数据并不理想的情况下如何识别身份。从某种意义上来看,远距离人脸识别并不是一个特定的关键技术或基础研究问题。它可看成是一个应用和系统设计问题。通常有两类解决方法用于获取人脸图片。一种是高清的固定式摄像机,另一种是使用PTZ控制系统多摄像机系统。后者更适合于一般情况,不过其结构更为复杂,造价也更贵。后者需要考虑如何协调多台摄像机的同步操作。一般地,系统由低分辨率广角摄像机和高分辨率长焦摄像机组成。前者用于检测和追踪目标,后者用于人脸图像采集和识别。目前远距离人脸识别技术还处于实验室阶段,未来如果能够解决上述问题,对人员布控这样的应用有着重要意义。
3D人脸识别能够很好地克服2D人脸识别遇到的姿态、光照、表情等问题。主要原因是2D图像无法很好地表示深度信息。通常,3D人脸识别方法使用3D扫描技术获取3D人脸,然后建立3D人脸模型并用于识别。不过,3D人脸识别技术的缺点也是很明显的。首先它需要额外的3D采集设备或双目立体视觉技术,其次,建模过程需要的计算量较大。相信随着未来芯片技术的发展,当计算能力不再受到制约,采集设备成本大幅下降的时候,3D人脸识别将会成为热门技术之一。
人脸识别在应用中的挑战
从实际测试来看,用户的预期与当前的技术水平之间的差距还是比较大的。人脸识别技术在动态监控应用中面临的压力实际上也比较大。
1.用户希望正确报警率要求高。而现实是理论上来说必须接受高误报率。在技术方面,要达到高正确报警率,可以通过降低阈值来实现,但是降低阈值的代价是:高误报率。为了达到95%正确报警率,很多算法可能会产生300%或更高的误报率。
2.用户希望监控库足够大,往往要求数万或几十万,甚至上百万的监控名单,希望能捕到“大鱼”。现实是库容量大就必须接受高误报率。
3. 用户希望大规模成网建设,能够勾画出监控人员的活动轨迹。 现实是必须高投入,重新建专用网络和相关硬件。
4. 用户希望尽量使用目前的监控设备(摄像机和网络)。 现实是现有的摄像机清晰度不够,图像质量差,用于场景监控时视频中人脸过小,网络带宽不够等等造成无法使用现有设备。
5. 用户希望少产生误报甚至不产生误报。 现实是这样就必将损失正确报警率和减少监控库容量,与用户的想法相违。
6.光照问题
面临各种环境光源的考验,可能出现侧光、顶光、背光和高光等现象,而且有可能出现各个时段的光照不同,甚至在监控区域内各个位置的光照都不同。
7. 人脸姿态和饰物问题
因为监控是非配合型的,监控人员通过监控区域时以自然的姿态通过,因此可能出现侧脸、低头、抬头等的各种非正脸的姿态和佩戴帽子、黑框眼镜、口罩等饰物现象。
8. 摄像机的图像问题
摄像机很多技术参数影响视频图像的质量,这些因素有感光器(CCD、CMOS)、感光器的大小、DSP的处理速度、内置图像处理芯片和镜头等,同时摄像机内置的一些设置参数也将影响视频质量,如曝光时间、光圈、动态白平衡等参数。
9.丢帧和丢脸问题
需要的网络识别和系统的计算识别可能会造成视频的丢帧和丢脸现象,特别是监控人流量大的区域,由于网络传输的带宽问题和计算能力问题,常常引起丢帧和丢脸。
OpenCV是Intel 公司支持的开源计算机视觉库。它轻量级而且高效--由一系列 C 函数和少量 C++ 类构成,实现了图像处理和计算机视觉方面的很多通用算法,作为一个基本的计算机视觉、图像处理和模式识别的开源项目,OpenCV 可以直接应用于很多领域,其中就包括很多可以应用于人脸识别的算法实现,是作为第二次开发的理想工具。
1 系统组成
人脸识别系统可以在Linux 操作系统下利用QT库来开发图形界面,以OpenCV 图像处理库为基础,利用库中提供的相关功能函数进行各种处理:通过相机对图像数据进行采集,人脸检测主要是调用已训练好的Haar 分类器来对采集的图像进行模式匹配,检测结果利用PCA 算法可进行人脸图像训练与身份识别,而人脸表情识别则利用了Camshift 跟踪算法和Lucas–Kanade 光流算法。
2 搭建开发环境
采用德国Basler acA640-100gc 相机,PC 机上的操作系统是Fedora 10,并安装编译器GCC4.3,QT 4.5和OpenCV2.2 软件工具包,为了处理视频,编译OpenCV 前需编译FFmpeg,而FFmpeg 还依赖于Xvid库和X264 库。
3 应用系统开发
程序主要流程如图所示。