曹萍萍 刘升
摘 要: 研究直接系统编程实现人脸识别、基于组件技术的人脸识别和基于云计算的人脸识别三种算法.直接系统编程算法可实现基于肤色的人脸检测;基于组件方式应用OpenCV库可实现人脸的检测和特征比较;云计算方式可实现人脸识别、情感计算等功能.研究人员可根据设计要求选择算法,满足识别系统的需求.
关键词: Android; 组件技术; 云计算; 人脸识别; 方法对比
[中图分类号] TP391.4 [文献标志码]A
Research on Face Recognition Methods under Android Platform
CAO Ping-ping, LIU Sheng
(College of Computer Science and Technology Huaibei Normal University, Huaibei 235000, China)
Abstract: Three kinds of face recognition algorithms, including direct system programming, component based technology and cloud computing, were discussed. The direct system programming algorithm can realize face detection based on skin color, and the OpenCV Library used for component mode can realize face detection and feature comparison, and cloud computing can realize face recognition and emotional computing. Researchers can select algorithms according to the design requirements to meet the requirements of the identification system.
Key words: Android; component technology; cloud computing; face recognition; method comparison
人臉识别是应用图像处理技术分析人脸图像,提取人脸有效特征信息,确认身份的一门技术.该技术涉及数字图像处理、机器视觉、模式匹配、认知科学和情感科学等诸多学科,与身份识别以及人机交互技术研究领域有着密切联系.[1]根据人脸表征,人脸识别方法可以分为三类:第一类,基于几何特征的识别方法[2],该方法在抽取人脸图像显著特征的相对位置及其参数的基础上进行识别,算法存储量小,对光照不敏感,对图像的质量要求很高,图像中的特征点必须很精确,否则无法识别其中的人脸,所以该算法多用于其他识别方式的辅助识别.第二类,基于统计特征的识别方法[3],该方法利用统计原理,从多张人脸图像中提取出人脸共有的一些规律,利用这些规律进行人脸识别.这种方法直观简单,物理意义明确,提取到的特征值不受类别数影响,但人脸图像易受外界光照、表情等因素影响,导致识别的精确度下降.[4]第三类,基于连接机制的识别方法,该方法包含神经网络方法和弹性图匹配方法.[5]目前神经网络方法得到研究人员普遍关注,因为神经网络法较其他方式有其特殊的优势,避免了繁杂的人工提取特征工作,通过机器学习能够获得人脸识别规律和一些隐性表达的特征.缺点是神经网络的训练耗时较多,收敛缓慢,容易陷入局部最小.[6]本文讨论在Android平台上高效实现人脸识别功能,使研究人员可以根据项目的要求,选择不同的实现算法,使人脸识别技术更加适合移动平台对人脸识别的要求.
1 Android平台实现人脸识别的方法
1.1 直接系统编程实现人脸识别
直接系统编程实现人脸识别是在Android开发环境下,不借助第三方控件,直接通过编程实现人脸识别的算法.这样生成的应用程序不需要安装第三方运行库,能够运行在任何Android平台下,运行速度快.缺点是开发周期长,工作量大.以Android平台上基于肤色检测法的人脸识别为例,说明应用直接系统编程实现人脸识别算法的过程.
基于肤色检测法的人脸识别算法,通过识别人脸部位的颜色并加以处理,实现人脸位置的分割.光照是影响肤色检测结果的最大因素,在肤色检测前必须进行光补偿处理.本文应用参考白光补偿算法来消除光照影响,提高检测率.
基于肤色检测人脸识别方式的实现基于YCgCr色彩空间的颜色分割算法,将光补偿处理后的图片从RGB空间转换到YCgCr空间,转换公式为:
YCgCr = 16128128 + 65.481 128.533 24.966-81.085 112 -30.951112 -93.768 -18.214 . RGB .(1)
人脸图像进行灰度化处理后,人脸的倾斜度会影响模板匹配,因此要在模板匹配前对人脸倾斜度进行计算,准确定位人脸区域.人脸倾斜角度的计算公式为:
利用公式(2)得到的倾斜度,将图像调整为正面端正图像.对调整后的端正图像进行图像置灰的均衡化,其指数变换式为:
g x,y =bef x,y -a . (3)
直方图均衡化过程中使用的参数分别为a,b,c;f( x,y)为灰度变换前的图像; g(x,y) 为灰度变换后的图像.均衡化处理后的图像需要进行腐蚀
与膨胀操作,消除类肤色的噪声干扰,进而实现更准确的人脸检测.得到的检测效果如图1所示.
直接系统编程实现人脸识别方式工作量大,所有功能都需要编程实现,对设备的依赖性小,能够安装到任何Android设备,适合于商用软件的开发.
1.2 基于组件技术的人脸识别
基于组件技术的人脸识别是在Android平台上结合第三方组件,利用第三方组件提供的丰富视觉处理算法,实现人脸检测和识别功能.这种方式实现简单,识别的准确度依赖于第三方组件提供的功能.缺點是必须安装第三方组件,运行速度较慢,内存占有量较大.以Android平台结合OpenCV实现人脸识别为例,说明基于组件技术实现人脸识别的过程.
首先在工程中导入OpenCV运行库,加载OpenCV中自带的Haar人脸检测器,然后调用手机内置摄像头,获取一帧静态图片或者动态视频流,导入Mat(基本图像容器)中.再从回调的Mat中检测到符合人脸特征的数据,截取人脸部分,使用cvtColor方法进行人脸置灰,通过人脸的灰度化提高识别的准确度.其次,将置灰后的人脸图片进行equalizeHist(直方图均衡化)处理,提取并保存Mat容器中的人脸特征值.最后,调用多尺度检测函数detectMultiScale实现人脸检测功能.调用OpenCV实现人脸检测后,需要使用JavaCV对Mat容器中存储的特征值进行对比,得到人脸的相似度,实现人脸识别功能.开发的应用程序在客户的Android平台上发布时,客户机需要安装OpenCV manger才能使用设计好的人脸识别程序.应用第三方组件OpenCV设计人脸识别应用程序的结果和流程如图2所示.
基于组件的人脸识别方法由于使用第三方组件提供的算法,因此工作量较小.该方式依赖第三方组件提供的算法,开发周期短,应用灵活,适合算法研究和一般应用.
1.3 基于云计算的人脸识别
基于云计算的人脸识别使用远端服务器提供的图像处理算法,实现人脸识别功能.由于这些算法技术成熟、功能完善,所以识别准确率高,性能稳定,操作简单.缺点是使用时必须通过互联网接入云服务器,大多需要付费使用,算法不开源.[9]以腾讯云提供的人脸识别体验版为例说明基于云计算的人脸识别过程. Android用户联网进入https://cloud.tencent.com/act/event/ci_demo.html,上传本地拍摄的照片,云计算系统将用户传送的本地人脸图像送至服务器,进行人脸识别.该云算法基于高维LBP,PCA,LDA 联合贝叶斯和深度神经网络等全面算法,使得人脸识别准确度更高.从图3的检测结果可以看到,除了人脸检测,还能实现情感计算、生理年龄测定等功能.
基于云计算的人脸识别系统可使用在门禁系统、摄像监视系统等安防场景,也可以使用于学生考勤系统,通过人脸识别进行出席点名记录等.
2 直接系统编程、基于组件技术和基于云计算的人脸检测方式对比
直接系统编程、基于组件技术和基于云计算的人脸检测结果对比见表1.直接系统编程通过颜色分割算法实现人脸区域肤色检测,相比其他方式,工作量仍然很大,如果实现完善的人脸识别功能,需要大量工作要做.该方式适合技术力量强大的公司做原创性开发,程序运行时占用内存空间很小,不依赖第三方技术支持,具有很强的独立性,可以应用于任何场合.基于组件技术的人脸识别是应用第三方组件提供的图像处理方法定位和识别图像中的人脸,依赖组件提供的功能,编程代码量较少,占用内存较大,可以在Andorid平台
快速实现人脸检测,适合算法验证、科研、教学和一般应用.基于云计算的人脸识别依赖于高科技公司提供的云端服务,结果精确,几乎不占用内存.但云服务模式的人脸识别并不开源,无法获取源码学习研究.
3 总结
探讨了Android平台实现人脸识别的三种方式,实现了基于肤色检测的人脸检测和基于OpenCV的人脸检测和识别.直接编程方法若想实现完善的人脸识别,需要专业开发人员花费大量时间编程实现,需反复调试才能完善人脸识别功能;应用第三方组件方法借助第三方组件中已提供的人脸检测、分割、灰度化等接口,只需直接调用组件内的函数即可完成人脸识别功能;云计算方法提供的人脸识别算法应用了先进的机器学习技术,因此功能强大,可满足任何人脸识别的要求,在打击犯罪、考勤、加密等领域得到广泛应用,但需要联网和付费使用.研究人员可根据人脸识别的目的和要求,选择具体的实现方式.
参考文献
[1] 刘永信,李琳莉,巴雅日图.人脸识别方法综述[J].内蒙古大学学报:自然科学版,2009,40(4):493-498.
[2] 张淑军,王高峰,石峰.基于AAM提取几何特征的人脸识别算法[J].系统仿真学报,2013,25(10):2374-2380 .
[3] 刘党辉,沈兰荪, Kin-Man Lam.人脸识别研究进展[J]. 电路与系统学报, 2004, 9(1):85-94.
[4] Phillips P J, Moon H, Rizvi S, et al. The FERET evaluation methodology for face-recognition algorithms[J]. IEEE Transactions on Pattern Analysis & Machine Intelligence, 2000, 22(10):1090-1104.
[5] 李敬德,康维新.基于信息熵和BP神经网络的信号奇异点智能检测[J].牡丹江师范学院学报:自然科学版,2017(4):1-5.
[6] 周杰,卢春雨,张长水,等.人脸自动识别方法综述[J].电子学报,2000,28(4):102-106.