一、安装windows c++,cmake,dlib,face_recognition
1. 安装visualStudio, visualStudio 结果不对的,至少要选上C++开发环境;
3. pip安装的下载地址超级慢会出现报错的情况,换成国内阿里镜像(可换为国内其他镜像),下载就很快,命令:
pip config set global.index-url https://mirrors.aliyun.com/pypi/simple
4. 安装 pip install cmake ----->安装完成
5. 接下来,我们安装dlib库,运行命令 Pip installed dlib,结果不带顺利,报错了,需要我们把pip升级到19.2.1的版本才能继续安装 (pip 19.2.1以下版本可能存在安装不成功的可能性)
升级pip,运行cmd命令,打开控制台,输入python -m pip install --upgrade pip
安装 dlib 命令: pip install dlib 该安装比较慢且占用cpu 较高
6.安装face_recognition, 命令:pip install face_recognition 安装提示安装完成 则表示已成功安装face_recognition,安装过程曲折,终于大功告成。
二、人脸识别代码
原理很简单,人脸特征在计算机是用数字来存储,叫人脸特征向量,这些数据记录人脸的长,高,肤色等等,根据这些特征通过face_recognition库从图片中获取,通过矩阵二范数运行计算出相似度,又我们自定义个阈值,在这个阈值上的相似度,代码两张图片为一个人
1.获取人脸特征向量
#获取人脸库特征向量
def getFaceEncoding(src):
image = face_recognition.load_image_file(src)
face_locations = face_recognition.face_locations(image)
face_encoding = face_recognition.face_encodings(image, face_locations)[0]
return face_encoding
2.计算相似度
xl1=getFaceEncoding(imgSrc1)
xl2=getFaceEncoding(imgSrc7)
#人脸对比,tolerance相似度阈值
match_results = face_recognition.compare_faces([xl1], xl2, tolerance=0.7)
完整代码
import cv2
import face_recognition
import numpy as np
imgSrc1="C:/1.jpg"
imgSrc2="C:/2.jpg"
imgSrc3="C:/3.jpg"
imgSrc4="C:/4.jpg"
imgSrc5="C:/5.jpg"
imgSrc6="C:/6.jpg"
imgSrc7="C:/7.jpg"
#打开图片检测人脸
def openImg(src):
image = face_recognition.load_image_file(src)
face_locations = face_recognition.face_locations(image)
#print(face_locations)
image1=image*1
image1[:,:,0]=image[:,:,2]
image1[:,:,2]=image[:,:,0]
for (A,B,C,D) in face_locations:
cv2.rectangle(image1,(D,A),(B,C),(0,255,0),2)
cv2.imshow('image',image1)
cv2.waitKey(0)
cv2.destroyAllWindows()
face_encoding = face_recognition.face_encodings(image, face_locations)[0]
print(face_encoding)
#获取人脸库特征向量
def getFaceEncoding(src):
image = face_recognition.load_image_file(src)
face_locations = face_recognition.face_locations(image)
face_encoding = face_recognition.face_encodings(image, face_locations)[0]
return face_encoding
#计算两张图片的相似度,范围:[0,1]
def simcos(A,B):
A=np.array(A)
B=np.array(B)
dist = np.linalg.norm(A - B) # 二范数
sim = 1.0 / (1.0 + dist) #
return sim
if __name__ == '__main__':
xl1=getFaceEncoding(imgSrc1)
xl2=getFaceEncoding(imgSrc7)
#人脸对比,tolerance相似度阈值
match_results = face_recognition.compare_faces([xl1], xl2, tolerance=0.7)
# 测试两张图像中人脸比对的差值(不相似度)
face_distances = face_recognition.face_distance([xl1], xl2)
i=simcos(xl1,xl2)
if i>0.7:
print(True)
else:
print(False)
#openImg(imgSrc3)
官网:http://www.sykjwh.cn
qq技术交流群:855531299
项目地址:https://gitee.com/shangyakejiwenhua/sykj