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

问题描述 投票:0回答:2

我在运行 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()

如有英文错误请见谅

提前致谢

python opencv face-recognition
2个回答
0
投票

我没有广泛使用

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

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

0
投票

根据这个issue,如果你已经有脸部位置,则需要指定脸部位置

face_encodings()

with = faceimg.shape[1]
height = faceimg.shape[0]
unface_encoding = face_recognition.face_encodings(faceimg, known_face_locations=[(0, width, height, 0)][0]
© www.soinside.com 2019 - 2024. All rights reserved.