python人脸对比 [原创]
之前,我们利用opencv进行了人脸检测,而人脸对比我们需要用到另外一个库——dilb
请注意:直接安装dlib会出错(我之前遇到的),要先安装boost和cmake,依次执行如下命令:
(安装时间可能较长,请耐心等待)
1 | pip install boost |
然后,我们开始写代码,引用如下几个库(如果numpy报错要自行安装):
1 | import os,cv2,dlib |
随后,我们需要下载dlib的数据包
链接: https://share.weiyun.com/5zRqA8q (密码:5i1K)
将两个dat文件放到目录下的’dlib’文件夹,加定义几个变量
1 | predictor_path = 'dlib/shape_predictor_5_face_landmarks.dat' |
接着,我们定义一个函数,使用这个函数就可以获取128D脸部特征值
1 | def faces_to_128D(imdata,count): |
上面是重要的部分,下面的代码可以自行按需求自定义,进行获取匹配度
在判断两个脸部的相似度的时候,我们用到一个公式来进行计算欧氏距离(欧几里得距离)
用来获取在n维空间中两个点之间的真实距离,也就是说,得到的距离值越小,两个人脸的相似度就越高
知道了这些,我们就可以直接使用numpy来计算欧氏距离
1 | def faces_same(face1, face2): |
于是,我们就可以用faces_compare
来对比两个人脸了
(以下的代码不是关键代码,只是使用示例,用到了之前的人脸检测,读取两个图片中的人脸,进行对比
两个图片为c1.jpg和c2.jpg,保证图片中都只有一个人脸)
1 | image=cv2.imread("c1.jpg") |
至此,python人脸处理就到这里了,可以充分利用这项技术来做一些有意思的程序。