我目前正在学习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_])我不知道这是不是一个问题,因为我有一个人脸训练文件(可以运行)。如果上面的代码没有问题,我认为这应该是一个人脸训练问题。我可以提供更多的代码。当然,如果你有相关的视频,你也可以推荐给我。
发布于 2019-04-27 10:16:20
有几件事:
labels = {v: k for k, v in og_labels.items()}覆盖labels = {"person_name": 1}。labels = {"person_name": 1}labels[1]的目的是什么,这与labels['1']不同。为什么不在print(labels[id_])之前打印/pprint labels的内容,看看实际的密钥是什么?https://stackoverflow.com/questions/55876644
复制相似问题