人脸识别特指利用分析比较人脸视觉特征信息进行身份鉴别的计算机技术。广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等;而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。
传统的人脸识别技术主要是基于可见光图像的人脸识别,人们也比较熟悉这样的识别方式。不过,这种方式的缺点其实非常明显,光线的限制性非常大。随着技术发展,也出现了一些新的解决方案,例如:三维图像人脸识别、热成像人脸识别等。
在开源领域这些年也出现了一些非常优秀的人脸识别项目,这些项目开源且免费,并且也能达到某些应用场景的使用要求。本文重点介绍这些开源项目。
1.OpenFace
Github:https://github.com/TadasBaltrusaitis/OpenFace
OpenFace是一个用于计算机视觉和机器学习的工具,能够进行各种面部识别检测,包括:特征点检测、头部姿态识别、面部动作识别和眼睛注视识别。此外,它还能够从网络摄像头无需任何专业硬件实现人脸实时识别功能。
OpenFace 是基于 Python 和Torch 的神经网络算法实现,它的理论来自facenet。
它的功能包括:
(1)面部标志检测
(2)面部标志和头部姿势跟踪
(3)面部动作单元识别
(4)凝视跟踪
(5)面部特征提取
2.face_recognition
GitHub: https://github.com/ageitgey/face_recognition
face_recognition 是一个强大、简单、易上手的人脸识别开源项目,并且配备了完整的开发文档和应用案例,并且兼容树莓派系统。本项目是一个非常简洁的人脸识别库,可以使用 Python 和命令行工具提取、识别、操作人脸。本项目的人脸识别是基于业内领先的 C++ 开源库 dlib 中的深度学习模型,用 Labeled Faces in the Wild 人脸数据集进行测试,有高达 99.38% 的准确率。但对小孩和亚洲人脸的识别准确率尚待提升。
其中,Labeled Faces in the Wild是美国麻省大学安姆斯特分校(University of Massachusetts Amherst)制作的人脸数据集,该数据集包含了从网络收集的13,000多张面部图像。
本项目还提供了简易的face_recognition命令行工具,可以用它处理整个文件夹里的图片。
它的主要功能包括:
(1)定位图片中的所有人脸
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_locations = face_recognition.face_locations(image)
(2)识别人脸关键点,包括眼睛、鼻子、嘴和下巴。
import face_recognition
image = face_recognition.load_image_file("your_file.jpg")
face_landmarks_list = face_recognition.face_landmarks(image)
识别人脸关键点在很多领域都很有用,比如本项目的自动化妆案例( digital make-up):https://github.com/ageitgey/face_recognition/blob/master/examples/digital_makeup.py。
(3)识别图片中的人是谁
import face_recognition
known_image = face_recognition.load_image_file("biden.jpg")
unknown_image = face_recognition.load_image_file("unknown.jpg")
biden_encoding = face_recognition.face_encodings(known_image)[0]
unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
results = face_recognition.compare_faces([biden_encoding], unknown_encoding)
(4)实时人脸检测
它可以配合其它的Python库(比如opencv)实现实时人脸检测:
3.InsightFace
GitHub: https://github.com/deepinsight/insightface
InsightFace是一个基于PyTorch和MXNet的开源2D 3D深度人脸识别分析工具,与MXNet相比,基于OneFlow的实现方案在性能方面更优秀,OneFlow在数据并行时速度是其2.82倍;模型并行时速度是其2.45倍;混合并行+Partial fc时速度是其1.38倍。基于OneFlow实现的代码已合并至 insightface的项目仓库,其中包含了数据集制作教程、训练和验证脚本、预训练模型以及和MXNet模型的转换工具。InsightFace高效地实现了丰富的 最先进的人脸识别、人脸检测和人脸对齐算法,这些算法针对训练和部署进行了优化,该解决方案的准确性非常高——在LFW数据集上为99.86%。
ArcFace、SubCenter-ArcFace、RetinaFace等都是InsightFace支持的项目。
4.facenet
Github:https://github.com/davidsandberg/facenet
FaceNet是谷歌公司于 2015 年提出了基于深度学习的人脸识别系统。FaceNet是一个多用途的识别系统,可以同时用于人脸验证(是否是同一人)、识别(这个人是谁)和聚类(寻找类似的人)。在使用标准“人面数据库”进行测试时,FaceNet 的识别精度可以达到近乎百分之百,在面对 2.5 亿张人脸的庞大数据库时,仍能保持 86% 的识别正确率。目前提供的两个预训练模型,在LFW的成绩分别是99.05%和99.65%。
FaceNet 的基本原理是通过直接训练一个深度卷积神经网络,将人脸图像映射到 128 维的欧几里得空间,不同人脸图像在欧几里得空间中的距离与图像相似度相关:那么两幅人脸图像特征向量间的“欧式距离”越小,表示两幅图像是同一个人的可能性越大。
使用FaceNet推理的过程大致为以下几个步骤:
- 数据预处理:常规人脸识别数据集中的图像往往包含整个人体头部及部分环境背景,并且人脸时常有倾斜(歪头、侧脸),在将此类图像输入至模型以前,需要对图像“真人脸”部分进行切图,去除无关的背景信息,并对切出的人脸图像进行对齐,而后才可用于训练。
- 按照特定规则加载数据集:FaceNet 系统使用了一种新型的数据导入方式:以两张匹配的图片(同一个人的两张图片)以及一张不匹配的图片(另一个人的一张图片)为一个三元组,并以组为单位载入数据集。
- 使用大型骨干网络提取人脸特征信息:选择合适的深度卷积神经网络,对输出层进行修改后,即可进行人脸特征提取。常用的深度卷积神经网络包括 resnet 系列、Inception 系列等。
- 对人脸特征信息进行 L2 范数归一化:深度卷积神经网络输出的结果是 128 维超空间中的特征向量,需使用 L2 正则化将 128 维超空间中的点规范化到 128 维超球面上。筛选出有效特征。
- 损失计算与更新梯度:计算三元损失函数(Triplets Loss),使模型快速超目标方向优化。
5.deepface
Github:https://github.com/serengil/deepface
deepface是python的轻量级面部识别和面部属性分析(年龄,性别,情感和种族)框架。您只需几行代码就可以应用面部分析。它弥合了软件工程和机器学习研究之间的鸿沟,非常适合想开车但不会造车的你。
Deepface是一个混合人脸识别软件包。它目前包装了许多最先进的人脸识别模型:VGG-Face、Google FaceNet、OpenFace、Facebook DeepFace、DeepID、ArcFace、Dlib和SFace。默认配置使用VGG-Face模型。
根据实验测试,性能较好的有:FaceNet、VGG-Face、ArcFace和Dlib。可以在其创建者声明的Labeled Faces in the Wild和YouTube Faces in the Wild数据集中找到这些模型的得分。
deepface主要提供以下人脸识别算法,具体对应功能为:
(1)人脸验证
(2)人脸识别
dfs = DeepFace.find(img_path = "img1.jpg", db_path = "C:/workspace/my_db")
(3)人脸属性分析
DeepFace.stream(db_path = "C:/User/Sefik/Desktop/database")
(4)人脸检测
(5)人脸特征提取
(6)人脸实时分析
6.CompreFace
Github:https://github.com/exadel-inc/CompreFace
Exadel CompreFace是领先的免费开源人脸识别系统。该人脸识别算法可以被轻松集成到任何系统中,而无需事先掌握机器学习技能。
系统提供用于人脸识别、人脸验证、人脸检测、地标检测、面罩检测、头部姿势检测、年龄和性别识别的REST API;支持在CPU和GPU上运行模型; 该项目还包含角色管理系统,可以控制谁有权访问面部识别服务。另外,CompreFace提供了docker-compose配置,方便以Docker的模式快速部署人脸服务。
CompreFace支持多种人脸识别服务,包括:
(1)人脸检测
人脸检测的使用场景很多,例如:收集商店在不同性别中受欢迎程度的统计数据;收集有关您的活动在哪些年龄段受欢迎的统计数据;获取地标信息,了解客户的视线;收集商店里有多少顾客的统计数据;确认所有顾客是否正确佩戴口罩。
(2)人脸识别
(3)面部验证
(4)特征检测
(5)年龄识别
(6)性别识别
(7)口罩检测
(8)头部姿势检测
(9)用户、角色和访问管理