在 insightface
库中,FaceAnalysis
类返回的人脸分析结果包含多个字段,每个字段代表不同的分析信息。以下是各字段的含义:
-
det_score(检测分数):这是人脸检测的置信度分数,表示检测到的区域是人脸的概率。分数越高,表示检测结果越可靠。
-
bbox(边界框):这是人脸在图像中的位置和大小,以矩形框的形式表示。
bbox
是一个包含四个值的数组[x1, y1, x2, y2]
,表示矩形框的左上角和右下角的坐标。 -
landmark(关键点):这是人脸的关键点坐标,通常包括五个关键点,分别是两只眼睛、鼻尖和两嘴角的位置。关键点用于人脸对齐和姿态估计等任务。
-
embedding(嵌入向量):这是从人脸图像中提取的特征向量,通常用于人脸识别。
embedding
是一个固定长度的高维向量,用于表示人脸的特征,在比较两个人脸是否属于同一人时非常有用。 -
pose(姿态):这是人脸的姿态信息,通常包括三个角度:横滚角(roll)、俯仰角(pitch)和偏航角(yaw),表示人脸在三维空间中的旋转情况。
-
gender(性别):这是人脸的性别预测结果,通常为二值分类(男性或女性)。表示检测到的人脸的性别。
-
age(年龄):这是人脸的年龄预测结果,通常为一个整数,表示预测的人脸年龄。
以下是一个具体的示例,展示如何使用 FaceAnalysis
类并解释返回的每个字段:
from insightface.app import FaceAnalysis
import cv2
# 初始化FaceAnalysis对象
app = FaceAnalysis()
app.prepare(ctx_id=0, det_size=(640, 640))
# 读取图像
image_path = 'path_to_your_image.jpg'
img = cv2.imread(image_path)
# 进行人脸分析
faces = app.get(img)
# 打印分析结果
for face in faces:
print(f"Detection score: {face['det_score']:.2f}")
print(f"Bounding box: {face['bbox']}")
print(f"Landmarks: {face['landmark']}")
print(f"Embedding (first 5 values): {face['embedding'][:5]}") # 只打印前5个值
print(f"Pose (roll, pitch, yaw): {face['pose']}")
print(f"Gender: {'Male' if face['gender'] == 1 else 'Female'}")
print(f"Age: {face['age']}")
示例输出解释
假设输出结果如下:
Detection score: 0.98
Bounding box: [34.5, 45.3, 120.6, 180.2]
Landmarks: [[50.2, 70.1], [90.4, 70.1], [70.1, 100.3], [55.2, 140.5], [85.1, 140.5]]
Embedding (first 5 values): [0.01, -0.02, 0.03, 0.04, 0.05]
Pose (roll, pitch, yaw): [0.1, -0.2, 0.05]
Gender: Male
Age: 25
- Detection score: 0.98 表示检测到的区域是人脸的置信度很高。
- Bounding box: [34.5, 45.3, 120.6, 180.2] 表示人脸的边界框,左上角坐标为 (34.5, 45.3),右下角坐标为 (120.6, 180.2)。
- Landmarks: [[50.2, 70.1], [90.4, 70.1], [70.1, 100.3], [55.2, 140.5], [85.1, 140.5]] 表示人脸的五个关键点:两只眼睛、鼻尖和两嘴角的位置。
- Embedding (first 5 values): [0.01, -0.02, 0.03, 0.04, 0.05] 是从人脸中提取的特征向量的一部分,用于人脸识别。
- Pose (roll, pitch, yaw): [0.1, -0.2, 0.05] 表示人脸的姿态,分别为横滚角、俯仰角和偏航角。
- Gender: Male 表示检测到的人脸的性别是男性。
- Age: 25 表示检测到的人脸的年龄是25岁。