detectMultiScale call error

Hello,

After calling detectMuliscale function, I get error:

face_cascade.detectMultiScale(image=img_gray, scaleFactor=1.1, minNeighbors=5)
Traceback (most recent call last):
File “<pyshell#12>”, line 1, in
face_cascade.detectMultiScale(image=img_gray, scaleFactor=1.1, minNeighbors=5)
cv2.error: OpenCV(4.5.1) /tmp/pip-req-build-jr1ur_cf/opencv/modules/objdetect/src/cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function ‘detectMultiScale’

Help, please.

Thanks.

the error means, that your cascade is empty, that the xml file you tried to read in cv2.CascadeClassifier() did not exist or was invalid.
please check the path given there.

Here is the face_cascade assignment:
path = “~/.local/lib/python3.8/site-packages/cv2/data/”
face_cascade = cv.CascadeClassifier(path + ‘haarcascade_frontalface_default.xml’)

Here is …/cv2/data/ contents …
pavel@PASADENA:~/.local/lib/python3.8/site-packages/cv2/data$ ls -l
total 9576
-rw-rw-r-- 1 pavel pavel 601661 févr. 22 16:41 haarcascade_eye_tree_eyeglasses.xml
-rw-rw-r-- 1 pavel pavel 341406 févr. 22 16:41 haarcascade_eye.xml
-rw-rw-r-- 1 pavel pavel 382918 févr. 22 16:41 haarcascade_frontalcatface_extended.xml
-rw-rw-r-- 1 pavel pavel 411388 févr. 22 16:41 haarcascade_frontalcatface.xml
-rw-rw-r-- 1 pavel pavel 540616 févr. 22 16:41 haarcascade_frontalface_alt2.xml
-rw-rw-r-- 1 pavel pavel 2689040 févr. 22 16:41 haarcascade_frontalface_alt_tree.xml
-rw-rw-r-- 1 pavel pavel 676709 févr. 22 16:41 haarcascade_frontalface_alt.xml
-rw-rw-r-- 1 pavel pavel 930127 févr. 22 16:41 haarcascade_frontalface_default.xml
-rw-rw-r-- 1 pavel pavel 476827 févr. 22 16:41 haarcascade_fullbody.xml
-rw-rw-r-- 1 pavel pavel 195369 févr. 22 16:41 haarcascade_lefteye_2splits.xml
-rw-rw-r-- 1 pavel pavel 47775 févr. 22 16:41 haarcascade_licence_plate_rus_16stages.xml
-rw-rw-r-- 1 pavel pavel 395322 févr. 22 16:41 haarcascade_lowerbody.xml
-rw-rw-r-- 1 pavel pavel 828514 févr. 22 16:41 haarcascade_profileface.xml
-rw-rw-r-- 1 pavel pavel 196170 févr. 22 16:41 haarcascade_righteye_2splits.xml
-rw-rw-r-- 1 pavel pavel 75482 févr. 22 16:41 haarcascade_russian_plate_number.xml
-rw-rw-r-- 1 pavel pavel 188506 févr. 22 16:41 haarcascade_smile.xml
-rw-rw-r-- 1 pavel pavel 785819 févr. 22 16:41 haarcascade_upperbody.xml
-rw-rw-r-- 1 pavel pavel 70 févr. 22 16:41 init.py
drwxrwxr-x 2 pavel pavel 4096 févr. 22 16:41 pycache
pavel@PASADENA:~/.local/lib/python3.8/site-packages/cv2/data$

Whole the staff is on Ubuntu PC. I don’t use RPi.
But the source code and .xml are in different locations ?
This poses a problem ?
After all I point in my source code the location of .xml.
Regards.

Didn’t u removed key image?

Here is the code line, where error occurs:
face_rect_list.append(face_cascade.detectMultiScale(image=img_gray, scaleFactor=1.1, minNeighbors=5))
img_gray does present.
Regards.

BTW, Ive tried another more simple example (that uses internal PC camera).
The same problem with detectMultiScale.
Here is code:
import cv2 as cv

# Path to OpenCV's Haar Cascades
#path = "C:/Python372/Lib/site-packages/cv2/data/"
path = "~/.local/lib/python3.8/site-packages/cv2/data/"
face_cascade = cv.CascadeClassifier(path + 'haarcascade_frontalface_alt.xml')

cap = cv.VideoCapture(0)

while True:
    # Capture frame-by-frame
    _, frame = cap.read()
    face_rects = face_cascade.detectMultiScale(frame, scaleFactor=1.2,
                                               minNeighbors=4)    

    for (x, y, w, h) in face_rects:
        cv.rectangle(frame, (x, y), (x+w, y+h), (0, 255, 0), 2)
        
    # Display the resulting frame
    cv.imshow('frame', frame)
    if cv.waitKey(1) & 0xFF == ord('q'):
        break

# Release the capture
cap.release()
cv.destroyAllWindows()

Resolved !!!
Python doesn’t understand ‘~’.
When I specify full path without ‘~’, it’s Ok.
Thanks.

python does understand that, but you have to ask for it: os.path.expanduser.

that’s not python’s fault however. that’s how POSIX APIs work.

Ok, thanks.
Regards.