OpenCV错误:-215:声明失败s> = 0在人脸识别程序中的函数'cv :: setSize'中:Python

问题描述

我已经编写了两个脚本main_program.pydetector.py来执行面部检测和识别。我首先训练分类器,然后使用它来识别人脸。但是培训没有进行,因为程序退出并出现错误。

这是两个脚本的代码: 对于main_program.py:-

import cv2
import os
import numpy as np
import detector as dec

test_img = cv2.imread(r'C:\Users\JasonPC\Desktop\FaceDetection\Test Images\j1.jpg')
faces_detected,gray_img = dec.faceDetect(test_img)
print('Faces Detected: ',faces_detected)

faces,faceID = dec.labels_for_training_data(r'C:\Users\JasonPC\Desktop\FaceDetection\Resources')
face_recognizer = dec.train_classifier(faces,faceID)
name = {0:'Obama',1:'Trump'}

for faces in faces_detected:
    (x,y,w,h) = face
    roi_gray = gray_img[y : y + h,x : x + h]
    label,confidence = face_recognizer.predict(roi_gray)
    confidence('confidence: ',confidence)
    print('label: ',label)
    dec.draw_rect(test_img,face)
    predicted_name = name[label]
    dec.put_text(test_img,predicted_name,x,y)
result_img = cv2.resize(test_img,(200,200))
cv2.imshow('Face Detection',result_img)
cv2.waitKey(0)
cv2.destroyAllWindows()

这里是detector.py

的代码
import cv2
import os
import numpy as np

def faceDetect(img):
    gray_img = cv2.cvtColor(img,cv2.COLOR_BGR2GRAY)
    classifier = cv2.CascadeClassifier(r'C:\Users\JasonPC\Documents\CodeVault\Python\FaceDetection\Classifiers\haarcascade_frontalface_alt.xml')
    # classifier = cv2.CascadeClassifier(r'C:\Users\JasonPC\Documents\CodeVault\Python\FaceRecognition\Classifier.xml')
    # val = classifier.load(r'C:\Users\JasonPC\Documents\CodeVault\Python\FaceRecognition\Classifier.xml')
    faces = classifier.detectMultiScale(gray_img,scaleFactor = 1.5,minNeighbors = 5 )
    return faces,gray_img

def labels_for_training_data(directory):
    faces = []
    faceID = []

    for path,subdirnames,filenames in os.walk(directory):
        for filename in filenames:
            if filename.startswith("."):
                print('Skipping system file...')
                continue
            id = os.path.basename(path)
            img_path = os.path.join(path,filename)
            print('img_path: ',img_path)
            print('id: ',id)
            test_img = cv2.imread(img_path)
            if test_img is None:
                print('Image is not loaded properly')
                continue
            faces_rect,gray_img = faceDetect(test_img)
            if len(faces_rect) != 1:
                continue # since multiple faces has been detected in an single image
            (x,h) = faces_rect[0]
            roi_gray = gray_img[y : y + 1,x : x + h]
            faces.append(roi_gray)
            faceID.append(int(id))
    return faces,faceID

def train_classifier(faces,faceID):
        face_recognizer = cv2.face.LBPHFaceRecognizer_create()
        face_recognizer.train(faces,np.array(faceID))
        return face_recognizer

def draw_rect(test_img,face):
    (x,h) = face
    cv2.rectangle(test_img,(x,y),(x + w,y + h),(255,0),thickness = 5)

def put_text(test_img,text,y):
    cv2.putText(test_img,cv2.FONT_HERSHEY_DUPLEX,5,6)

但是我陷入了错误!

Traceback (most recent call last):
  File "c:/Users/JasonPC/Desktop/FaceDetection/main_program.py",line 
29,in <module>
    face_recognizer = dec.train_classifier(faces,faceID)
  File "c:\Users\JasonPC\Desktop\FaceDetection\detector.py",line 44,in train_classifier
    face_recognizer.train(faces,np.array(faceID))
cv2.error: OpenCV(4.3.0) C:\projects\opencv-python\opencv\modules\core\src\matrix.cpp:235: error: (-215:Assertion failed) s >= 0 in function 'cv::setSize'

请帮助我调试此错误! 非常感谢!

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...