我在opencv_traincascade
上遇到了一些麻烦,这可能可以追溯到早期的方法调用,但是我不确定100%。
opencv_traincascade -data classifier -vec samples.vec -bg
negatives.txt -numStages 20 -minHitRate - 0.999 -maxFalseAlarmRate 0.5
-numPos 4000 -numNeg 200000 -w 17 -h 23 -mode ALL
-precalcValBufSize 1024 -precalcIdxBufSize 1024
error:
terminate called after throwing an instance of 'std::logic_error'
what(): basic_string::_M_construct null not valid
Aborted (core dumped)
我正在跟着这个tutorial。但是,我有5000张正像和200000张负像可以使用。因此,取而代之的是我遵循了link,并且我正在使用该方法从某些方法创建训练样本,而不是使单个图像失真。
创建示例:
opencv_createsamples -info positives.dat -vec samples.vec -w 17 -h 23
-num 5000
Output:
Info file name: positives.dat
Img file name: (NULL)
Vec file name: samples.vec
BG file name: (NULL)
Num: 5000
BG color: 0
BG threshold: 80
Invert: FALSE
Max intensity deviation: 40
Max x angle: 1.1
Max y angle: 1.1
Max z angle: 0.5
Show samples: FALSE
Width: 17
Height: 23
Max Scale: -1
我已经通过vec文件查看了示例图像,
opencv_createsamples -vec samples.vec -w 17 -h 23
如果需要的话,可以部分捕获positives.dat
positive_images/0/18693.png 1 0 0 17 23
positive_images/0/18501.png 1 0 0 17 23
positive_images/0/19998.png 1 0 0 17 23
positive_images/0/18224.png 1 0 0 17 23
positive_images/0/19527.png 1 0 0 17 23
positive_images/0/18739.png 1 0 0 17 23
positive_images/0/6926.png 1 0 0 17 23
positive_images/0/19520.png 1 0 0 17 23
positive_images/0/7982.png 1 0 0 17 23
positive_images/0/17458.png 1 0 0 17 23
positive_images/0/17312.png 1 0 0 17 23
positive_images/0/8497.png 1 0 0 17 23
我在Stack Overflow上搜索了一些不同的帖子,但问题与我的稍有不同。
我将Windows机器移到了双引导程序,该引导程序正在运行最新的Ubuntu lts发行版。
答案 0 :(得分:1)
我解决了我的问题!我错误地创建了negatives.dat文件,因此1个问题是找不到负文件。另外,我使用opencv_traincascade
实现here重新运行。仅调整样本量以及图像的宽度和高度。
链接代码
opencv_traincascade -data classifier -vec samples.vec -bg negatives.txt\
-numStages 20 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -numPos 4500\
-numNeg 600 -w 17 -h 23 -mode ALL -precalcValBufSize 1024\
-precalcIdxBufSize 1024
输入此内容时,我刚弹出一条消息,提示
Required leaf false alarm rate achieved. Branch training terminated.
是时候解决了。哦,这不是错误,它说它按照我的要求做了。是时候测试一下了。