我在运行 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()
如有英文错误请见谅
提前致谢
我没有广泛使用
face_recognition
,但我使用过OpenCV和其他面部识别库。通常返回的“面”是 x, y, w, h
的边界框。矩形通常是在 x, y, x + w, y + h
之后创建的。如果 face_recognition
相似,则说明您的盒子制作不正确。尝试一下
faceimg = unknown_image[a:a+c, b:b+d]
根据这个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]