第一步:建立人脸数据库
收集人脸数据这一部分比较简单,想识别谁就要收集谁的照片,注意图片里面只能出现他一个人的脸,尽量收集不同视角的人脸以提高准确率,本文是用dlib库进行人脸采集
# Dlib 正向人脸检测器 / Use frontal face detector of Dlib
detector = dlib.get_frontal_face_detector()
# Dlib 人脸 landmark 特征点检测器 / Get face landmarks
predictor = dlib.shape_predictor('data/data_dlib/shape_predictor_68_face_landmarks.dat')
# Dlib Resnet 人脸识别模型, 提取 128D 的特征矢量 / Use Dlib resnet50 model to get 128D face descriptor
face_reco_model = dlib.face_recognition_model_v1("data/data_dlib/dlib_face_recognition_resnet_model_v1.dat")
第二步:搭建模型
本文利用resnet50模型来获取128个人脸特征,其网络结构如下:
这一步代码,我们阔以不用自己训练,阔以用训练好的模型:
# Dlib Resnet 人脸识别模型, 提取 128D 的特征矢量 / Use Dlib resnet50 model to get 128D face descriptor
self.face_reco_model = dlib.face_recognition_model_v1("data/data_dlib/dlib_face_recognition_resnet_model_v1.dat")
第三步:进行识别
人脸的识别无非就是先检测到图片或者视频里面的人脸,然后抠出来和数据库里面的人脸进行相似度计算
for k in range(len(faces)):
# c. 对于某张人脸, 遍历所有存储的人脸特征 / For every face detected, compare it with all the faces in the database
val = 999999
label_name = "未知人"
for key, value in self.face_feature_data.items():
e_distance_tmp = return_euclidean_distance(
current_frame_face_feature_list[k],
value)
if val > e_distance_tmp and e_distance_tmp < 0.4:
val = e_distance_tmp
label_name = key
top = faces[k].top()
bottom = faces[k].bottom()
left = faces[k].left()
right = faces[k].right()
cv2.rectangle(img_rd, (left, top), (right, bottom), (0, 0, 255))
img_rd = cv2ImgAddText(img_rd, label_name, left, top - 25)
第四步:搭建GUI界面
第六步:整个工程的内容
提供整套,提供测试数据,提供GUI界面代码,主要使用方法可以参考里面的“文档说明_必看.docx”
代码的下载路径(新窗口打开链接):基于卷积神经网络人脸识别系统
有问题可以私信或者留言,有问必答