人脸识别技术,如果往深了研究,很难,现在已经有团队致力于研究3D人脸识别技术。本文还是基于python成熟的函数库(模块)dlib对人脸识别进行简单的介绍。首先看一下效果图,首先给出对人脸的68个特征点进行提取的效果图:
再给出识别的效果:
因为代码中的算法是,与数据库中图片欧式距离最小的,则判断为该候选人。所以虽然左右两位朋友不在数据库中,但是也给出了识别结果。后期改进可以判断,当欧式距离大于某个门限时,则判定为未知人员。
下面对人脸识别技术进行详细介绍。
数据库准备
在进行人脸识别时,首先得有数据,其中包含人脸数据、训练好的模型数据,如下图所示:
训练好的数据包含人脸关键点检测器、人脸识别模型,如图所示:
系统与模块
Ubuntu64系统系统用的是Ubuntu64系统,便于后续dlib模块的安装,本文在做实验时,是在虚拟机中进行的,如图所示:
dlib模块安装dlib官方文档给出的标语是:高质量的机器学习、图像处理、深度学习、人脸识别 C++/Python库。
dlib模块可以在Linux和Max系统安装,但是也有很多资料显示如何在windows系统中安装dlib,感兴趣的读者可以自行研究。
dlib模块的安装需要两个模块依赖:cmake和boost,由于篇幅限制,本文不介绍如何安装dlib模块,因为相关的资料、博客很多,请查阅相关资料。
人脸识别关键代码
如上图所示给出3句人脸识别的关键代码,其中第一句是加载正脸检测器,第二句是加载人脸关键点检测器,第三句是加载人脸识别模型。
这一句代码中,是对变量descriptors进行初始化,其中count是数据库中人脸的个数,128是固定的值(因为文章借用别人已经训练好的模型,而模型的特征向量就是128维度的)。
上图中的代码,第一句detector(img, 1)是对人脸进行检测,for循环是对图片中的人脸进行循环,有几张人脸,就循环几次。然后将特征向量存储在descriptors中。
最后将变量descriptors存储在文件candidates.npy中,即训练得到的数据库。
全部代码
全部代码内容较多,我们将放入网盘,包括前期的数据库,训练模型等数据,一并上传网盘。
人脸识别数据库
Labeled Faces in the Wild Home (LFW)本文使用的就是LFW人脸数据库,LFW中的人脸数据多来源网络,已经被广泛的应用在评价Face Verification算法性能上。
除此之外,我们再介绍几种数据库:
PubFig: Public Figures Face Database(哥伦比亚大学公众人物脸部数据库)Large-scale CelebFaces Attributes (CelebA) DatasetColorferetMulti-Task Facial Landmark (MTFL) datasetBioID Face Database - FaceDBPerson identification in TV seriesCMUVASC & PIE Face dataset等等,还有很多。当然读者也可以自己采集。也可以通过爬虫的手段在互联网上进行爬虫获取。
总结
本文利用python的dlib模块,对人脸识别技术进行了介绍。希望对你的学习有所帮助,谢谢