无所不能先进的混合型人脸识别工具包DeepFace!

文摘   2024-11-13 11:29   湖北  

项目简介

DeepFace是一个轻量级的Python人脸识别和面部属性分析(年龄、性别、情感和种族)框架。它是一个混合人脸识别框架,包含最先进的模型:VGG-Face 、 FaceNet 、 OpenFace 、 DeepFace 、 DeepID 、 ArcFace 、 Dlib 、 SFace和GhostFaceNet 。


该框架的准确度甚至超过了人类在面部识别任务中的水平(人类识别准确率为97.53%)。


安装 

安装 deepface 最简单的方法是从PyPI下载它。它将安装库本身及其先决条件。

$ pip install deepface

或者,您也可以从其源代码安装 deepface。源代码可能具有 pip 版本中尚未发布的新功能。

$ git clone https://github.com/serengil/deepface.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 、 SFaceGhostFaceNet 。默认配置使用VGG-Face模型。

models = [  "VGG-Face",   "Facenet",   "Facenet512",   "OpenFace",   "DeepFace",   "DeepID",   "ArcFace",   "Dlib",   "SFace",  "GhostFaceNet",]
#face verificationresult = DeepFace.verify( img1_path = "img1.jpg", img2_path = "img2.jpg", model_name = models[0],)
#face recognitiondfs = DeepFace.find( img_path = "img1.jpg", db_path = "C:/workspace/my_db", model_name = models[1],)
#embeddingsembedding_objs = DeepFace.represent( img_path = "img.jpg", model_name = models[2],)


相似度

人脸识别模型是常规的卷积神经网络,它们负责将人脸表示为向量。我们期望同一个人的一对面孔应该比不同人的一对面孔更相似。


相似度可以通过不同的度量来计算,例如余弦相似度、欧几里德距离或 L2 归一化欧几里德距离。默认配置使用余弦相似度。根据实验,没有任何距离度量比其他距离度量表现更好。

metrics = ["cosine", "euclidean", "euclidean_l2"]
#face verificationresult = DeepFace.verify( img1_path = "img1.jpg", img2_path = "img2.jpg", distance_metric = metrics[1],)
#face recognitiondfs = 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 、 YuNetCenterFace检测器被包裹在 deepface 中。

所有 Deepface 函数都接受可选的检测器后端并对齐输入参数。您可以使用这些参数在这些检测器和对齐模式之间切换。 OpenCV 是默认检测器,默认情况下对齐处于打开状态。


项目链接


扫码加入技术交流群,备注开发语言-城市-昵称

合作请注明


 

关注「GitHubStore」公众号


GitHubStore
分享有意思的开源项目
 最新文章