You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用DeepFace配合FaceNet如何获取单图中多人脸的对应嵌入向量

问题原因

deepface.commons.functions.preprocess_face 方法默认只返回检测到的单张最高置信度人脸的预处理结果,因此你当前只能拿到1个嵌入向量,无法匹配图中实际存在的4张人脸。

解决方案

修改调用参数并批量预测所有检测到的人脸,步骤如下:

  • 调用preprocess_face时新增return_all_faces=True参数,开启多人脸返回支持,返回值为形状(人脸数量, 目标高度, 目标宽度, 通道数)的numpy数组
  • 直接将返回的多个人脸批量输入FaceNet模型预测,即可得到对应顺序的所有人脸嵌入向量
  • 若检测精度不足,可将检测器后端替换为backends[4]即retinaface,检测准确率高于mtcnn
修改后参考代码
import deepface as DeepFace
from elasticsearch import Elasticsearch
from deepface.basemodels import Facenet
import os
from deepface.commons import functions

model = Facenet.loadModel()
target_size = (160, 160)
embedding_size = 128
backends = ['opencv', 'ssd', 'dlib', 'mtcnn', 'retinaface']

target_path = "/home/niveus/PycharmProjects/deepface-elastic-research/deepface/align_img/deep_aku.jpg"
# 新增return_all_faces=True返回所有检测到的人脸
target_imgs = functions.preprocess_face(
    target_path, 
    target_size = target_size,
    detector_backend = backends[3],
    return_all_faces = True
)
# 批量预测得到所有人脸嵌入,形状为(4,128)
target_embeddings = model.predict(target_imgs)
print(target_embeddings.shape)
print("所有嵌入向量:", target_embeddings)

# 单独取第i个人脸的嵌入用target_embeddings[i]即可
可选扩展

如果需要同时获取每个人脸在原图中的坐标、置信度等元信息,可以先调用functions.detect_faces接口拿到所有人脸的检测结果,再逐个预处理生成嵌入即可。

内容的提问来源于stack exchange,提问作者VISIONEST

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 03:45:05