python调用第三方库face_recognition可以非常简单的实现人脸识别。但是face_recognition依赖的dlib库在windows电脑上安装起来还是挺麻烦的,淘宝上甚至出现了帮忙远程安装的店家。经过自己的摸索,终于成功的安装了这个模块,现将安装过程进行记录。
face_recognition及dlib模块的安装
安装face_recognition需要先安装dlib。安装dlib需要先安装其三个依赖:
(1)visual studio软件(vs2019链接)我用的是vs2019社区版,听说vs2015及以上版本就可以,然后按提示安装即可,此步骤比较费时间。
(2)cmake。直接pip install cmake即可。
(3)boost。直接pip install boost即可。
然后再pip install dlib及pip install face_recognition即可成功安装该模块
face_recognition的简单使用
以下图为例:
import face_recognition
image = face_recognition.load_image_file("images.png")#可以用cv2查看
image也是一个数组的形式,可以通过cv2进行可视化查看:
import cv2
cv2.imshow('image',image)
程序其实是对图片颜色做了处理的,可视化结果我就不放了(有些诡异,怕挨打)。
识别图片中的人脸位置及五官区域
face_locations = face_recognition.face_locations(image)#脸部区域识别
#face_recognition.face_locations(image,model="cnn")#更精准识别
face_landmarks_list = face_recognition.face_landmarks(image)#脸部五官区域识别
脸部区域的识别结果为:[(80, 199, 187, 91), (68, 294, 175, 187)]
cnn模型区域识别结果为:[(78, 188, 176, 90), (73, 276, 155, 194)],与上一行基本一致
脸部五官区域的识别结果数据有点长就不放了,其实就是以显示出五官的坐标。
可以通过cv2对脸部区域进行可视化显示:
import cv2
img = cv2.imread("images.png")
for face in face_locations:
img=cv2.rectangle(img, (face[3], face[0]), (face[1], face[2]), color = (55,255,155), thickness = 3)
cv2.imshow('img',img)
可视化结果为:
接下来是面部编码的计算,其实就是128维特征向量。
face_encoding_list=face_recognition.face_encodings(image)#面部编码,128维数字
结果是数组的形式,可以保存下来,作为人脸识别的结果。
face_cognition还可以用来识别图片中人是谁,其实用到的就是上面得到的128维特征向量,并比较特征向量之间的差异。
results=face_recognition.compare_faces(known_face_encodings, a_single_unknown_face_encoding)#面部人脸识别
#known_face_encodings一定要是一个矩阵的形式,即便只一个结果。而a_single_unknown_face_encoding一定要是一个一维array的形式
distance=face_recognition.face_distance(face_encodings, face_to_compare)#欧氏距离计算人脸相似程度