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