人脸识别近来可以说是非常的热门,无论是iphonex的faceid人脸解锁、faceID支付等等,还是各种安防监控、人脸表情变换都用到了人脸识别的相关知识。这里介绍一个简单好用的人脸识别的python库--face_recognition,很多开源人脸相关好玩的项目都是以它为基础开发的。
image
face_recognition是基于dlib的深度学习人脸识别库,在LFW上的准确率达到了99.38%。
安装
只需要编译好dlib(主要支持linux和macOS)后,通过pip install face_recognition来安装相关包,函数运行需要占用一定的GPU空间
使用
face_recognition包括人脸检测、人脸关键点检测、人脸识别等接口,具体如下:
人脸检测:
image
github示例
看上图中函数名称就可以了解到读入图像,通过face_locations函数得到人脸的位置,测试如下,可以看出返回的结构是一个list,每个人脸是一个tuple存储,分别代表框住人脸的矩形中左上角和右下角的坐标(x1,y1,x2,y2)。这里例子只有一个人脸所以只有一个tuple。另外face_recognition读入函数load_image_file输出图像是rgb顺序的,和opencv中bgr不一样。
image
关键点检测以及跟踪:
image
上图中通过face_landmarks函数得到人脸特征点list,测试例子如下图,每个人脸是一个字典,包括nose_bridge、right_eyebrow、right_eye、chine、left_eyebrow、bottom_lip、nose_tip、top_lip、left_eye几个部分,每个部分包含若干个特征点(x,y),总共有68个特征点。
image
人脸识别:
image
人脸识别实际上是对人脸进行编码后再去计算两两人脸的相似度,known_image相当于已知人脸库的图像,unknown_image相当于待检测的图像,分别利用face_encodings函数来映射成一个向量,下图可以看出每个人脸是一个128维的向量。最后利用两个向量的内积来衡量相似度,compare_faces函数就是根据阈值确认是否是同一人脸。上述函数都是支持多个人脸计算的。 另外compare_faces有个tolerance参数是控制阈值的,tolerance值越低越严格,默认为0.6。
image
最后github上相应有一个real-time face recognition的demo,链接如下