Я пытаюсь создать файл xml, используя образцы, которые я сделал с моей камерой. Это пробный запуск, когда я подношу камеру к окну и некоторое время позволяю ей делать снимки проезжающих машин каждые 30 секунд. У меня сейчас около 200 картинок (просто для небольшого теста), но дальше не могу.
Я сделал инструмент выбора, чтобы выбирать автомобили на изображениях (ограничивающие рамки) и помечать изображения как негативы, если их нет. Вот 2 примера того, как выглядит приложение:
Затем приложение сохраняет отмеченные объекты в файле positive.txt
следующим образом, пропуская неотмеченные изображения или изображения, помеченные как негативные:
/samples/img_0000.jpg 1 74 66 34 30
/samples/img_0001.jpg 2 78 69 31 25 218 129 61 38
/samples/img_0003.jpg 1 83 72 21 21
/samples/img_0005.jpg 1 76 65 19 17
/samples/img_0006.jpg 1 127 112 37 24
/samples/img_0007.jpg 2 83 72 22 21 127 112 36 22
...
Негативные изображения просто сохраняются в файл negative.txt
следующим образом:
/samples/img_0002.jpg
/samples/img_0004.jpg
/samples/img_0024.jpg
/samples/img_0026.jpg
...
Наконец, я пытаюсь запустить алгоритм обучения Хаара с помощью /usr/bin/opencv_haartraining -data samples -vec positive.txt -bg negative.txt -npos 99 -nneg 20 -nstages 5 -mem 128 -minhitrate 0.999 -maxfalsealarm 0.5 -nonsym -mode ALL
.
Не обращайте внимания на настройки, мне просто нужно, чтобы это работало, прежде чем я буду использовать гораздо более мощный компьютер для фактического обучения на реальных данных с гораздо большим количеством изображений.
Для этого я получаю следующий вывод и ошибку:
Data dir name: samples
Vec file name: positive.txt
BG file name: negative.txt, is a vecfile: no
Num pos: 99
Num neg: 20
Num stages: 5
Num splits: 1 (stump as weak classifier)
Mem: 128 MB
Symmetric: FALSE
Min hit rate: 0.999000
Max false alarm rate: 0.500000
Weight trimming: 0.950000
Equal weights: FALSE
Mode: ALL
Width: 24
Height: 24
Applied boosting algorithm: GAB
Error (valid only for Discrete and Real AdaBoost): misclass
Max number of splits in tree cascade: 0
Min number of positive samples per cluster: 500
Required leaf false alarm rate: 0.03125
Tree Classifier
Stage
+---+
| 0|
+---+
Number of features used : 261600
Parent node: NULL
*** 1 cluster ***
OpenCV Error: Unspecified error (Vec file sample size mismatch) in icvGetHaarTrainingDataFromVec, file /build/opencv-XZa2gn/opencv-2.3.1/modules/haartraining/cvhaartraining.cpp, line 1930
terminate called after throwing an instance of 'cv::Exception'
what(): /build/opencv-XZa2gn/opencv-2.3.1/modules/haartraining/cvhaartraining.cpp:1930: error: (-2) Vec file sample size mismatch in function icvGetHaarTrainingDataFromVec
Aborted
Кто-нибудь знает, что это значит? Почему возникает ошибка с размером выборки, что бы это ни было... Я также пытался заменить относительные пути абсолютными путями, но получил ту же ошибку. Это то, что я пытаюсь сделать на самом деле правильно, я не нашел явных примеров того, как создать классификатор из существующих и отмеченных изображений.