Python 使用opencv在人脸识别中写入新图像

Python 使用opencv在人脸识别中写入新图像,python,opencv,face-recognition,Python,Opencv,Face Recognition,嘿,伙计们,我想用人脸识别库写一个程序。其目的是将新人脸的图像剪辑保存到文件夹中,更新该文件夹以避免将同一人脸保存两次。 我希望程序在输入视频中遇到新面孔时将图像保存到文件夹中。但现在它似乎不起作用。有时它会将同一张脸的整个剪辑保存到我不想要的文件夹中。有人能帮我写这段代码吗。 我从youtube上看到的#Murtaza的教程中修改了这段代码 谢谢 import face_recognition import cv2 import os import numpy as np path = r

嘿,伙计们,我想用人脸识别库写一个程序。其目的是将新人脸的图像剪辑保存到文件夹中,更新该文件夹以避免将同一人脸保存两次。 我希望程序在输入视频中遇到新面孔时将图像保存到文件夹中。但现在它似乎不起作用。有时它会将同一张脸的整个剪辑保存到我不想要的文件夹中。有人能帮我写这段代码吗。 我从youtube上看到的#Murtaza的教程中修改了这段代码

谢谢

import face_recognition
import cv2
import os
import numpy as np


path = r"C:\Users\CHIJINDU\Desktop\KArtIntel"
images = []
class_names= []
myList = os.listdir(path)
for cl in myList:
    curImg= cv2.imread(f'{path}\{cl}')
    images.append(curImg)
    class_names.append(os.path.splitext(cl)[0])
print(class_names)

def find_encodings(images):
    encodelist = []
    for img in images:
        img = cv2.cvtColor(img,cv2.COLOR_BGR2RGB)
        encode= face_recognition.face_encodings(img)[0]
        encodelist.append(encode)
    return encodelist

encodelistKnown = find_encodings(images)
print(len(encodelistKnown))

cap = cv2.VideoCapture(r"C:\Users\CHIJINDU\Desktop\Elastic.mp4")

while True:
    success, img = cap.read()
    imgS = cv2.resize(img, (0,0), None, 0.25,0.25)
    imgS =cv2.cvtColor(imgS, cv2.COLOR_BGR2RGB)

    faceCurFrame= face_recognition.face_locations(imgS)
    encodesCurFrame= face_recognition.face_encodings(imgS, faceCurFrame)

    for encodeFace, faceloc in zip(encodesCurFrame, faceCurFrame):
        matches =  face_recognition.compare_faces(encodelistKnown,encodeFace)
        faceDis = face_recognition.face_distance(encodelistKnown,encodeFace)
        matchIndex= np.argmin(faceDis)

        i=0
        while not [matchIndex]:
            cv2.imwrite(r'C:\Users\CHIJINDU\Desktop\KArtIntel\KUDOS-J14{index}.jpg'.format(index=i), img)
            #fps = int(video_capture.get(cv2.CAP_PROP_FPS))
            #print(fps)
            i+=1

    # Display the resulting image
    cv2.imshow('Video', img)

    # Hit 'q' on the keyboard to quit!
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Release handle to the webcam
cap.release()
cv2.destroyAllWindows()

我们无法运行它-因此唯一的建议是:使用
print()
查看变量中的值以及执行代码的哪一部分。它被称为
“打印调试”
。或者学习如何使用real Debugger。在不使用[matchIndex]的情况下,如何使用
?这毫无意义。您应该有一些已经识别的面列表,如果匹配索引不在已识别的面中,请选中
,在写入文件后,您应该将其添加到列表
已识别的面中。附加(匹配索引)
谢谢@furas,我会尝试的。