Каскадное распознавание лиц 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 ответ
Я нашел несколько исправлений в переполнении стека и на других сайтах. Они заключаются в следующем:
Измените кодировку символов с UTF-8 на ANSI с помощью Notepad++.
Предыдущий ответ:
convert_cascade предназначен для каскадов, обучаемых приложением haartraining, и не поддерживает формат каскадов, обучаемых приложением traincascade.
Чтобы сделать это с помощью traincascade, просто снова запустите opencv_traincascade с теми же "-data", но установите "-numStages" в точку, которую вы хотите сгенерировать до. Приложение загрузит обученные этапы, поймет, что требуется необходимое количество этапов, запишет каскад результатов в xml и завершит работу. Прерывание процесса во время этапа может привести к повреждению данных, поэтому, если вам лучше удалить этап в завершении.
ссылка: /questions/40179785/opencvtraincascade-postroit-promezhutochnyij-rezultat/40179799#40179799.
- Стандарт XML гласит:
если в документе XML отсутствует объявление кодировки (и отсутствует внешний механизм объявления кодировки, такой как заголовок HTTP), предполагаемая кодировка документа XML зависит от наличия метки порядка байтов (BOM).
Есть 3 способа это исправить:
- Пусть OpenCV просто поместит тег "encoding="ASCII"" в верхний корневой тег XML.
- Оставьте верхний корневой тег XML, но закодируйте все как UTF-8, прежде чем записать его в файл.
- Сделайте что-нибудь еще с помощью Byte-Order-Mark, но придерживайтесь стандарта.