face_recognition使用:人脸识别开源python库(face_recognition是基于dlib的深度学习人脸识别库)

face_recognition实现人脸识别的思路:
1.给定想要识别的人脸的图片并对其进行编码(每个人只需要一张),并将这些不同的人脸编码构建成一个列表。编码其实就是将人脸图片映射成一个128维的特征向量。
2.opencv读取视频并循环每一帧图片,每一帧图片编码后的128维特征向量与前面输入的人脸库编码列表里的每个向量內积来衡量相似度,根据阈值来计算是否是同一个人。
3.对识别出来的人脸打标签。

实现的思路是采用HOG方法检测输入图像中的人脸。虽然使用卷积神经网络(CNN)或方向梯度直方图(HOG)方法在量化面部之前(对面部编码)都可以检测输入图像中的人脸。CNN方法更准确(但更慢),而HOG方法更快(但不太准确)。虽然CNN脸检测更准确,但在没有GPU运行实时检测速度太慢。

具体代码分析:
(1)输入图片,构建想要识别的一个人脸库,然后对其编码,构建人脸编码列表。在这里插入图片描述
(2)opencv循环读取视频中的每一帧图像,对其编码,与前面的人脸库编码的特征向量一一内积来确定相似读,根据阈值确定是否是同一张脸。在这里插入图片描述
(3)给识别出的人脸贴上标签,在每一帧图像上显示出来。
在这里插入图片描述
一些函数:(1)face_locations函数得到人脸的位置,返回的结构是一个list,每个人脸是一个tuple存储,分别代表框住人脸的矩形中左上角和右下角的坐标(x1,y1,x2,y2)。这里例子只有一个人脸所以只有一个tuple。另外face_recognition读入函数load_image_file输出图像是rgb顺序的,和opencv中bgr不一样。
(2)known_image相当于已知人脸库的图像,unknown_image相当于待检测的图像,分别利用face_encodings函数来映射成一个向量,下图可以看出每个人脸是一个128维的向量。最后利用两个向量的内积来衡量相似度,compare_faces函数就是根据阈值确认是否是同一人脸。上述函数都是支持多个人脸计算的。 另外compare_faces有个tolerance参数是控制阈值的,tolerance值越低越严格,默认为0.6。

代码网址为https://github.com/ageitgey/face_recognition
参考博客:https://www.jianshu.com/p/d6de8c616523

猜你喜欢

转载自blog.csdn.net/Esthery/article/details/89542341