问题描述
我已经编写了两个脚本main_program.py
和detector.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 (将#修改为@)