Ask Your Question
0

I'm getting the following error while using OpenCV

asked 2020-10-13 04:11:18 -0600

AG gravatar image

updated 2020-10-13 04:17:01 -0600

My code is as below:

# 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 Lights...') 

# 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]] 
print('Images', images)
print('Lables', 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) 
print('Initiating image capture now...')
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) 
    if cv2.waitKey(10) & 0xff == ord('q'):
        break

cv2.waitKey(0)
# Release the capture once all the processing is done.                                   
cv2.destroyAllWindows()
webcam.release()

The error that I get while running the program in Jupyter notebook is as follows:

---------------------------------------------------------------------------
error                                     Traceback (most recent call last)
<ipython-input-7-eab39be2c873> in <module>
     32 print('Images', images)
     33 print('Lables', lables)
---> 34 model.train(images, lables)
     35 
     36 # Part 2: Use fisherRecognizer on camera stream

error: OpenCV(4.4.0) C:\Users\appveyor\AppData\Local\Temp\1\pip-req-build-wwma2wne\opencv\modules\core\src\matrix.cpp:235: error: (-215:Assertion failed) s >= 0 in function 'cv::setSize'
edit retag flag offensive close merge delete

1 answer

Sort by ยป oldest newest most voted
1

answered 2020-10-13 04:31:23 -0600

berak gravatar image

updated 2020-10-13 04:33:44 -0600

one of your train images is invalid. please DON'T do this:

images.append(cv2.imread(path, 0))

imread() may fail silently, and return None,you absolutely HAVE TO CHECK (and python users never do ...) like:

im = cv2.imread(path, 0)
if im == None: # wrong path ? not an image ?
    continue
images.append(im)
edit flag offensive delete link more

Question Tools

1 follower

Stats

Asked: 2020-10-13 04:11:18 -0600

Seen: 864 times

Last updated: Oct 13 '20