opencv 索引错误:列表索引超出范围,face_recognition

ki1q1bka  于 2023-03-09  发布在  其他
关注(0)|答案(4)|浏览(292)

我使用开放式简历和人脸识别一起,然而这行代码:

biden_encoding = face_recognition.face_encodings(known_image)[0]

显示以下错误:

IndexError: list index out of range

我已经阅读了这个错误,大多数人认为这意味着face_recognition没有检测到帧中的任何人脸。但是,open cv在同一帧中检测到人脸,所以我不确定face_recognition是否确实没有检测到任何人脸,或者我是否因为其他原因收到了IndexError?
获取问题背景所需的所有代码:

check, frame = video.read()
faceCascade = cv2.CascadeClassifier(
    'C:\\Users\\Astroid\\Desktop\\face detection software\\data\\haarcascade_frontalface_alt.xml')

frame = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)

faces = faceCascade.detectMultiScale(
    frame,
    scaleFactor=1.2,
    minNeighbors=5,
)

for x, y, w, h in faces:
    img = cv2.rectangle(frame, (x, y), (x + w, y + h), (255, 0, 0), 1)

    if len(os.listdir("C:\\Users\\Astroid\\Desktop\\face detection software\\saved faces\\")) == 0:

        cv2.imwrite(
            "C:\\Users\\Astroid\\Desktop\\face detection software\\saved faces\\" + "1 faces.jpg", cropped)
    else:
        cv2.imwrite(
            "C:\\Users\\Astroid\Desktop\\face detection software\\unknown faces\\" + " unknown_faces.jpg", cropped)

        known_image = face_recognition.load_image_file(
            "C:\\Users\\Astroid\\Desktop\\face detection software\\saved faces\\" + "1 faces.jpg")

        unknown_image = face_recognition.load_image_file(
           "C:\\Users\\Astroid\Desktop\\face detection software\\unknown faces\\" + " unknown_faces.jpg"

        biden_encoding = face_recognition.face_encodings(known_image)[0]
        print(biden_encoding)#

        unknown_encoding = face_recognition.face_encodings(unknown_image)[0]
        print(unknown_encoding)#

        results = face_recognition.compare_faces([biden_encoding], [unknown_encoding])

        if results >= (60):
            shutil.move(
                "C:\\Users\\Astroid\Desktop\\face detection software\\unknown faces\\" + " unknown_faces.jpg",
                "C:\\Users\\Astroid\\Desktop\\face detection software\\saved faces\\" + (face_num) + (" faces.jpg"))
        else:
            pass
kupeojn6

kupeojn61#

这意味着face_recognition模块无法在图像中找到任何人脸。face_recognition.face_encodings(known_image)基本上返回了在照片中找到的所有人脸的列表。现在,您将使用索引[0]来获取第一个找到的人脸。然而,当图像中没有人脸时,您将尝试获取一个不存在的索引,因此使用IndexError
唯一真实的的解决办法是使用新的图像。face_recognition找不到任何人脸,所以要么你可以自己制作算法来找人脸,这是我强烈不推荐的,要么你使用不同的图像。

qq24tv8q

qq24tv8q2#

这意味着dlib人脸检测器无法检测到传入图像中的人脸。您可以添加一个try异常块,如下所示:

try:
    image_to_be_matched_encoded = face_recognition.face_encodings(known_image)[0]
except IndexError as e:
    print(e)
    sys.exit(1) # stops code execution in my case you could handle it differently

更多关于这一点可以在这里找到:https://github.com/ageitgey/face_recognition/issues/100#issuecomment-307590846

2exbekwf

2exbekwf3#

我解决了这个问题,通过改变图像为jpeg,这意味着你应该包括一个干净的质量,这样一个图像与jpeg类型,问候

vqlkdk9b

vqlkdk9b4#

我正在加载一个动画图像(它是在.jpg格式,但动画图像),因此我得到这个错误。我改变了图像到常规的非动画图像,这一次相同的代码工作没有任何错误。

相关问题