实现思路:
1、使用Dlib识别并提取脸部图像
2、使用VGG Face模型提取脸部特征
3、使用余弦相似度算法比较两张脸部图像的特征
代码如下:
1import time 2import numpy as np 3import sklearn 4import sklearn.metrics.pairwise as pw 5import cv2 6import dlib 7 8prototxt = 'datas/models/caffe/vgg-face/vgg_face_caffe/vgg_face_caffe/VGG_FACE_deploy.prototxt' 9caffemodel = 'datas/models/caffe/vgg-face/vgg_face_caffe/vgg_face_caffe/VGG_FACE.caffemodel' 10dlib_model = 'datas/models/dlib/shape_predictor_68_face_landmarks.dat' 11detector = dlib.get_frontal_face_detector() 12predictor = dlib.shape_predictor(dlib_model) 13net = cv2.dnn.readNetFromCaffe(prototxt, caffemodel) 14 15faces1 = get_faces('datas/images/face-tests/fanbb/f16.jpg') 16faces2 = get_faces('datas/images/faces/fanbb.jpg') 17for i,face in enumerate(faces1): 18 cv2.imshow('face1_%d' % i,face) 19 20for i,face in enumerate(faces2): 21 cv2.imshow('face2_%d' % i,face) 22 23face_1 = faces1[0] 24face_2 = faces2[0] 25 26result = compare_faces(face_1,face_2) 27print('prob of similarity:',result) 28cv2.waitKey() 29cv2.destroyAllWindows()




第一张图像与第二张图像人脸的相似度为:0.8697828
第一张图像与第三张图像人脸的相似度为:0.998867
第一张图像与第四张图像人脸的相似度为:0.00211427
以上测试图像来源网络,仅作程序演示使用,如有侵权,请告知删除。