Каскадное распознавание лиц C++ Opencv 3.0

Я пытаюсь реализовать функцию распознавания лиц, упомянутую в руководстве

http://docs.opencv.org/3.0-beta/doc/tutorials/objdetect/cascade_classifier/cascade_classifier.html

Я использую OpenCV 3.0 на Ubuntu 14.04.

Я скачал здесь каскадные XML-файлы

https://github.com/opencv/opencv/tree/master/data/haarcascades

Когда я компилирую код, он выдает мне следующее сообщение об ошибке:

OpenCV Error: Parsing error (/...../haarcascade_frontalcatface.xml(5): Valid XML should start with '<?xml ...?>') in icvXMLParse, file /home/taleb/opencv3/opencv/modules/core/src/persistence.cpp, line 2220
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/taleb/opencv3/opencv/modules/core/src/persistence.cpp:2220: error: (-212) /home/taleb/pythonproject/test1/haarcascade_frontalcatface.xml(5): Valid XML should start with '<?xml ...?>' in function icvXMLParse

Любое предложение?

1 ответ

Я нашел несколько исправлений в переполнении стека и на других сайтах. Они заключаются в следующем:

  1. Измените кодировку символов с UTF-8 на ANSI с помощью Notepad++.

  2. Предыдущий ответ:

convert_cascade предназначен для каскадов, обучаемых приложением haartraining, и не поддерживает формат каскадов, обучаемых приложением traincascade.

Чтобы сделать это с помощью traincascade, просто снова запустите opencv_traincascade с теми же "-data", но установите "-numStages" в точку, которую вы хотите сгенерировать до. Приложение загрузит обученные этапы, поймет, что требуется необходимое количество этапов, запишет каскад результатов в xml и завершит работу. Прерывание процесса во время этапа может привести к повреждению данных, поэтому, если вам лучше удалить этап в завершении.

ссылка: /questions/40179785/opencvtraincascade-postroit-promezhutochnyij-rezultat/40179799#40179799.

  1. Стандарт XML гласит:

если в документе XML отсутствует объявление кодировки (и отсутствует внешний механизм объявления кодировки, такой как заголовок HTTP), предполагаемая кодировка документа XML зависит от наличия метки порядка байтов (BOM).

Есть 3 способа это исправить:

  • Пусть OpenCV просто поместит тег "encoding="ASCII"" в верхний корневой тег XML.
  • Оставьте верхний корневой тег XML, но закодируйте все как UTF-8, прежде чем записать его в файл.
  • Сделайте что-нибудь еще с помощью Byte-Order-Mark, но придерживайтесь стандарта.

ссылка: http://code.opencv.org/issues/976

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