关键词:Python;Dlib;人脸识别
★基金项目:2016年国家级大学生创新创业训练计划项目(201610398005)。
1、人脸识别技术概述
人脸识别技术是一种基于图像识别,是根据人脸的特征信息进行身份判定的技术,它经过了几十年的发展已经由弱人工智能向强人工智能转化,随着人脸识别算法的不断改进,人脸识别技术已经成为人工智能领域的重要应用。目前人脸识别技术已经比较成熟,得到了公安金融等部门的广泛应用。(1)公安部门:通过相片匹配户籍数据,寻找目标对象。(2)安防领域:通过人脸识别对重点管控区域人员的身份识别,在公共场所对人群进行监视,以达到身份识别的目的,例如在机场、车站等人流量大的场所,通过智能监控系统识别犯罪分子。(3)金融领域:利用人脸识别实现交易支付,例如支付宝实名认证用户可通过刷脸支付。
2、人脸识别的过程
人脸识别是一个比较复杂的过程,归纳起来可以由五个步骤组成:人脸检测、人脸关键点检测、人脸规整、人脸特征提取、人脸识别,人脸识别的过程如图1所示。不同技术会采用不同的方法来实现人脸面部特征的抽象,比如Harmon和Lesk采用多维特征矢量来表示,而Kaya和Kobayashi则采用欧氏距离来表示,本文第三部分提到的Dlib库则是基于深度学习,利用已经训练好的人脸关键点检测器和人脸识别模型,得到人脸面部特征值。
图1 人脸识别的过程3、Dlib库介绍
近些年,Python语言发展迅猛,在很多开发语言排行榜名列前三名。Python语言能够得到这么快的发展,得益于其源代码开源性和代码开发的高效性。Python社区提供了大量的第三方库,它们能够实现科学计算、数据可视化、数据分析等多个领域,Dlib库就是一个知名的第三方库,能够实现人脸检测和识别,其算法采用HOG特征与级联分类器,算法的实现大概过程有:(1)将图像灰度化。(2)采用Gamma校正法对图像进行颜色空间的标准化。(3)对每个图像像素进行梯度计算。(4)对图像进行小单元格划分。(5)生成每个单元格的梯度直方图。(6)把单元格组合成大的块,块内归一化梯度直方图。(7)生成HOG特征描述向量。
4、Python利用Dlib库实现人脸识别
4.1 前期准备
(1)安装好Dlib第三方库。(2)下载人脸识别模型和人脸关键点检测器,分别保存为文件1.dat和2.dat(可从网址http://dlib.net/files/下载)。
(3)准备好已知人脸相片和待识别人脸相片,本例准备已知人脸相片20张存放在Faces文件夹中,待识别人脸2张,其中test01.jpg和Faces文件夹中的第19张相片是同一个人,test02.jpg和Faces文件夹中的第7张相片是同一个人,主程序为testface.py,整个文件夹如图2所示。
图2 文件夹组成示意图4.2实现过程
实现过程主要有三个步骤:根据人脸识别模型和人脸关键点检测器,得到已知人脸相片的特征值库;根据人脸识别模型和人脸关键点检测器,得到待识别人脸相片的特征值;计算待识别人脸相片的特征值和特征值库的欧式距离,距离最小者就是参考识别结果。程序的实现主要包括以下三个子函数,fun1函数功能是得到一张相片的特征值,fun2函数功能是得到多张相片的特征值库,fun3函数功能是计算待识别人脸相片的特征值和特征值库的欧式距离,输出距离最小者为参考识别结果。
(1)fun1函数代码如下,例如执行fun1(test01. jpg)就可以得到以下128个特征值,结果如表1所示。
表1 test01. jpg相片128个特征值(2)fun2函数代码如下。
(3)fun3函数代码如下。
(4)主程序代码如下。
主程序分别用test01.jpg和test02.jpg相片进行测试,测试结果均正确,都能识别出与test01.jpg和test02.jpg匹配的相片,测试结果图3所示。
图3 测试结果
5、结束语
本方法实现了人脸识别的功能,但由于每张相片有128个特征值,如果已知人脸相片较多,特征值库较大,计算欧式距离所用时间较长,还要改进算法,需要引进并行计算等技术,提高人脸识别效率。
作者简介:
张枝令,宁德师范学院信息与机电工程学院,副教授,研究方向:计算机网络、数据挖掘和大数据。