Зачем создавать собственные каскады Haar-классификаторов?
нашел этой учебник по созданию собственных каскадов haar-классификатора.
Это вызвало у меня вопрос: каковы преимущества, если таковые имеются, запуска HaarTraining и создания собственного классификатора (в отличие от использования каскадов, предоставляемых OpenCv)?
2 ответов
классификаторы каскадов Хаар или ЛБП общий метод используемый для обнаружения или твердых объектов. Итак, вот два основных момента для тренировки собственного каскада:
каскады, поставляемые с OpenCV, не охватывают все возможные типы объектов. Таким образом, вы можете использовать один из каскадов OpenCV, если вы собираетесь создать приложение для обнаружения лица, но не готовы использовать каскады, если вам нужно обнаружить, например, собак.
и каскады из OpenCV хороши но они не самые лучшие. Это сложная задача, но можно обучить каскад, который будет иметь более высокую скорость обнаружения и производить меньше ложноположительных и ложноотрицательных.
и одно важное замечание: приложение haartraining, используемое в вашем учебнике, теперь считается устаревшим командой OpenCV. opencv_traincascade
более новая версия и она имеет 2 важных особенности: она поддерживает особенности ЛБП и она поддерживает мульти-продевать нитку (ТББ). Типичная разница выглядит так это
haartraining + singlecore > 3 недели для одного классификатора.
traincascades + multicore
но хуже всего, что я не знаю хороших учебников, объясняющих использование opencv_traincascade
. См.этой теме для сведения.
Я могу привести вам пример Linux. Код и методы были взяты из различных источников. Это следует но с версией mergevec на python, поэтому вам не нужно компилировать mergevec.файл cpp.
предполагая, что у вас есть две папки с обрезанными и готовыми положительными и отрицательными изображениями (.png-файлы в этом примере), вы создаете два текстовых файла со всеми именами изображений в:
find positive_images -iname "*.png" > positives.txt
find negative_images -iname "*.png" > negatives.txt
затем, используя createsamples.pl скрипт предоставляется Наотоши Seo (в папке OpenCV/bin), который берет два текстовых файла и выходную папку, и создает .файлы vec:
perl createsamples.pl positives.txt negatives.txt 'output' 1500 "opencv_createsamples -bgcolor 0 -bgthresh 0 -maxzangle 0.5 -w 50 -h 50"
следуйте этому с помощью скрипта python, созданного Wulfe Блэйк вызывается mergevec.py, который создаст вывод.vec файл, объединив все .Vec файлы в папке
python mergevec.py -v samples -o output.vec
предполагая, что все это сделано, использование opencv_traincascade следующим образом должно помочь:
opencv_traincascade -data classifier -vec output.vec -bg negatives.txt \
-numStages 10 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 200 \
-numNeg 400 -w 50 -h 50 -mode ALL
если все это идет ну, используйте свой недавно созданный каскад (классификатор / каскад.xml) с чем - то вроде facedetect.py из образцов opencv:
opencv-3.0.0-rc1/samples/python2/facedetect.py --cascade classifier/cascade.xml test_movie.mp4