OpenCV Train Cascade:VecSize不正确

时间:2018-02-15 23:13:51

标签: python python-3.x opencv haar-classifier

我一直试图用一种级联分类器来训练一个蓝色的' X'在一张白纸上。图像(正面和负面)都是JPG,为了生成必要的样本,我使用了Naotoshi Seo创建的perl脚本。

样本创建命令:

proc = subprocess.Popen("perl createsamples.pl positives.txt negatives.txt " + output_dir + " " + str(num_pos_samples) + " opencv_createsamples -bgcolor 0 -bgthresh 0 -maxxangle 1.1 -maxyangle 1.1 -maxzangle 0.5 -maxidev 40 -w 80 -h 45", stdout=subprocess.PIPE)
out, err = proc.communicate()
proc.kill()

但是,一旦我尝试将合并的vec文件提供给CascadeTrainer,我就遇到了问题。我跑

opencv_traincascade -data classifier -vec samples.vec -bg negatives.txt -numStages 20 -minHitRate 0.999 -maxFalseAlamRate 0.5 -numPos 1300 -numNeg 1180 -w 80 -h 45 -mode ALL -precalcValBufSize 2048 -precalcIdxBufSize 2048

并获得

的输出
PARAMETERS:
cascadeDirName: classifier
vecFileName: samples.vec
bgFileName: negatives.txt
numPos: 1300
numNeg: 1180
numStages: 10
precalcValBufSize[Mb] : 2048
precalcIdxBufSize[Mb] : 2048
acceptanceRatioBreakValue : -1
stageType: BOOST
featureType: HAAR
sampleWidth: 80
sampleHeight: 45
boostType: GAB
minHitRate: 0.9999
maxFalseAlarmRate: 0.3
weightTrimRate: 0.95
maxDepth: 1
maxWeakCount: 100
mode: ALL
Number of unique features given windowSize [80,45] : 9969357

===== TRAINING 0-stage =====
<BEGIN
OpenCV Error: Assertion failed (_img.rows * _img.cols == vecSize) in 
CvCascadeImageReader::PosReader::get, file C:\tools\opencv-
3.4.0\apps\traincascade\imagestorage.cpp, line 153
samples.vec created with 1300 positive samples and 1180 negative samples.

现在,显然这是因为我的图像的宽度和高度不会与vecSize相乘。但是,我发现这很奇怪:我重新编译了C ++代码,用于训练分类器打印出vecSize,而它是576(24 * 24),无论我为什么选择宽度&#39;宽度&#39;和&#39;身高&#39;在样本生成过程中。

事实上,如果我将每个的宽度和高度设置为24,我就不会出错。我可以使用widthxheight = 80x45的perl脚本,然后放入24x24进行训练,没有任何问题。我发现这很奇怪,因为,看一下如何训练哈尔分类器的教程,看起来并不像“宽度”那样。和&#39;身高&#39;参数应该以这种方式重要:除了24x24之外,使用其他值或其他任何乘以576的值似乎很常见。

为什么vecSize这个值?如何更改它以便我可以使用宽度&#39;和&#39;身高&#39;我想要的价值观?

0 个答案:

没有答案
相关问题