0

我正在为人脸识别项目使用深度人脸库。就我而言,我想使用 facenet 检测测试图像中存在的多个人脸。当我应用 deepface 预处理函数时,我看到它只生成一个嵌入,在给定的图像中存在四个面。我怎样才能得到每张脸各自的嵌入?

**my code looks:**
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"
target_img = functions.preprocess_face(target_path, target_size = target_size,detector_backend = backends[3])
target_embedding = model.predict(target_img)[0] #[0]
print(target_embedding.shape)
print("embeddings",target_embedding)
4

2 回答 2

0

Deepface 强制您在图像中使用单面。但是您仍然可以处理多个面孔。

1- 用retinaface 提取人脸

#!pip install retina-face
from retinaface import RetinaFace
faces = RetinaFace.extract_faces(img_path = "img.jpg", align = True)

2- 将提取的面传递给 deepface

#!pip install deepface
from deepface import DeepFace

embeddings = []
for face in faces:
   embedding = DeepFace.represent(img_path = face, model_name = 'Facenet', enforce_detection = False)
   embeddings.append(embedding)

诀窍是将强制检测参数设置为 false,因为我们会将已检测到的人脸传递给 deepface。

于 2021-12-02T12:41:50.777 回答
0

您还可以使用 MTCNN 代替 RetinaFace。RetinaFace 很棒,但速度很慢。相反,mtcnn 具有高性能和速度。

from mtcnn import MTCNN
from deepface import DeepFace
import cv2

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

detections = detector.detect_faces(img)

embeddings = []
for detection in detections:
   confidence = detection["confidence"]
   if confidence > 0.90:
      x, y, w, h = detection["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)

retinaface 和 mtcnn 都可以找到面部标志,例如眼睛。这样,deepface 可以在背景中对齐人脸,并显着提高嵌入的质量。然而,opencv 并不擅长寻找地标。这就是为什么,如果你要使用 opencv,它的分数可能会因为对齐而低。

于 2022-01-16T08:24:50.150 回答