python有两个著名的人脸识别库:dlib和face-recognition,face-recognition是基于dlib开发的,比dlib更加简单,这次我们为了理解人脸识别的过程,所以选择dlib库,大家也可以访问https://github.com/ageitgey/face_recognition学习face-recognition。

第一步,安装dlib:打开cmd,输入 pip install dlib。如果你是win 10系统,大概率会出现下面错误:

faceswap python 教程 python中face_recognition_github

大家可以到 https://pypi.org/simple/dlib/ 下载.whl文件,然后再cmd中 pip install .whl文件地址,例如我是下载到桌面的,所以:

faceswap python 教程 python中face_recognition_faceswap python 教程_02

除了dlib库本文还用到,skimage ,cv2,numpy,PIL,sys,os库,大家直接pip install + 库名,就行。当然,skimage库安装是 pip install scikit-image。

接下来就是开始python人脸识别的学习了。

引入所有要用的库:

faceswap python 教程 python中face_recognition_数据_03

2.显示图片

faceswap python 教程 python中face_recognition_python人脸识别教程_04

3.用dlib识别图片中的人脸,并且绘制人脸中68个特征点,这68个特征点就是接下来区别人脸的数据。识别人脸68个特征点需要用到 shape_predictor_68_face_landmarks.dat 这个文件(可以在文章底部github链接进行下载)。而这个文件就是dlib团队之前进行深度学习后形成的文件,具体内容可以不用去管。

faceswap python 教程 python中face_recognition_faceswap python 教程_05

运行效果:

faceswap python 教程 python中face_recognition_faceswap python 教程_06

在获取到这68个特征点后,我们需要把这68个特征点数据化,所以dlib又引入了dlib_face_recognition_resnet_model_v1.dat(文章末可下载) 这个文件,把数据形成128维向量,形成数据后,我们就可以进行数据比较,这样才能识别是谁的人脸。

faceswap python 教程 python中face_recognition_特征点_07

打印结果:

faceswap python 教程 python中face_recognition_faceswap python 教程_08

这就是我们要的最后数据,接下来我们如果要比较两张人脸是不是同一个人,只要比较这个矩阵的欧式距离,如果欧氏距离小于0.6(也可以是0.5,数据越小,判断同一张人脸就越严格),我们就认为是同一张脸。

接下来我们就来比较这两张是不是同一个人:

faceswap python 教程 python中face_recognition_faceswap python 教程_09

两张人脸

代码:

faceswap python 教程 python中face_recognition_github_10

返回脸部信息函数

faceswap python 教程 python中face_recognition_faceswap python 教程_11

两张图片进行比较,并打印欧氏距离

faceswap python 教程 python中face_recognition_python人脸识别教程_12

结果

可以看到,欧式距离为0.368,远小于0.6。所以这是同一个人。

具体代码和上述两个文件可以在我的github上下载:https://github.com/hzllbpr/face_recognition