0

我尝试添加以下代码,但最终出现表示函数的错误:

TypeError: stat: path 应该是字符串、字节、os.PathLike 或整数,而不是 dict

我知道表示函数的第一个参数应该是图像路径,但我提供了 MTCNN 检测的输出,即元数据。当给定图像中有多个人脸时,我无法弄清楚如何强制它进行多次嵌入

from mtcnn import MTCNN
import cv2

#pass1
img = cv2.cvtColor(cv2.imread("all_faces.jpeg"), cv2.COLOR_BGR2RGB)
detector = MTCNN()

faces=detector.detect_faces(img)
    
#pass2
embeddings = []
for face in faces:
   embedding = DeepFace.represent(face, model_name = 'Facenet', enforce_detection = False)
   embeddings.append(embedding)
4

1 回答 1

0

您的面部对象存储边界框和置信度分数。

face:  {'box': [412, 161, 593, 853], 'confidence': 0.9996218681335449, 'keypoints': {'left_eye': (579, 518), 'right_eye': (861, 518), 'nose': (735, 681), 'mouth_left': (575, 790), 'mouth_right': (883, 773)}}

您需要使用边界框信息一张一张地提取人脸。综上所述,你会用 face["box"] 找到检测到的人脸,然后将检测到的人脸传递给 deepface 库,如下所示。

from mtcnn import MTCNN
from deepface import DeepFace
import cv2

#pass1
img = cv2.cvtColor(cv2.imread("deepface/tests/dataset/img1.jpg"), cv2.COLOR_BGR2RGB)
detector = MTCNN()

faces=detector.detect_faces(img)

#pass2
embeddings = []
for face in faces:
   x, y, w, h = face["box"]
   detected_face = img[int(y):int(y+h), int(x):int(x+w)]

   embedding = DeepFace.represent(detected_face, model_name = 'Facenet', enforce_detection = False)
   embeddings.append(embedding)
于 2022-01-16T08:19:14.153 回答