DeepFace基础介绍
DeepFace是一个专为Python设计的轻量级人脸识别和人脸属性分析框架,能够进行年龄、性别、情感以及种族的识别。这个库集成了多个先进的人脸识别模型,包括VGG-Face、Google FaceNet、OpenFace、Facebook DeepFace和DeepIDArcFaceDlib。这些模型的存在使得DeepFace在人脸识别上的准确率高达97%,并被证实在人脸检测方面优于一般的人脸识别框架。
DeepFace还具备人脸对齐的功能,这是为了提高识别准确性而设置的一步操作。通过对检测到的人脸进行对齐操作,可以消除姿态、光照和表情等因素对识别结果的影响。
DeepFace的项目文档地址
Github地址https://github.com/serengil/deepface
DeepFace安装
安装DeepFace的方法非常简单,你只需要通过pip工具安装即可。具体来说,你可以在命令行中输入以下命令进行安装:
# pip install deepface
DeepFace的方法参数介绍
verify方法
DeepFace库中的verify方法用于验证两张脸部图片是否属于同一个人。该方法的输入是两个面部图像,输出是一个布尔值,表示这两个图像是否来自同一个人。
'''
Args:
img1_path: 第一张图片的路径。
img2_path: 第二张图片的路径。
model_name: 使用的人脸识别模型的名称,默认为"VGG-Face"。
detector_backend: 使用的检测器后端的名称,默认为"opencv"。
distance_metric: 用于计算相似度的度量方法,默认为"cosine"。
enforce_detection: 是否强制检测人脸,默认为True。
align: 是否对齐人脸,默认为True。
normalization: 归一化方法,默认为"base"。
'''
dfs = DeepFace.verify(
img1_path="img1",
img2_path ="img2",
model_name="VGG-Face",)
detector_backend="opencv",
distance_metric="cosine",
enforce_detection=True,
align=True,
normalization="base")
'''
Returns:
"verified": 布尔值,表示两张图片是否属于同一个人。如果距离小于等于阈值,则返回True,否则返回False。
"distance": 浮点数,表示两张图片之间的距离。
"threshold": 浮点数,表示用于判断两张图片是否属于同一个人的阈值。
"model": 字符串,表示使用的人脸识别模型的名称。
"detector_backend": 字符串,表示使用的检测器后端的名称。
"similarity_metric": 字符串,表示用于计算相似度的度量方法。
"facial_areas": 字典,包含两个键值对,分别表示两张图片的人脸区域信息。键为"img1"和"img2",值为对应的人脸区域数据。
"time": 浮点数,表示执行该段代码所花费的时间,保留两位小数。
'''
resp_obj = {
"verified": distance <= threshold,
"distance": distance,
"threshold": threshold,
"model": model_name,
"detector_backend": detector_backend,
"similarity_metric": distance_metric,
"facial_areas": {"img1": facial_areas[0], "img2": facial_areas[1]},
"time": round(toc - tic, 2),
}
find方法
deepface
库中的 find
方法用于在给定的目录中查找与查询人脸图像最相似的图像。返回一个包含最相似图像信息的字典。
'''
Args:
img_path:要查找的图像的路径。
db_path:包含人脸数据库的文件夹路径。
model_name:使用的人脸识别模型,默认为"VGG-Face"。
distance_metric:用于计算相似度的距离度量方法,默认为"cosine"。
enforce_detection:是否强制检测人脸,默认为True。
detector_backend:用于检测人脸的后端,默认为"opencv"。
align:是否对齐人脸,默认为True。
normalization:归一化方法,默认为"base"。
silent:是否在执行过程中保持静默,默认为False。
'''
dfs = DeepFace.find(
img_path,
db_path,
model_name="VGG-Face",
distance_metric="cosine",
enforce_detection=True,
detector_backend="opencv",
align=True,
normalization="base",
silent=False
)
'''
Returns:
返回值是一个包含匹配信息的字典。该字典包含以下字段:
'identity' (字符串):表示最相似图像的身份或标识。
'verified' (布尔值):表示是否找到了匹配的图像。如果为 True,则表示找到了匹配;如果为 False,则表示未找到匹配。
'distance' (浮点数):表示查询图像与找到的最相似图像之间的距离。
'''
extract_faces方法
extract_faces 用于对图像进行特征分析,提取头像坐标。
'''
Args:
img_path:输入图像的路径。
target_size:目标大小,默认为(224, 224)。
detector_backend:检测器后端,默认为"opencv"。
enforce_detection:是否强制检测人脸,默认为True。
align:是否对齐人脸,默认为True。
grayscale:是否将图像转换为灰度图,默认为False。
'''
dfs= DeepFace.extract_faces(
img_path,
target_size=(224, 224),
detector_backend="opencv",
enforce_detection=True,
align=True,
grayscale=False,
)
'''
Returns:
返回一个包含人脸图像、人脸区域和置信度的字典列表。
face 键对应的值是提取的人脸图像
facial_area 键对应的值是人脸在原始图像中的位置和大小
confidence 键对应的值是人脸检测的置信度
'''
analyze方法
analyze方法函数的作用是分析图像中的人脸,并返回关于人脸的各种属性,如情绪、年龄、性别和种族。
'''
Args:
img_path:图像文件的路径。
actions:一个元组,包含要分析的属性名称。默认值为("emotion", "age", "gender", "race")。
enforce_detection:布尔值,表示是否强制检测人脸。默认值为True。
detector_backend:字符串,表示用于检测人脸的后端库。默认值为"opencv"。
align:布尔值,表示是否对齐人脸。默认值为True。
silent:布尔值,表示是否在执行过程中保持静默。默认值为False。
'''
dfs = DeepFace.analyze(
img_path,
actions=("emotion", "age", "gender", "race"),
enforce_detection=True,
detector_backend="opencv",
align=True,
silent=False,
)
'''
Returns:
"region":人脸在图像中的位置和大小,包括x坐标、y坐标、宽度和高度。
"age":人脸的年龄预测值。
"dominant_gender":人脸的主要性别,可能是"Woman"(女性)或"Man"(男性)。
"gender":一个字典,包含了各个性别的概率。
"dominant_emotion":人脸的主要情绪,可能是"neutral"(中性)、"sad"(悲伤)、"angry"(愤怒)、"surprise"(惊讶)、"fear"(恐惧)、"happy"(快乐)或"disgust"(厌恶)。
"emotion":一个字典,包含了各个情绪的概率。
"dominant_race":人脸的主要种族,可能是"indian"(印度裔)、"asian"(亚裔)、"latino hispanic"(拉丁裔西班牙裔)、"black"(黑人)、"middle eastern"(中东裔)或"white"(白人)。
"race":一个字典,包含了各个种族的概率。
'''
总结
deepface
库是一个用于人脸识别和面部属性分析的 Python 库。以下是该库的一些关键特点和功能总结:
-
支持多种模型:
deepface
支持多种经典的人脸识别模型,包括 VGG-Face、Facenet、Facenet512、OpenFace、DeepFace、DeepID、Dlib、ArcFace、SFace 等。 -
人脸检测: 提供不同的人脸检测器后端,包括 opencv、retinaface、mtcnn、ssd、dlib 和 mediapipe。
-
距离度量: 提供不同的距离度量标准,包括 cosine、euclidean 和 euclidean_l2。
-
实时人脸识别: 提供了实时人脸识别功能,可以应用于网络摄像头或视频流。
-
面部属性分析: 支持对人脸进行面部属性分析,如性别、年龄、种族等。
-
集成了多个模型: 能够以简单的方式比较不同模型的性能,以便选择最适合特定任务的模型。
-
简化的 API 接口: 提供简单易用的 API 接口,方便用户进行人脸识别和分析。
-
支持图像和视频: 既可以处理静态图像,也可以应用于实时视频流。