我目前正在使用OpenCV,而tryna自己进行人脸识别。
我在youtube上观看了几段视频,最后将它们写成代码,但是每次运行该程序时,它总是会显示
print(labels[id_])
KeyError: 1
几天来我一直在寻找如何解决Keyerror问题的方法,但我找不到真正的答案。
这是代码
labels = {"person_name": 1}
with open("labels.pickle", 'rb') as f:
og_labels = pickle.load(f)
labels = {v: k for k, v in og_labels.items()}
cap = cv2.VideoCapture(0)
while (True):
ret, frame = cap.read()
gray = cv2.cvtColor(frame, cv2.COLOR_BGR2GRAY)
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5)
for (x, y, w, h) in faces:
id_,conf = recognizer.predict(roi_gray)
if conf >= 4 and conf <= 85:
if id_ == 1:
print(id_)
print(labels[id_])
我不知道这是否有问题,因为我有一个面部训练文件(可以运行)。如果上面的代码没有问题,我认为应该是一个面部训练问题。 我可以提供更多代码。 当然,如果您有相关视频,也可以向我推荐。
答案 0 :(得分:0)
几件事:
labels = {"person_name": 1}
覆盖labels = {v: k for k, v in og_labels.items()}
。 labels = {"person_name": 1}
的目的是什么?labels[1]
,它与labels['1']
不同。为什么不继续在pprint
之前打印/ labels
的内容print(labels[id_])
并查看实际的键是什么?