人脸识别近来可以说是非常的热门, 无论是 iphonex 的 faceid 人脸解锁 faceID 支付等等, 还是各种安防监控人脸表情变换都用到了人脸识别的相关知识这里介绍一个简单好用的人脸识别的 python 库 --face_recognition, 很多开源人脸相关好玩的项目都是以它为基础开发的
代码网址为 https://github.com/ageitgey/face_recognition,github 已经有 8300 + 的 star 和 1600 + 的 fork, 发文时在所有仓库中排名 854 位
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_bridgeright_eyebrowright_eyechineleft_eyebrowbottom_lipnose_tiptop_lipleft_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, 链接如下
https://github.com/ageitgey/face_recognition/blob/master/examples/facerec_from_webcam_faster.py, 比较简单
来源: http://www.jianshu.com/p/d6de8c616523