基于人脸识别的人物信息在线检索平台
2020-11-06刘晖龚知资
刘晖 龚知资
摘 要:根据人脸照片快速检索人物信息,在实际应用中具有重要意义。借助互联网的海量数据,利用网络爬虫技术可以对人脸数据进行爬取。文中设计的检索平台首先对人脸照片进行预处理;然后利用SURF算法提取特征,并将特征数据保存为XML文件;再利用FLANN算法进行特征向量匹配,得到匹配的人物;最后,将匹配的人物信息通过用户接口进行展示。实验结果显示该检索平台具有良好的應用前景。
关键词:网络爬虫;图像检索;人脸识别
中图分类号:TP391.41 文献标识码:A 文章编号:2096-4706(2020)13-0074-04
Abstract:It is of great significance in practice to quickly retrieve the personnel information according to facial photo. With the help of the massive data of the internet,the web crawler technology can be used to capture the facial photo data. In this system,firstly,the facial photo is preprocessed. Secondly,the features are extracted by SURF algorithm and the feature data is saved as an XML file. Thirdly,the FLANN algorithm is used to match the feature vectors to get the matched person. Lastly,the matched personnel information is displayed through user interface. The experimental results show that the system has a good application prospect.
Keywords:web crawler;image retrieval;face recognition
0 引 言
人们常常通过文本在搜索引擎中检索自己感兴趣的内容,然而随着多媒体技术的发展,基于文本的搜索已无法满足用户的需求,有时人们希望根据人物的头像查找人物的相关信息,这种对图像语义检索[1,2]的研究是目前重要的研究课题之一。
对图像语义的检索,主要是通过图像标注方法建立图像和语义之间的关联[2],然后通过提取图像的低层视觉特征来进行相似度的匹配以完成检索功能,检索结果在很大程度上取决于相似度算法[3]。本文基于百度百科的人物数据库,结合网络爬虫、人脸识别技术来设计在线检索平台,以实现通过人脸图像对人物信息进行在线检索的应用需求。中南林业科技大学可视计算课题组在研究人脸识别的基础上,通过图像检索获取图像语义信息的方法,完成了基于人脸识别的人物信息在线检索平台的设计与研发。
1 平台整体架构
本文所设计的检索平台部署在连接互联网的服务器端,用户可通过浏览器访问检索平台进行人脸检索。检索平台提供给用户两个接口,一是通过本地上传人脸图像进行人脸检索的接口,二是通过网络图片地址进行人脸检索的接口。如图1所示,用户通过检索接口上传人脸图像之后,检索展示模块会调用人脸识别模块来匹配人物,最后展示匹配人物的相关信息。
2 网络爬虫模块
为了获取人物与其对应的信息数据,进而根据人脸识别来实现在线检索的功能,需要借助于网络爬虫技术[4]。为了简化问题,检索平台设计了一个专用爬虫,并设置URL种子为百度百科人物栏目地址。爬虫程序包含网页下载、网页解析、图片下载、图片存储等几个部分,用于下载百度百科人物相册图片并存储在本地人脸库。
3 人脸识别模块
人脸识别模块分为人脸检测及预处理程序、人脸特征提取程序以及人脸特征匹配程序,作为三个功能接口提供给网络爬虫模块和检索展示模块进行调用。
3.1 人脸检测
由于网络爬虫抓取的人脸图像并没有统一的规格,需要先执行人脸检测操作,从人脸图像中提取出统一规格的人脸。
在OpenCV里实现了基于Haar的级联分类器来进行人脸检测,可适用于正脸、侧脸、眼睛、嘴巴、鼻子等多种对象[5]。从OpenCV 2.0版本开始扩展LBP[6]对象检测器,基于LBP的特征检测器一般比基于Haar的特征检测器更快。
3.1.1 人脸检测前的预处理
在进行人脸检测前要进行几步预处理:
(1)灰度化:人脸检测方法主要针对灰度图像,所以需要先将彩色图像转换为灰度图像。
(2)图像大小调整:人脸检测的执行速度取决于所检测图像的大小,图像越大其执行速度越慢,而在低分辨率下其人脸检测的正确率也相当高,所以先将图像尺寸等比缩小为合理尺寸,从而提高人脸检测执行速度。通常图像尺寸只要大于240×240像素,并且所拍摄图片中人脸距离镜头不远,人脸检测器就可以得到比较好的结果。
(3)直方图均衡化:由于在光线不充足的条件下所拍摄的图像使得人脸检测器并不可靠,所以需要进行直方图均衡化,改善对比度和亮度,提高检测可靠性。
3.1.2 人脸检测
经过预处理后,可通过使用OpenCV的detectMultiScale()函数进行人脸检测。该函数需要设置以下几个关键参数:
(1)minFeatureSize:此参数决定所检测的最小人脸大小。由于本文所设计的检索平台的图像来源中人脸大小不确定,将此参数设置为20*20像素较合适。
(2)searchScaleFactor:此参数决定存在多少不同大小的人脸需要检测,通常该参数可设置为1.1,就能得到相当不错的检测结果。如果参数设置增大,可加快检测速度,但会增加检测不到人脸的可能性。
(3)minNeighbors:此参数决定人脸检测器如何确定人脸已被检测到,通常该参数可设置为3。若需要提高检测人脸的正确率,则可将其设置得更大,但会导致一些人脸无法检测到。
(4)flags:此参数决定人脸检测器的查找方式,如查找所有人脸或只查找最大的人脸等。根据设计需求,只需要使用CASCADE_FIND_BIGGEST_OBJECT模式查找最大的人脸,这样同时也能够提高程序运行速度。
使用detectMultiScale()函数后可得到一个向量类型的结果。在之前的预处理中已将图像缩小,所以在人脸检测结束之后,需要等比放大检测结果,从而获得人脸在原始图像中的区域。
3.2 人脸特征提取
由于光照、人脸角度、表情等因素都会对人脸识别产生影响,所以在进行人脸特征提取前需要尽量消除这些差异。为了简单化问题,并且保证程序运行速度,仅检测眼部,并根据双眼位置对人脸进行调整,接着依次进行仿射变换、直方图均衡化、光滑化和椭圆掩码处理。
3.2.1 检测眼部
在眼部检测中,若对整个人脸图像区域进行眼部检测会使速度很慢并且结果不可靠,所以需要限定眼部的大致区域范围,从而提高检测速度和可靠性。另外,由于眼部相对人脸很小,所以在检测眼部前并不像检测人脸之前要缩小图像以提高检测速度。
3.2.2 仿射变换
在成功检测到双眼位置之后,需要将所有人脸按同样的标准对齐。OpenCV提供了getRotationMatrix2D()函数和warpAffine()函数,以完成旋转人脸、缩放人脸、平移人脸和裁剪人脸外围区域这四个操作。旋转人脸是为了将双眼保持水平,缩放人脸使所有人脸图像双眼之间的距离保持相同,平移人脸使得眼部总在所需高度上水平居中,最后裁剪掉人脸外围区域,如背景、头发、额头、耳朵和下巴等区域,这样使得每一个人脸图像都得到标准化处理,以提高人脸识别准确度。
3.2.3 直方图均衡化
由于图片来源的质量不可保证,所以会存在人脸两侧光照不均匀的情况,导致人脸识别算法受到很大影响。因此,在进行人脸特征提取时需要对人脸左右两侧进行直方图均衡化,将人脸两侧的对比度和亮度标准化处理。OpenCV中提供的equalizeHist()函数可使用户很容易地进行直方图均衡化处理。
3.2.4 人脸光滑化
在经过直方图均衡化后,图像像素的噪声会被大幅度提高,所以需要使用双边滤波器进行平滑处理。OpenCV提供了bilateralFilter()函数来进行平滑处理,其中需要设置两个关键参数,一个是滤波器强度,另一个是邻域。将滤波器强度参数设置为20,来去除之前操作产生的过多像素噪声,并设置邻域参数为2个像素,用来加强平滑小区域图像的像素噪声。
3.2.5 椭圆掩码处理
使用椭圆掩码来删除人脸图像的一些拐角区域,如一些人脸阴影区域。根据通常人脸的形状,这里将椭圆水平方向半径长度设置为0.5倍的人脸图像水平宽度,垂直方向半径长度设置为0.8倍的人脸图像垂直高度,并且将中心坐标设置为人脸图像中心,这样可以通过椭圆掩码去除人脸图像中一些人脸识别不需要的区域。OpenCV提供了ellipse()函数绘制椭圆,并可通过setTo()函数获得掩码。
人脸检测程序和特征提取程序运行时的中间过程图像输出如图2所示。
接下来,通过SURF(Speeded Up Robust Features)算法[7]来提取经过处理后的人脸图像的特征向量。
在进行特征关键点检测之前,首先要定義Hessian阈值特征点检测算子。该值越大表示其获得的特征点与周围点关联的范围越大,但同时获得的特征点越少;相反,该值越小表示其获得的特征点与周围点关联的范围越小,但同时获得的特征点越多。经过测试,将该阈值设置为300能够获得比较好的结果。
通过调用OpenCV提供的detect()函数可检测出SURF特征关键点。检测出SURF特征关键点后,通过调用compute()函数计算所获取特征点的特征向量,其结果保存在Mat类型的数据中。
最后,将Mat类型的数据存入XML文件中保存,以供面部特征识别过程使用。
3.3 人脸特征匹配
将两个人脸图像对应的XML文件中保存的Mat类型数据读入,然后通过OpenCV的match()函数,使用FLANN(Fast Library for Approximate Nearest Neighbors)算法匹配两张人脸图像的特征向量,其结果保存在向量中。
为了提高人脸识别的准确性,将匹配结果中的最小距离对应匹配去除,因为当两张匹配人脸并不是很相似时,其匹配的次最小距离与最小距离的差值比相似人脸匹配时要大很多。计算出匹配结果中的次最小距离,以两倍次最小距离作为基准,筛选出距离小于该基准的匹配对,作为符合条件的匹配结果。同时设置一个阈值,在符合条件的匹配结果中筛选出小于该阈值的匹配对,作为最优匹配结果,经过测试,将阈值设置为0.3时能够获得较好结果。最终,将两张人脸的相似度定义为最优匹配结果数量和符合条件的匹配结果数量的比值。
4 检索展示模块
检索展示模块主要包括三部分:一是提供给用户的检索接口;二是调用人脸特征匹配程序进行人脸检索;三是将检索到的人物信息展示给用户。
检索展示模块首先通过提供给用户的接口获取需要检索的人脸图像。为了优化平台检索效率,本地人脸图像库会为每一张人脸图像计算其MD5码值并保存在数据库中。平台在获得检索人脸后,会计算该人脸图像的MD5码值,并查询数据库中是否有与该值相等的图像的数据项,若存在则说明服务器本地人脸库存在完全相同的人脸图像,将该人脸图像设置为最佳匹配,相似度为100%。如果没有完全匹配的MD5码,则检索展示模块调用人脸检测程序和人脸特征提取程序对图形进行处理,提取所检索的人脸图像的特征向量,以XML文件形式保存在服务器端临时文件夹。之后,检索展示模块从数据库检索部分数据,调用特征匹配程序对该部分人脸图像逐一计算相似度,排序选取其中相似度最高的16张人脸图像作为相似人脸反馈给用户。在将检索结果反馈给用户时,获取最佳匹配人脸对应的百度百科人物信息反馈给用户。用户可查看更多相似人脸,即后台检索更多人脸图像进行匹配,更新最佳匹配人脸并给出新的相似人物信息。如图3所示为平台检索结果的展示图。
5 结 论
本文将网络爬虫模块、人脸识别模块以及检索展示模块整合起来,设计了一个完整的基于人脸识别的人物信息在线检索平台,为人脸识别在语义检索领域的研究提供了一些想法。
平台今后进一步优化的方向可以考虑在服务器端采用分布式结构,通过分布式计算进行人脸图像特征匹配,以获得更大范围局部最优的最佳匹配人脸,使得反馈的结果更加准确,并且速度更快。
参考文献:
[1] 许青青.面向主题的图像标注与检索 [D].南京:南京理工大学,2018.
[2] 郭强,邹广天,连菲,等.应用Web标注技术的建筑图像语义采集方法 [J].哈尔滨工业大学学报,2017,49(10):158-163.
[3] 王朝卿,沈小林,李磊.图像相似度计算算法分析 [J].现代电子技术,2019,42(9):31-34+38.
[4] 付宇新,王鑫,馮志勇,等.基于语义网的中文百科知识组织与集成 [J].计算机工程与应用,2015,51(14):120-126+ 169.
[5] BAGGIO D L,EMAMI S,ESCRIV? D M,et al.深入理解OpenCV:实用计算机视觉项目解析 [M].刘波,译.北京:机械工业出版社,2014.
[6] 王大伟,陈章玲.基于LBP与卷积神经网络的人脸识别 [J].天津理工大学学报,2017,33(6):41-45.
[7] 王卫兵,白小玲,徐倩.SURF和RANSAC的特征图像匹配 [J].哈尔滨理工大学学报,2018,23(1):117-121.
作者简介:刘晖(1978—),男,汉族,湖南常德人,讲师,博士在读,研究方向:计算机图形学、可视化、计算机技术应用。