Search on blog:

Problem z wczytaniem pliku haarcascades w OpenCV

Czasami tutorial wczytuje plik haarcascades zainstalowany z OpenCV w ten sposób

eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

ale gdy my uruchamiamy taki kod

import numpy as np
import cv2

eye_cascade = cv2.CascadeClassifier('haarcascade_eye.xml')

image = np.array([1,2,3], dtype='uint8')
eye_cascade.detectMultiScale(img, 1.3, 5)

to otrzymujemy błąd

cv2.error: OpenCV(4.1.2) /io/opencv/modules/objdetect/src/cascadedetect.cpp:1689: error: (-215:Assertion failed) !empty() in function 'detectMultiScale'

Problem jest, że potrzebna jest pełna ścieżka do tego pliku więc musimy dodać folder do nazwy pliku

Szczęścliwie OpenCV ma specjalną zmienną z pełną ścieżką do tego folderu

import cv2

print(cv2.data.haarcascades)

i możemy użyć jej do stworzenia pełnej ścieżki do tego pliku

eye_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_eye.xml')

Możeby nawet użyć jej do zobaczenia jakie pliki .xml są w tym folderze

import os
import cv2

for name in sorted(os.listdir(cv2.data.haarcascades)):
    if name.endswith('.xml'):
        print(name)

Wynik

haarcascade_eye.xml
haarcascade_eye_tree_eyeglasses.xml
haarcascade_frontalcatface.xml
haarcascade_frontalcatface_extended.xml
haarcascade_frontalface_alt.xml
haarcascade_frontalface_alt2.xml
haarcascade_frontalface_alt_tree.xml
haarcascade_frontalface_default.xml
haarcascade_fullbody.xml
haarcascade_lefteye_2splits.xml
haarcascade_licence_plate_rus_16stages.xml
haarcascade_lowerbody.xml
haarcascade_profileface.xml
haarcascade_righteye_2splits.xml
haarcascade_russian_plate_number.xml
haarcascade_smile.xml
haarcascade_upperbody.xml
If you like it
Buy a Coffee