我正在尝试使用 haar_cascade 训练一些分支徽标。我所做的是,我拍摄了 2500 张 500 x 500 的平方图片来填充opencv_createsamples
. 然后我将它们生成为:
opencv_createsamples -info 'logo.info' -vec '../logo.vec' -bg '../Negatives/bg.txt' -w 24 -h 24 -num 2500
在我的中,logo.info
我有与每张图片的相对路径相对应的线条,其1 0 0 500 500
含义是“在 (0,0) 和 (500, 500) 之间有一个对象”
然后我将级联训练为:
opencv_traincascade -data 'cascade/' -vec '../logo.vec' -bg '../Negatives/bg.txt' -numPos 2500 -numNeg 3019 -numStages 25 -featureType LBP -w 24 -h 24
使用这些参数:
参数:
cascadeDirName:级联/
vecFileName: ../logo.vec
bgFileName: ../Negatives/bg.txt
数量:2500
numNeg: 3019
阶段数:25
precalcValBufSize[Mb]:256
precalcIdxBufSize[Mb]:256
舞台类型:BOOST
特征类型:LBP
样本宽度:24
样品高度:24
升压类型:GAB
最低命中率:0.995
最大假警报率:0.5
重量修剪率:0.95
最大深度:1
最大弱计数:100
我有两种错误:
- OpenCV 错误:在 cvPreprocessIndexArray,文件 /tmp/buildd/opencv-2.3.1/modules/ml/src/inner_functions.cpp,第 432 行终止调用中的参数值之一超出范围(未选择组件/输入变量!)抛出'cv :: Exception'实例后what():/tmp/buildd/opencv-2.3.1/modules/ml/src/inner_functions.cpp:432:错误:(-211)未选择组件/输入变量!在函数 cvPreprocessIndexArray
...
当您在图像数量和-num
参数之间没有显着差异时,通常会发生此错误。所以,让我们尽量少给100!
好吧,当我将参数调整为不从数组中输出时,我得到与图像相同类型的输出,但出现此错误:
OpenCV 错误:写入中的断言失败(tempNode->left),文件 /tmp/buildd/opencv-2.3.1/modules/traincascade/boost.cpp,第 628 行终止在抛出“cv::Exception”实例后调用什么(): /tmp/buildd/opencv-2.3.1/modules/traincascade/boost.cpp:628: 错误: (-215) tempNode->left in function write
中止
我试过了:
- 更改图像的命运尺寸(24x24、36x36...)
- 更改
-mode
参数。 - 尝试放置 #positiveSamples < #negativeSamples 和 #positiveSamples > #negativeSamples
我必须做的是用 LBP(不是 HAAR)进行强制性培训。有人有任何线索吗?
先感谢您。