我的网站--> http://www.yansongsong.cn/python
项目GitHub地址--> https://github.com/xiaosongshine/dlib_face_recognitiongit
Dlib是一个深度学习开源工具,基于C++开发,也支持Python开发接口,功能相似于TensorFlow与PyTorch。可是因为Dlib对于人脸特征提取支持很好,有不少训练好的人脸特征提取模型供开发者使用,因此Dlib人脸识别开发很适合作人脸项目开发。github
上面所说的人脸识别开发,主要是指人脸验证,就是输入两张人脸照片,系统会对比输出0或者1,表明判断是不是同一我的。通常的人脸识别开发能够简单分为1.人脸特征建模与2.使用人脸特征模型进行验证(其实还应包括人脸对齐等,这些也能够划分到1中)。使用Dlib进行开发时,咱们直接可使用训练好的人脸特征提取模型,主要的工做就变成了如何进行人脸的验证。bash
人脸的验证其实就是计算类似度,同一我的的类似度就会大,不一样的人就会比较小。能够采用余弦类似度或者欧式距离来计算类似度。其中余弦类似度就是计算角度,欧式距离就是指平方差。均可以用来表示两个特征的类似度(距离)。app
安装能够参考个人这篇博客:[深度学习工具]·极简安装Dlib人脸识别库,下面说一下须要注意的点::工具
此博文针对Windows10安装,其余平台能够仿照这个步骤来安装学习
使用conda指令来安装Dlib库,使用Miniconda与Anaconda均可以,我习惯用Miniconda,简单占用内存小。
推荐使用清华源,下载安装,选择合适的平台版本。python==3.6测试
1.实现人脸检测标记网站
face_test.pythis
代码很简单,经过imread读取照片,而后进行检测,输出结果为dets的list,有几张人脸就会有几个item, 每一个item都有.left(), .top(), .right(), .bottom()四个元素,表明人脸框的四个边界位置。最后经过win.add_overlay(dets)能够将标记的框显示在原图上。
原始照片
其实咱们就可使用这个功能作一个简单的应用,用来检测图片或者视频中人脸的个数。
2.人脸特征点提取
在实战1的基础上添加人脸特征提取功能。
这段代码就是在test.py基础上加入了shape_predictor功能,使之能够在检测出人脸基础上,找到人脸的68个特征点。反映在图中就是蓝色的线。
原始图片
输出图片
注意运行这段代码须要这个文件predictor_path = 'shape_predictor_68_face_landmarks.dat',我会放在个人github中,方便你们下载使用。
3.人脸识别验证
在第二步的基础上,咱们再进一步,实现将人脸提取为特征向量,从而咱们就能够对特征向量进行比对来实现人脸的验证,这里采用的是对比欧式距离的方法。
face_recognition.py
输出结果
咱们能够看出,每张人脸都被提取为了128维的向量,咱们能够理解为128维的坐标(xyz是三维,128维就是有128个轴组成),咱们下面须要作的就是计算两个特征的距离,设定好合适的阈值,小于这个阈值则识别为同一我的。代码正确运行须要这个文件face_rec_model_path = 'dlib_face_recognition_resnet_model_v1.dat',我已经放在本身的github中,方便你们使用。
咱们从上面测试的结果能够看出,不一样的距离为0.25,同一我的为0.06,阈值就能够先设置为其间的一个值。我这里先设置为0.09,这个阈值也是须要大量数据来计算的,选择的准则为使错误识别为最低。
下面咱们把阈值设置为0.09,来测试系统可否区分出不一样的人:在face_recognition.py加入下面代码
输出结果
从上面能够看出,已基本知足对人脸区分的功能,若是如要实用化则须要继续调优阈值与代码,调优的准则就是选择合适的阈值使错误识别为最低。
Hope this helps
我的网站--> http://www.yansongsong.cn/
项目GitHub地址--> https://github.com/xiaosongshine/dlib_face_recognition