当我尝试运行以下代码进行面部跟踪,图像拍摄和培训时,一切工作正常。但是,当我单击以跟踪实时图像时,它不起作用,并显示KeyError:'Id'。我该如何解决这个问题?
def TrackImages():
recognizer = cv2.face_LBPHFaceRecognizer.create()
recognizer.read("TrainingImageLabel\Trainner.yaml")
harcascadePath = "haarcascade_frontalface_default.xml"
faceCascade = cv2.CascadeClassifier(harcascadePath)
df = pd.read_csv("StudentDetails\studentDetails.csv")
cam = cv2.VideoCapture(0)
font = cv2.FONT_HERSHEY_SIMPLEX
col_names = ['Id', 'Name', 'Date', 'Time']
attendance = pd.DataFrame(columns=col_names)
while True:
ret, im = cam.read()
gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY)
faces = faceCascade.detectMultiScale(gray, 1.2, 5)
for (x, y, w, h) in faces:
cv2.rectangle(im, (x, y), (x + w, y + h), (255, 0, 0), 2)
I, conf = recognizer.predict(gray[y:y+h, x:x+w])
if (conf < 50):
ts = time.time()
date = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d')
timeStamp = datetime.datetime.fromtimestamp(ts).strftime('%H:%M,%S')
aa = df.loc[df['Id'] == I]['Name'].values
tt = str(I) + "-" + aa
attendance.loc[len(attendance)] = [I, aa, date, timeStamp]
else:
I = 'Unknown'
tt = str(I)
if (conf > 75):
noOfFile = len(os.listdir("ImagesUnknown")) + 1
cv2.imwrite("ImagesUnknown\Image" + str(noOfFile) + ".jpg", im[y:y + h, x:x + w])
cv2.putText(im, str(tt), (x, y + h), font, 1, (255, 255, 255), 2)
attendance = attendance.drop_duplicates(subset=['Id'], keep='first')
cv2.imshow('im', im)
if (cv2.waitKey(1) == ord('q')):
break
ts = time.time()
date = datetime.datetime.fromtimestamp(ts).strftime('%Y-%m-%d')
timeStamp = datetime.datetime.fromtimestamp(ts).strftime('%H:%M,%S')
Hour, Minute, Second = timeStamp.split(":")
fileName = "Attendance\Attendance_" + date + "_" + Hour + "-" + Minute + "-" + Second + ".csv"
attendance.to_csv(fileName, index=False)
cam.release()
cv2.destroyAllWindows()
#print(attendance)
res = attendance
message2.configure(text=res)