Обучение Haar: ошибка (-215) img.строка * img.cols == vecSize в функции

Я пытаюсь обучить Каскад Хаара обнаруживать руки. У меня есть файл vec размером 1000. У меня 40 положительных и 600 отрицательных изображений. Я пытался отбросить как положительные, так и отрицательные образы. Когда я запускаю следующую команду, я получаю следующую ошибку:

opencv_traincascade -data classifier -data classifier -vec samples.vec -bg negatives.txt
-numstages 20 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 1000 -numNeg 600 -w 80
-h 40 -mode ALL -precalcValBufSize 1024 -precalcIdxBufSize 1024

PARAMETERS:
cascadeDirName: classifier
vecFileName: samples.vec
bgFileName: negatives.txt
numPos: 1000
numNeg: 1000
numStages: 20
precalcValBufSize[Mb] : 256
precalcIdxBufSize[Mb] : 256
stageType: BOOST
featureType: HAAR
sampleWidth: 24
sampleHeight: 24
boostType: GAB
minHitRate: 0.999
maxFalseAlarmRate: 0.5
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 100
mode: BASIC



===== TRAINING 0-stage =====
<BEGIN
OpenCV Error: Assertion failed (_img.rows * _img.cols == vecSize) in get, file /home/lie/Desktop/Install-OpenCV-master/Ubuntu/2.4/OpenCV/opencv-2.4.9/apps/traincascade/imagestorage.cpp, line 157
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/lie/Desktop/Install-OpenCV-master/Ubuntu/2.4/OpenCV/opencv-2.4.9/apps/traincascade/imagestorage.cpp:157: error: (-215) _img.rows * _img.cols == vecSize in function get

прервана (ядро бросила)

Я попытался снизить положительный счет и сделать весь процесс снова и все равно получил ту же ошибку. Любой предложения?

кстати: я следую учебнику по адресу : http://coding-robin.de/2013/07/22/train-your-own-opencv-haar-classifier.html

спасибо

2 ответов


ошибка, похоже, не является результатом большого количества положительных или отрицательных образцов. Люди тренируют очень большие наборы данных!

из параметров, описанных выше, можно заметить, что размер положительных образцов, которые образуют образцы.vec - 24x24, что обозначается утверждением:

sampleWidth: 24
sampleHeight: 24

но при вызове opencv_traincascade функция, вы пытаетесь установить размер как 80x40. Попробуйте изменить это на -w 24 -h 24


утверждение совершенно ясно: он ожидает, что _img.строк*_img.cols = = vecSize. Я не знаю, что такое _img и vecSize, но это означает, что ваши входные данные неправильно заданы. Просто глядя на вашу командную строку, вы:

  1. писал -data classifier -data classifier два раза. Это не должно быть проблемой, но все же.
  2. писал -numPos 1000\ -numNeg 600, в то время как вы говорите о 40 положительных и 600 отрицательных изображениях, так что вы не должны использовать эти цифры вместо этого?

вы скажем, у вас есть vecSize размера 1000. Для чего этот vecSize?