大家好,我是Echa。
人脸识别,是基于人的脸部特征信息进行身份识别的一种生物识别技术 (Biometric Recognition or Biometrics)。用摄像机或摄像头采集含有人脸的图像或视频流,并自动在图像中检测和跟踪人脸,进而对检测到的人脸进行脸部识别的一系列相关技术,通常也叫做人像识别、面部识别。
人脸识别流程图
生物识别包括人脸识别、语音识别、指纹识别、视网膜或虹膜识别。其中人脸识别是目前在身份认证或者身份查找应用中使用最广的生物识别技术。
常用的生物特征识别技术
人脸识别特指利用分析比较人脸视觉特征信息进行身份鉴别的计算机技术。广义的人脸识别实际包括构建人脸识别系统的一系列相关技术,包括人脸图像采集、人脸定位、人脸识别预处理、身份确认以及身份查找等;而狭义的人脸识别特指通过人脸进行身份确认或者身份查找的技术或系统。
传统的人脸识别技术主要是基于可见光图像的人脸识别,人们也比较熟悉这样的识别方式。不过,这种方式的缺点其实非常明显,光线的限制性非常大。随着技术发展,也出现了一些新的解决方案,例如:三维图像人脸识别、热成像人脸识别等。
借此机会,小编今天给大家好物分享7个上热搜的GitHub开源人脸识别项目,希望对大家有所帮助。人脸识别是机器学习热门领域之一,在 Github上有很多项目实现了各种人脸识别功能。接下来小编给大家一一介绍。
全文大纲
PaddleDetection - 是一个基于PaddlePaddle的目标检测端到端开发套件。
InsightFace - 是一个基于PyTorch和MXNet的开源2D 3D深度人脸识别分析工具。
OpenFace -是一个用于计算机视觉和机器学习的工具,能够进行各种面部识别检测。
face_recognition - 是一个强大、简单、易上手的人脸识别开源项目。
deepface - 是python的轻量级面部识别和面部属性分析(年龄,性别,情感和种族)框架。
facenet - 是谷歌公司与 2015 年提出了基于深度学习的人脸识别系统。
CompreFace - 是领先的免费开源人脸识别系统。
PaddleDetection - 是一个基于PaddlePaddle的目标检测端到端开发套件。
Github:https://github.com/PaddlePaddle/PaddleDetection
PaddleDetection 官网
PaddleDetection为基于飞桨 PaddlePaddle 的端到端目标检测套件,内置30+模型算法及250+预训练模型,覆盖目标检测、实例分割、跟踪、关键点检测等方向,其中包括服务器端和移动端高精度、轻量级产业级SOTA模型、冠军方案和学术前沿算法,并提供配置化的网络模块组件、十余种数据增强策略和损失函数等高阶优化支持和多种部署方案,在打通数据处理、模型开发、训练、压缩、部署全流程的基础上,提供丰富的案例及教程,加速算法产业落地应用。
PaddleDetection 模型截图:
PaddleDetection 人脸检测
PaddleDetection 2D关键点检测
PaddleDetection 多目标追踪
InsightFace - 是一个基于PyTorch和MXNet的开源2D 3D深度人脸识别分析工具。
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支持的项目。
InsightFace 模型截图
InsightFace 模型
OpenFace -是一个用于计算机视觉和机器学习的工具,能够进行各种面部识别检测。
Github:https://github.com/TadasBaltrusaitis/OpenFace
OpenFace 官网
OpenFace是一个用于计算机视觉和机器学习的工具,能够进行各种面部识别检测,包括:特征点检测、头部姿态识别、面部动作识别和眼睛注视识别。
OpenFace 一个旨在为计算机视觉和机器学习研究人员、情感计算社区和有兴趣构建基于面部行为分析的交互式应用程序的人使用的工具。OpenFace是第一个能够进行面部地标检测、头部姿态估计、面部动作单元识别和眼睛-注视估计的工具包,它具有可用的源代码,可用于运行和训练模型。代表 OpenFace 核心的计算机视觉算法在上述所有任务中都展示了最先进的结果。此外,我们的工具能够实时性能,并能够运行在非专业的硬件上, 例如一个简单的网络摄像头。
OpenFace 是基于 Python 和Torch 的神经网络算法实现,它的理论来自facenet。
它的功能包括:
(1)面部标志检测
(2)面部标志和头部姿势跟踪
(3)面部动作单元识别
(4)凝视跟踪
OpenFace 凝视跟踪
(5)面部特征提取
face_recognition - 是一个强大、简单、易上手的人脸识别开源项目。
GitHub: https://github.com/ageitgey/face_recognition
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)
face_recognition 定位图片中的所有人脸
(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)实时人脸检测
deepface - 是python的轻量级面部识别和面部属性分析(年龄,性别,情感和种族)框架。
Github:https://github.com/serengil/deepface
deepface 官网
deepface是python的轻量级面部识别和面部属性分析(年龄,性别,情感和种族)框架。您只需几行代码就可以应用面部分析。它弥合了软件工程和机器学习研究之间的鸿沟,非常适合想开车但不会造车的你。
Deepface是一个混合人脸识别软件包。它目前包装了许多最先进的人脸识别模型:VGG-Face、Google FaceNet、OpenFace、Facebook DeepFace、DeepID、ArcFace、Dlib和SFace。默认配置使用VGG-Face模型。
实验表明,人类在面部识别任务上的准确率为97.53%,而这些模型已经达到并通过了这个准确率水平。
根据实验测试,性能较好的有:FaceNet、VGG-Face、ArcFace和Dlib。可以在其创建者声明的Labeled Faces in the Wild和YouTube Faces in the Wild数据集中找到这些模型的得分。
deepface主要提供以下人脸识别算法,具体对应功能为:
(1)人脸验证
deepface 人脸验证
(2)人脸识别
dfs = DeepFace.find(img_path = "img1.jpg", db_path = "C:/workspace/my_db")
人脸识别
(3)人脸属性分析
DeepFace.stream(db_path = "C:/User/Sefik/Desktop/database")
deepface 人脸属性分析
(4)人脸检测
deepface 人脸检测
(5)人脸特征提取
backends = [
'opencv',
'ssd',
'dlib',
'mtcnn',
'retinaface',
'mediapipe',
'yolov8',
'yunet',
]
#face verification
obj = DeepFace.verify(img1_path = "img1.jpg",
img2_path = "img2.jpg",
detector_backend = backends[0]
)
#face recognition
dfs = DeepFace.find(img_path = "img.jpg",
db_path = "my_db",
detector_backend = backends[1]
)
#embeddings
embedding_objs = DeepFace.represent(img_path = "img.jpg",
detector_backend = backends[2]
)
#facial analysis
demographies = DeepFace.analyze(img_path = "img4.jpg",
detector_backend = backends[3]
)
#face detection and alignment
face_objs = DeepFace.extract_faces(img_path = "img.jpg",
target_size = (224, 224),
detector_backend = backends[4]
)
deepface 人脸特征提取
(6)人脸实时分析
objs = DeepFace.analyze(img_path = "img4.jpg",
actions = ['age', 'gender', 'race', 'emotion']
)
deepface 人脸实时分析
facenet - 是谷歌公司与 2015 年提出了基于深度学习的人脸识别系统。
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),使模型快速超目标方向优化。
CompreFace - 是领先的免费开源人脸识别系统。
Github :https://github.com/exadel-inc/CompreFace
CompreFace 官网
Exadel CompreFace是领先的免费开源人脸识别系统。该人脸识别算法可以被轻松集成到任何系统中,而无需事先掌握机器学习技能。
系统提供用于人脸识别、人脸验证、人脸检测、地标检测、面罩检测、头部姿势检测、年龄和性别识别的REST API;支持在CPU和GPU上运行模型; 该项目还包含角色管理系统,可以控制谁有权访问面部识别服务。
另外,CompreFace提供了docker-compose配置,方便以Docker的模式快速部署人脸服务。
CompreFace支持多种人脸识别服务,包括:
(1)人脸检测
人脸检测的使用场景很多,例如:收集商店在不同性别中受欢迎程度的统计数据;收集有关您的活动在哪些年龄段受欢迎的统计数据;获取地标信息,了解客户的视线;收集商店里有多少顾客的统计数据;确认所有顾客是否正确佩戴口罩。