使用 face_recognition 和 cv2 进行人脸识别:空编码错误 Python

Posted

技术标签:

【中文标题】使用 face_recognition 和 cv2 进行人脸识别:空编码错误 Python【英文标题】:Face recognition with face_recognition and cv2 : empty encoding error Python 【发布时间】:2021-12-26 00:28:58 【问题描述】:

我在运行 python 人脸识别脚本时遇到问题,它适用于某些图像,但在某些情况下,它给了我错误:

unface_encoding = face_recognition.face_encodings(faceimg)[0]IndexError: list index out of range

似乎unface_encoding 变量为空(?),但我不知道为什么这会发生在某些面孔而不是其他面孔以及如何解决它。我已经阅读了 face_recognition,但它并没有真正帮助我。

我是人脸识别(和 python)方面的初学者,所以任何建议或改进都会对我有所帮助。

这是我的代码:

import face_recognition
import cv2

known_image = face_recognition.load_image_file("known_faces/person.jpg")
unknown_image = face_recognition.load_image_file("unknown_faces/faces.jpg")

image = cv2.imread("unknown_faces/faces.jpg",cv2.IMREAD_COLOR)
face_locations = face_recognition.face_locations(unknown_image)

known_encoding = face_recognition.face_encodings(known_image)[0]

for face in face_locations:
    print(face)
    (a, b, c, d) = face
    faceimg = unknown_image[a:c, d:b]
    faceimg = cv2.cvtColor(faceimg, cv2.COLOR_BGR2RGB)

    unface_encoding = face_recognition.face_encodings(faceimg)[0]

    results = face_recognition.compare_faces([known_encoding], unface_encoding,0.5)
    print(results)
    if results == [True]:
        cv2.rectangle(image, (b, c), (d, a), (0, 128, 0), 2)
    elif results == [False]:
        cv2.rectangle(image, (b, c), (d, a), (0, 0, 255), 1)

cv2.imshow('base', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

如有英文错误,请见谅,

提前致谢

【问题讨论】:

【参考方案1】:

我没有广泛使用face_recognition,但我使用过 OpenCV 和其他面部识别库。通常返回的“人脸”是x, y, w, h 的边界框。矩形通常在x, y, x + w, y + h 之后创建。如果face_recognition 相似,则说明您的盒子制作不正确。试试

faceimg = unknown_image[a:a+c, b:b+d]

【讨论】:

以上是关于使用 face_recognition 和 cv2 进行人脸识别:空编码错误 Python的主要内容,如果未能解决你的问题,请参考以下文章

face_recognition库实现人脸识别demo

face_recognition库实现人脸识别demo

无法将 Keras Generator 图像传递给人脸识别

cv2 Qt Platform plugin "cocoa" not found error

使用 yolov4 人脸检测和 face_recognition

[深度学习] Python人脸识别库face_recognition使用教程