目录
1.人脸识别的流程
2.ResNet-34算法概述
3.测试准备
4.测试代码
5.测试结果
1.人脸识别的流程

dlib库提供高精度人脸识别算法是基于深度学习网络ResNet-34实现,该网络基于三百万张照片进行训练,最终获得了人脸检测模型。
模型下载地址:
https://github.com/davisking/dlib-models/blob/master/dlib_face_recognition_resnet_model_v1.dat.bz2
2.ResNet-34算法概述
(1)网络ResNet-34最终输出一个128D的描述子;

(2)网络ResNet-34训练过程中的核心步骤:Triplets(三元组);
(3)每个triplet在训练的时候会读入3张图片(2张是同一人,1张是另一人 ,分别计算出各自人脸的128D描述子;
(4)不断调整网络模型权重,使得同一人的向量更近,不同人之间的向量更远。
3.测试准备
(1)人脸检测模型:dlib_face_recognition_resnet_model_v1.dat
(2)已知人脸照片:


chenkun1.jpg leijun1.jpg leijun2.jpg
(3)测试照片:

leijun3.jpg
4.测试代码
# 1.导入库
import cv2
import dlib
import numpy as np# 定义:关键点编码为128D
def encoder_face(image,detector,predictor,encoder,upsample=1,jet=1):# 检测人脸faces=detector(image,upsample)# 对每张人脸进行关键点检测faces_keypoints=[predictor(image,face) for face in faces]return [np.array(encoder.compute_face_descriptor(image,face_keypoint,jet)) for face_keypoint in faces_keypoints]# 定义:人脸比较(通过欧式距离),输出对应的名称
def compare_faces_order(face_encoding,test_encoding,names):distance=list(np.linalg.norm(np.array(face_encoding)-np.array(test_encoding),axis=1)) #axis=1 按行处理return zip(*sorted(zip(distance,names)))def main():# 2.读取图片img1 = cv2.imread('chenkun1.jpg')img2 = cv2.imread('leijun1.jpg')img3 = cv2.imread('leijun2.jpg')test = cv2.imread('leijun3.jpg')# BGR to RGBimg1 = img1[:, :, ::-1]img2 = img2[:, :, ::-1]img3 = img3[:, :, ::-1]test = test[:, :, ::-1]img_names=['chenkun1.jpg','leijun1.jpg','leijun2.jpg']# 3.加载人脸检测器detector=dlib.get_frontal_face_detector()# 4.加载关键点的检测器predictor=dlib.shape_predictor('shape_predictor_68_face_landmarks.dat')# 5.加载人脸特征编码模型encoder=dlib.face_recognition_model_v1('dlib_face_recognition_resnet_model_v1.dat')# 6.调用方法:128D特征向量输出img1_128D = encoder_face(img1, detector, predictor, encoder)[0]img2_128D = encoder_face(img2, detector, predictor, encoder)[0]img3_128D = encoder_face(img3, detector, predictor, encoder)[0]test_128D = encoder_face(test, detector, predictor, encoder)[0]four_images_128D=[img1_128D,img2_128D,img3_128D]# 7.比较人脸,计算特征向量之间的距离,判断是否为同一人distance,name = compare_faces_order(four_images_128D,test_128D,img_names)print(f'distance:{distance}\nname:{name}')if __name__ == '__main__':main()
5.测试结果
distance:(0.2991242860091134, 0.33023448014384726, 0.6108381667193944)
name:('leijun1.jpg', 'leijun2.jpg', 'chenkun1.jpg')
参考:
Python调用dlib库实现人脸识别 — AI初学者快速体验人工智能实现_学习机器学习-CSDN博客


![[深度学习] Python人脸识别库Deepface使用教程](https://img-blog.csdnimg.cn/img_convert/8b624f3fc366bb67c3633e23813e368b.png)
![[深度学习] Python人脸识别库face_recognition使用教程](https://img-blog.csdnimg.cn/img_convert/3ec970274e38e9daa167b45c8f8b3274.png)












