我正在使用在Mac OS X 10.7.5上通过python 2.7.5通过macports安装的opencv 2.4.4。

我想训练一个层叠来寻找男性额叶。但是我收到了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值,甚至那些大于。我也尝试了不同的-numStages值,例如1、5、10、20和100,但是在所有这些尝试中,我都遇到了相同的错误。

我没有尝试过-minHitRate,-maxFalseAlarmRate,-weightTrimRate,-maxDepth,-maxWeakCount的其他值,因为我不太了解它们如何影响opencv_traincascade算法的行为。

任何帮助深表感谢 :)

最佳答案

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

opencv_traincascade-数据级联文件-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个声誉奖励因一次错字而浪费掉了:|

关于Python,OpenCV : unable to make custom LBP cascade using opencv_traincascade,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/19464834/

10-12 22:45