OpenCV错误:(215:断言失败)在人脸识别程序:Python的函数“cv::setSize”中s>=0

2024-10-02 22:25:59 发布

您现在位置: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, y , w, 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, y , w, h) = face
    cv2.rectangle(test_img, (x, y), (x + w, y + h), (255, 0, 0), thickness = 5)

def put_text(test_img, text, x, y):
    cv2.putText(test_img, text, (x, y), cv2.FONT_HERSHEY_DUPLEX, 5, (255,0, 0), 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'

请帮我调试这个错误! 非常感谢


Tags: pathintestimportimgcv2usersdec