从图像中的多个面部中选择一个面部检测器

时间:2019-05-24 14:18:39

标签: python face-detection

我已经成功地在python中实现了人脸检测,该代码可以检测图像中的所有人脸。

我有名人数据集,在代码返回所有人脸检测(在所有人脸周围绘制矩形)之后,我想选择其中一个要在下一步中处理。我按照下面的代码来检测人脸。

detector = dlib.get_frontal_face_detector()
image = cv2.imread(im)
rects = detector(image)

for (i, rect) in enumerate(rects):
    (x, y, w, h) = face_utils.rect_to_bb(rect)
    cv2.rectangle(image, (x, y), (x + w, y + h), (0, 0, 255), 2)
    print("Draw Red rectangle around face")

cv2.imshow("Output", image)
cv2.waitKey(0)
cv2.destroyAllWindows()

上面的代码显示图像的每个面部周围都有矩形。显示图像并显示检测器后,我想选择其中之一。我该怎么做,如果存在多个面孔,请问有人可以帮助我选择其中之一。非常感谢。

1 个答案:

答案 0 :(得分:0)

您可以使用它来获得最接近的面孔

def sorted_faces(faces):
area = lambda x,y,w,h:(w-x)*(h-y)
i = 0
face_dict = {}
l_ = []
if len(faces) > 0:
    for face in faces:
        i+=1
        x = face.left()
        y = face.top()
        w = face.right()
        h = face.bottom()
        my_area =  area(x,y,w,h)
        face_dict[f"{my_area}"] = i

    l_ = [int(i) for i in face_dict.keys()]
    return face_dict[f"{np.array(l_).max()}"]

如果您想让面部不被发现,请使用此代码

x = face.left()
        y = face.top()
        w = face.right()
        h = face.bottom()
        face_image = frame[y:h,x:w]