在使用目标识别训练时。出现了以下问题,训练集为lfw
File "train_face.py", line 41, in <module>
recognizer.train(x_train, np.array(y_labels))
cv2.error: OpenCV(4.5.4) /tmp/pip-wheel-4s1eeqwm/opencv-contrib-python_94a16b66d4594a43bcabaeb968fd51a1/opencv/modules/core/src/matrix.cpp:250: error: (-215:Assertion failed) s >= 0 in function 'setSize'
以下是我的代码
import os
import cv2
import numpy as np
import pickle
import face_recognition
import matplotlib.pyplot as plt
current_id = 0
label_ids = {}
x_train = []
y_labels = []
loss_values = []
BASE_DIR = os.path.dirname(os.path.abspath(__file__))
image_dir = os.path.join(BASE_DIR,"dataset")
for root,dirs,files in os.walk(image_dir):
for file in files:
path = os.path.join(root, file)
image = face_recognition.load_image_file(path)
face_locations = face_recognition.face_locations(image)
face_encodings = face_recognition.face_encodings(image, face_locations)
label = os.path.basename(root)
if not label in label_ids:
label_ids[label] = current_id
current_id += 1
id_ = label_ids[label]
print(label_ids)
for face_encoding in face_encodings:
x_train.append(face_encoding)
y_labels.append(id_)
#print(x_train)
print(y_labels)
with open ("label.pickle","wb") as f:
pickle.dump(label_ids, f)
recognizer = cv2.face.LBPHFaceRecognizer_create()
recognizer.train(x_train, np.array(y_labels))
recognizer.save("mytrainer.yml")
loss_values = recognizer.getTrainStatus()
iterations = [x['iteration'] for x in loss_values]
losses = [x['loss'] for x in loss_values]
plt.plot(iterations, losses)
plt.xlabel('Iteration')
plt.ylabel('Loss')
plt.show()