Тренировка OpenCV haar для статического изображения
Я пытаюсь обучить каскадный классификатор haar для определения набора карт (который не вращается и не искажает изображение)
Например, у меня есть файл Clubs.png, который содержит изображение клубов на белом фоне 20x20 пикселей.
Этот учебник так запутан http://note.sonots.com/SciSoftware/haartraining.html
Мое изображение меняется только по размерам, без искажений и наклонов.
Какие команды я должен ввести, чтобы получить файл Clubs.xml?
4 ответа
Как уже упоминалось @Neon22, отличный учебник. По моему опыту, это довольно длительный процесс (сбор положительных и отрицательных образцов, обучение, генерация каскада Хаара), но, опять же, возможно, я делал это неправильно.
Для обнаружения карт также может быть полезно взглянуть на OpenCV SURF.
Забавно, что вы упомянули карты, Евгений Затепякин сделал порт ActionScript под названием ASSURF:
Если вы заинтересованы в создании своего XML-файла, это может помочь http://nayakamitarup.blogspot.in/2011/07/how-to-make-your-own-haar-trained-xml.html
Но если вы заинтересованы в том, чтобы сделать его инвариантным по отношению к вращению, тогда серфинг кажется лучшим вариантом. http://nayakamitarup.blogspot.in/2011/06/2d-ar-using-surf-based-application-of.html
Попробуйте этот урок вместо. http://cgi.cse.unsw.edu.au/~cs4411/wiki/index.php?title=OpenCV_Guide
но учебник, который вы определили, довольно хорош. Я использовал его, чтобы разобраться со своим классификатором. Пример кода facedetect, включенный в дистрибутив opencv 2.1, является хорошим примером для проверки полученного XML-файла. (Я использую питон)
Я обнаружил несколько проблем с поставляемыми справочными приложениями. 1. createamples не будет читать файл описания с более чем 8 сэмплами из одного изображения - вручную разбейте ваш файл отношений на несколько строк, содержащих не более 8 прямоугольников на изображение.
Обучение haar не продолжалось бы, если бы мой файл.vec был сделан с изображениями ширины и высоты> 24 пикселей
Основная проблема с haar, по-видимому, заключается в том, что он не является инвариантом для масштабирования, и вам нужны тысячи тестовых изображений - это то, что программа createamples поможет вам сделать с отдельными изображениями, но не поможет, если у вас есть файл описания отдельных образцов изображений. Следовательно, в учебниках содержится дополнительный код, позволяющий многократно вызывать createamples и объединять полученные файлы vec в один файл super vec.
Вы можете сослаться на:
http://opencv-hub.blogspot.in/2016/03/how-to-train-your-own-opencv-haar-classifier-haar-training-train-cascade.html
для создания собственного файла haar-cascade xml.
Это учебное пособие по OpenCV написано на C++, где подробно описаны методы обучения Haar. Также обратите внимание, что Haar не является инвариантом вращения.
Таким образом, как только вы поворачиваете изображение, оно не будет обнаружено.
Вы должны использовать SURF для этой цели.
Но обнаружение объектов с помощью Haar намного быстрее, чем SURF. Если вы хотите узнать, как использовать обученный файл Haar Cascade, вы можете обратиться к:
http://opencv-hub.blogspot.in/2016/03/how-to-do-real-time-face-detection-using-haar-cascade.html
Код обнаружения лица в реальном времени будет аналогичен коду обнаружения объекта в реальном времени.