OpenCV 4.0.0 SystemError: <class 'cv2.CascadeClassifier'> возвратил результат с установленной ошибкой

Здравствуйте, я пытаюсь создать программу распознавания лиц, но у меня есть своеобразная ошибка: вот мой код:

gray = cv2.cvtColor(img, cv2.COLOR_BGR2GRAY)
face_cascade = cv2.CascadeClassifier("lbpcascade_frontalface.xml")
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.2, minNeighbors=5);

и эта ошибка является выходной

SystemError: <class 'cv2.CascadeClassifier'> returned a result with an error set

У меня есть "lbpcascade_frontalface.xml" в рабочем каталоге, так что это не должно быть проблемой

если это поможет, когда я вхожу

cv2.__version__

я получил

'4.0.0'

7 ответов

Оказывается, мне не нужно было загружать другой файл и использовать его, потому что opencv идет с ним, этот маленький кусочек кода работал

cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

Ну, у меня была такая же проблема, поскольку @TylerStrouth упомянул, что этот фрагмент кода не работает:

cv2.CascadeClassifier(cv2.data.haarcascades + "haarcascade_frontalface_default.xml")

потому что в каталоге данных нет файлов haarcascades, если вы только что установили opencv в стандартном формате pip install opencv-python или же sudo apt-get install python3-opencv

Вы получите ошибку, похожую на этот вопрос о stackru, в нем упомянутое решение, которое сработало для меня, то есть, если вы используете python3, вам также необходимо установить opencv-contrib-python перед запуском приведенного выше фрагмента кода.

pip install opencv-contrib-python

который имеет полный пакет (содержит как основные модули, так и дополнительные / дополнительные модули)

Измените свой код следующим образом, это сработало для меня

har_cascade = cv2.CascadeClassifier(cv2.data.haarcascades +'har.xml')

Как объяснил @TylerStrouth выше, opencv имеет каталог каскадов, в котором доступны каскадные файлы, я также столкнулся с той же проблемой при запуске кода для обнаружения лиц в Ubuntu 16.04 и решил ее следующим образом

  1. Получите местоположение opencv, используя

    где opencv

  2. Мой был в /usr/share/opencv

  3. Проверьте, присутствуют ли каскады в этом месте, и скопируйте и вставьте местоположение в cv2.CascadeClassifier вместе с требуемым haarcascade

У меня была такая же ошибка, когда я использовал для обнаружения пешеходов из локального видео, и я читал hogcascade_pedestrians.xml следующим образом:

      pedestrainsClassifier = cv2.CascadeClassifier("hogcascade_pedestrians.xml")

Из них вы должны прочитать это следующим образом:

      pedestrainsClassifier = cv2.CascadeClassifier(f"{cv2.data.haarcascades}hogcascade_pedestrians.xml")

В качестве альтернативы вы можете сделать это следующим образом:

      pedestrainsClassifier = cv2.CascadeClassifier(cv2.data.haarcascades +"hogcascade_pedestrians.xml")

Удачи

По версии 3.4.9.33 из opencv-python ( pip show opencv-python, Windows) строка ниже работает нормально: trained_face_data = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')

Я столкнулся с той же проблемой немного по-другому. Я использовал блокнот Jupiter для выполнения кода здесь

Я скопировал XML-файл отсюда и создал XML-файл в текущем каталоге Jupiter при загрузке этих файлов, используя ниже:

classifier = CascadeClassifier('haarcascade_frontalface_default.xml')

Он вернул мне ошибку:

SystemError: <class 'cv2.CascadeClassifier'> returned a result with an error set

Итак, я попробовал другой способ, удалил этот файл и загрузил фактический файл в формате XML в текущий каталог, что решило мою проблему.

Другие вопросы по тегам