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 и решил ее следующим образом
Получите местоположение opencv, используя
где opencv
Мой был в /usr/share/opencv
Проверьте, присутствуют ли каскады в этом месте, и скопируйте и вставьте местоположение в 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 в текущий каталог, что решило мою проблему.