项目简介
DeepFace是一个轻量级的Python人脸识别和面部属性分析(年龄、性别、情感和种族)框架。它是一个混合人脸识别框架,包含最先进的模型:VGG-Face 、 FaceNet 、 OpenFace 、 DeepFace 、 DeepID 、 ArcFace 、 Dlib 、 SFace和GhostFaceNet 。
该框架的准确度甚至超过了人类在面部识别任务中的水平(人类识别准确率为97.53%)。
安装
安装 deepface 最简单的方法是从PyPI
下载它。它将安装库本身及其先决条件。
pip install deepface
或者,您也可以从其源代码安装 deepface。源代码可能具有 pip 版本中尚未发布的新功能。
clone https://github.com/serengil/deepface.git git
cd deepface
pip install -e .
安装该库后,您将能够导入它并使用其功能。
from deepface import DeepFace
现代面部识别管道
现代人脸识别流程由 5 个常见阶段组成:检测、对齐、标准化、表示和验证。虽然 DeepFace 在后台处理所有这些常见阶段,但您无需深入了解其背后的所有流程。您只需使用一行代码即可调用其验证、查找或分析功能。
人脸验证
此功能可验证人脸对是同一个人还是不同人。它期望精确的图像路径作为输入。也欢迎传递 numpy 或 base64 编码图像。然后,它将返回一个字典,您应该仅检查其经过验证的密钥。
result = DeepFace.verify(
img1_path = "img1.jpg",
img2_path = "img2.jpg",
)
人脸识别
人脸识别需要多次进行人脸验证。在这里,deepface 有一个开箱即用的查找功能来处理此操作。它将在数据库路径中查找输入图像的标识,并将返回 pandas 数据帧列表作为输出。同时,面部数据库的面部嵌入存储在pickle文件中,以便下次更快地搜索。结果将是源图像中出现的面部尺寸。此外,数据库中的目标图像也可以有多个面孔。
嵌入
人脸识别模型基本上将面部图像表示为多维向量。有时,您直接需要这些嵌入向量。DeepFace 带有专用的表示功能。表示函数返回嵌入列表。结果将是图像路径中出现的面部尺寸。
embedding_objs = DeepFace.represent(
img_path = "img.jpg"
)
该函数返回一个数组作为嵌入。嵌入数组的大小会根据模型名称而有所不同。例如,VGG-Face 是默认模型,它将面部图像表示为 4096 维向量。
for embedding_obj in embedding_objs:
embedding = embedding_obj["embedding"]
assert isinstance(embedding, list)
assert (
model_name == "VGG-Face"
and len(embedding) == 4096
)
这里,嵌入也用 4096 个槽水平绘制。每个槽对应嵌入向量中的一个维度值,维度值在右侧的颜色栏中解释。与二维条形码类似,垂直尺寸在插图中不存储任何信息。
人脸识别模型
DeepFace 是一个混合人脸识别包。它目前包含许多最先进的人脸识别模型: VGG-Face
、 FaceNet
、 OpenFace
、 DeepFace
、 DeepID
、 ArcFace
、 Dlib
、 SFace
和GhostFaceNet
。默认配置使用VGG-Face模型。
models = [
"VGG-Face",
"Facenet",
"Facenet512",
"OpenFace",
"DeepFace",
"DeepID",
"ArcFace",
"Dlib",
"SFace",
"GhostFaceNet",
]
#face verification
result = DeepFace.verify(
img1_path = "img1.jpg",
img2_path = "img2.jpg",
model_name = models[0],
)
#face recognition
dfs = DeepFace.find(
img_path = "img1.jpg",
db_path = "C:/workspace/my_db",
model_name = models[1],
)
#embeddings
embedding_objs = DeepFace.represent(
img_path = "img.jpg",
model_name = models[2],
)
相似度
人脸识别模型是常规的卷积神经网络,它们负责将人脸表示为向量。我们期望同一个人的一对面孔应该比不同人的一对面孔更相似。
相似度可以通过不同的度量来计算,例如余弦相似度、欧几里德距离或 L2 归一化欧几里德距离。默认配置使用余弦相似度。根据实验,没有任何距离度量比其他距离度量表现更好。
metrics = ["cosine", "euclidean", "euclidean_l2"]
#face verification
result = DeepFace.verify(
img1_path = "img1.jpg",
img2_path = "img2.jpg",
distance_metric = metrics[1],
)
#face recognition
dfs = DeepFace.find(
img_path = "img1.jpg",
db_path = "C:/workspace/my_db",
distance_metric = metrics[2],
)
面部属性分析
DeepFace还配备了强大的面部属性分析模块,包括age
、 gender
、 facial expression
(包括愤怒、恐惧、中立、悲伤、厌恶、快乐和惊讶)和race
(包括亚洲人、白人、中东人、印度人、拉丁裔和黑人)预测。结果将是源图像中出现的面部尺寸。
objs = DeepFace.analyze(
img_path = "img4.jpg",
actions = ['age', 'gender', 'race', 'emotion'],
)
年龄模型得到±4.65 MAE;正如教程中提到的,性别模型的准确度为 97.44%,精确度为 96.29%,召回率为 95.05%。
人脸检测和对齐- Demo
人脸检测和对齐是现代人脸识别流程的重要早期阶段。实验表明,检测将人脸识别准确率提高了 42%,而对齐则将其提高了 6%。 OpenCV
、 Ssd
、 Dlib
、 MtCnn
、 Faster MtCnn
、 RetinaFace
、 MediaPipe
、 Yolo
、 YuNet
和CenterFace
检测器被包裹在 deepface 中。
所有 Deepface 函数都接受可选的检测器后端并对齐输入参数。您可以使用这些参数在这些检测器和对齐模式之间切换。 OpenCV 是默认检测器,默认情况下对齐处于打开状态。
项目链接
扫码加入技术交流群,备注「开发语言-城市-昵称」
合作请注明
关注「GitHubStore」公众号