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

时间:2013-10-19 10:10:10

标签: python opencv image-processing classification 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社区帮我弄清楚可能出现的问题。

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

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

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

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

所有这些文件都可以从here下载。

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

/trainingSet
    image1.jpg
    image2.jpg
    .
    .
    .

/googleImages_noFaces
    image1.jpg
    image2.jpg
    .
    .
    .

/cascadeFiles

maleDesc.txt
bgDesc.txt

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

opencv_createsamples -vec maleDesc.vec -info maleDesc.txt -bg bgDesc.txt -num 70 -w 24 -h 24

如果我使用-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

这给了我一个错误。

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

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

非常感谢任何帮助:)

2 个答案:

答案 0 :(得分:2)

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

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

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

另外,即使样本非常低,训练也会进行,但numPos必须是numNeg的两倍

请参阅此SO答案,以便更详细地了解haar和lbp培训流程:https://stackoverflow.com/a/16834901/1463143

由于输入错误,两周和50美元的声誉被浪费了:|

答案 1 :(得分:-3)

我帮助编译了OpenCV函数TBB how to do opencv_traincascade on Ubuntu

尺寸负像(宽度和高度)>阳性样本