Я могу привести пример Linux. Код и методы были взяты из различных источников. Это следует за этим примером , но с версией mergevec на python, поэтому вам не нужно компилировать файл mergevec.cpp.
Предполагая, что у вас есть две папки с обрезанными и готовыми положительными и отрицательными изображениями (файлы .png в этом примере), вы создаете два текстовых файла со всеми именами изображений в:
find positive_images -iname "*.png" > positives.txt
find negative_images -iname "*.png" > negatives.txt
Затем с помощью сценария createamples.pl , предоставленного Naotoshi 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, созданный Blake Wulfe с именем mergevec.py, который создаст файл output.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
Если все идет хорошо, используйте только что созданный каскад (classifier / cascade.xml) с чем-то вроде facedetect.py из примеров opencv:
opencv-3.0.0-rc1/samples/python2/facedetect.py --cascade classifier/cascade.xml test_movie.mp4