我在cv2人脸识别器中遇到了一个错误,学习模型需要不止一个样本。在函数“cv::face::LBPH::train”中

2024-04-20 09:08:19 发布

您现在位置:Python中文网/ 问答频道 /正文

正如您所看到的,这是一个人脸识别器。我犯了这个错误

***

文件“c:\Users\admin\Desktop\Vigyantram\faces\script7.py”,第30行,在model.train(图像、标签)cv2中。错误:OpenCV(4.5.1)c:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-5rb\u 9df3\OpenCV\u contrib\modules\face\src\lbph\u faces.cpp:362:错误:(-210:不支持的格式或格式组合)给出了空的训练数据。学习模型需要多个示例。在函数“cv::face::LBPH::train”中

***

想知道如何解决这个问题。我也查看了其他帖子,但没有找到解决方案。这是我的密码-

# It helps in identifying the faces 
import cv2, sys, numpy, os 
size = 4
haar_file = 'haarcascade_frontalface_default.xml'
datasets = 'datasets'
  
# Part 1: Create fisherRecognizer 
print('Recognizing Face Please Be in sufficient light...') 
  
# Create a list of images and a list of corresponding names 
(images, lables, names, id) = ([], [], {}, 0) 
for (subdirs, dirs, files) in os.walk(datasets): 
    for subdir in dirs: 
        names[id] = subdir 
        subjectpath = os.path.join(datasets, subdir) 
        for filename in os.listdir(subjectpath): 
            path = subjectpath + '/' + filename 
            lable = id
            images.append(cv2.imread(path, 0)) 
            lables.append(int(lable)) 
        id += 1
(width, height) = (130, 100) 
  
# Create a Numpy array from the two lists above 
(images, lables) = [numpy.array(lis) for lis in [images, lables]] 
  
# OpenCV trains a model from the images 
# NOTE FOR OpenCV2: remove '.face' 
model = cv2.face.LBPHFaceRecognizer_create() 
model.train(images, lables) 
  
# Part 2: Use fisherRecognizer on camera stream 
face_cascade = cv2.CascadeClassifier(haar_file) 
webcam = cv2.VideoCapture(0) 
while True: 
    (_, im) = webcam.read() 
    gray = cv2.cvtColor(im, cv2.COLOR_BGR2GRAY) 
    faces = face_cascade.detectMultiScale(gray, 1.3, 5) 
    for (x, y, w, h) in faces: 
        cv2.rectangle(im, (x, y), (x + w, y + h), (255, 0, 0), 2) 
        face = gray[y:y + h, x:x + w] 
        face_resize = cv2.resize(face, (width, height)) 
        # Try to recognize the face 
        prediction = model.predict(face_resize) 
        cv2.rectangle(im, (x, y), (x + w, y + h), (0, 255, 0), 3) 
  
        if prediction[1]<500: 
  
           cv2.putText(im, '% s - %.0f' % 
(names[prediction[0]], prediction[1]), (x-10, y-10),  
cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0)) 
        else: 
          cv2.putText(im, 'not recognized',  
(x-10, y-10), cv2.FONT_HERSHEY_PLAIN, 1, (0, 255, 0)) 
  
    cv2.imshow('OpenCV', im) 
      
    key = cv2.waitKey(10) 
    if key == 27: 
        break

我不知道该怎么办


Tags: theinidformodelnamesoscv2