Python,OpenCV:无法使用opencv_traincascade进行自定义LBP级联

sam*_*n13 6 python opencv classification image-processing image-recognition

我在mac os x 10.7.5上使用通过macports安装的opencv 2.4.4和python 2.7.5.

我想训练一个级联来寻找男性正面.但是我收到了terminate called throwing an exceptionAbort trap: 6错误.我要求SO社区帮我弄清楚可能出现的问题.

负面(背景)图片来自谷歌:googleImages_noFaces(293张图片)

正面图像来自Karolinska数据库:trainingSet(70图像)

我创建了一个文本文件,指示背景图像的相对位置:bgDesc.txt

我还创建了一个文本文件,指示相对位置,图像中正实例的数量(始终为1)和对象的边界区域(整个图像):maleDesc.txt

所有这些文件都可以从这里下载.

文件的组织采用以下形式:

/trainingSet
    image1.jpg
    image2.jpg
    .
    .
    .

/googleImages_noFaces
    image1.jpg
    image2.jpg
    .
    .
    .

/cascadeFiles

maleDesc.txt
bgDesc.txt
Run Code Online (Sandbox Code Playgroud)

当我使用opencv_createsamples时,使用maleDesc.vec以下行成功创建了一个文件:

opencv_createsamples -vec maleDesc.vec -info maleDesc.txt -bg bgDesc.txt -num 70 -w 24 -h 24
Run Code Online (Sandbox Code Playgroud)

如果我使用-show参数我可以看到创建了24x24像素图像.

然后我试试

opencv_traincascade -data cascadeFiles -vec maleDesc.vec -bg bgDesc.txt -numPos 70 - numNeg 293 -numStages 1 -precalcValBufSize 500 -precalcIdxBufSize 500 -featureType LBP -w 24 -h 24
Run Code Online (Sandbox Code Playgroud)

这给了我一个错误.

我尝试了不同的值,-numPos例如10,20等等,最多70个,不同的值为-numNeg30,60等等,直到293.我试图使用小于numNeg值的numPos值,甚至是那些大于.我也尝试了不同的-numStages值,如1,5,10,20和100,但在所有这些尝试中我得到了同样的错误.

我没有尝试过-minHitRate,-maxFalseAlarmRate,-weightTrimRate,-maxDepth,-maxWeakCount的不同值,因为我真的不明白它们如何影响opencv_traincascade算法的行为.

任何帮助深表感谢 :)

sam*_*n13 2

terminate called throwing an exceptionAbort trap: 6错误是由于拼写错误造成的。我设法复制该行为并在下面的代码中验证它

opencv_traincascade -数据级联文件 -vecmaleDesc.vec -bg bgDesc.txt -numPos 70 - numNeg 293 -numStages 1 -precalcValBufSize 500 -precalcIdxBufSize 500 -featureType LBP -w 24 -h 24

之间有一个空格-numNeg应该是-numNeg

此外,即使样本非常少,训练也会继续进行,但 numPos 必须是 numNeg 的两倍

有关 haar 和 lbp 训练过程的更多说明,请参阅此 SO 答案:/sf/answers/1178443101/

由于拼写错误,两周和 50 个赏金声誉被浪费了:|