Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/logging/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Opencv 训练级联分类器检测纸张_Opencv_Object_Detection_Cascade - Fatal编程技术网

Opencv 训练级联分类器检测纸张

Opencv 训练级联分类器检测纸张,opencv,object,detection,cascade,Opencv,Object,Detection,Cascade,我试图训练一个级联分类器来检测窗户上的纸张(8.5“x11”)。基本上,我是在根据纸测量窗户的宽度和高度。一旦我检测到纸张,我可以通过简单的比率计算得到窗口的宽度和高度(因为纸张大小是固定的) 我试着只用普通纸,但运气不好。它可以检测纸张,也可以检测一些随机物体。这并不太可靠,训练只花了31分钟。阳性样本来自15张不同的纸张图片(裁剪)。负片样本为300x300窗口图像。 参数:-numStages 1-nsplits 2-minHitRate 0.995-maxFalseArmrate 0.9

我试图训练一个级联分类器来检测窗户上的纸张(8.5“x11”)。基本上,我是在根据纸测量窗户的宽度和高度。一旦我检测到纸张,我可以通过简单的比率计算得到窗口的宽度和高度(因为纸张大小是固定的)

我试着只用普通纸,但运气不好。它可以检测纸张,也可以检测一些随机物体。这并不太可靠,训练只花了31分钟。阳性样本来自15张不同的纸张图片(裁剪)。负片样本为300x300窗口图像。 参数:-numStages 1-nsplits 2-minHitRate 0.995-maxFalseArmrate 0.9-numPos 400-numNeg 400-w 62-h 80

现在我尝试检测相同的纸张大小,但上面有打印对象(以提供一些图案)。基本上,我打印了一个大的Android徽标,并尝试训练级联分类器来检测它。以下是我的参数: -numStages 1-nsplits 2-最小命中率0.995-最大错误报警率0.9-numPos 890-numNeg 890-w 62-h 80 (负片图像的分辨率为150x150像素)

所以我得到了比普通纸更好的结果。我尝试将一些阳性样本(由opencv_createsamples生成)输入到级联分类器中,它以高精度检测纸张(打印的Android)。当我输入一张真实的图片(安卓纸张窗口的图片)时,问题就出现了,分类器根本检测不到纸张

请注意,当我输入真实图像时,我将其大小调整为150x150,因此要检测的对象(纸张)变得更小(约为31x40),我尝试将最小尺寸参数(在detectMultiScale中)设置为31x40

此外,当我尝试增加阶段的数量时,无论我如何使用-minHitRate和-maxfalsalarmrate参数进行实验,它都会给我一个“所需的叶虚警率”错误。即使这两个参数设置为非常低的值(分别为0.3和0.3)

你们有什么建议吗?你认为我还应该尝试什么?我在想,用更复杂的模式对系统进行再培训,会有帮助吗?我只是需要一些意见,因为我已经训练了我的分类器3周,尝试了50多次不同的参数和图像大小。我只是累了,没有办法尝试


提前感谢。

在训练时记住以下几点,你应该会取得好的成绩-

  • 仅指定没有的参数,例如

    -numPos
    -numNeg

    将默认值用于其他参数,如

    -minHitRate
    -最大错误报警率
    -重量比率
    -最大深度
    -maxWeakCount

    成功生成分类器后,就可以使用其他值了

  • 获取大量原始正样本和负样本,而不是使用opencv_createsamples从少量样本创建它们,因为反复使用相同样本训练分类器不会提高其准确性。还要注意,
    -numPos
    不是.vec文件中存在的阳性样本总数。相反,它是输入分类器训练每个阶段的正样本数量,因此该数量应略小于正样本总数

  • 级联分类器的特点是使用一系列弱分类器,以较低的计算代价提供良好的分类效果。因此,通过足够数量的阶段来训练分类器是非常重要的,否则它将无法工作

  • 检查系统上的可用内存(RAM)量,并相应地指定以下参数-

    -预制尺寸
    -预钙化

    所以,如果你有1GB的空闲内存,你可以把它分成两半。请记住,不应消耗所有可用内存,否则系统可能会出现故障,或者培训可能因内存不足而提前终止


  • 进一步阅读:

    我认为使用轮廓分析可以轻松实现您想要的结果。给出一个示例图像,让我们来看看tryHi sturkmen。实际上,找到轮廓是我的第一个实现。这种方法非常有效,直到纸被放在带有白色边框的窗口角落。纸的白色与白色边框混合。这就是为什么我想尝试级联分类器来解决“白边界”问题。问题是,除了白纸(部分要求)之外,我不能使用任何其他颜色。你说你在纸上印了一个徽标。您可以打印一个轮廓分析很容易找到的形状,也可以打印一个棋盘。您可以通过“findChessboardCorners”功能轻松找到棋盘这些都是非常好的建议!我没有想到这一点,因为我太专注于使级联分类器无法工作。我将尝试你提出的这两种解决方案,并更新我得到的任何结果!非常感谢斯特克曼!嗨,克拉克克,谢谢你的详细建议。我已经尝试了你提到的所有东西,除了有很多正面图像(不是由createsamples生成的)。但是,因为我只使用一种图像(在本例中,是带有打印android的白皮书),无论我拍摄了多少“真实”正面图像,它们都将是相同的(只是随着光强度的变化),我认为createsamples的结果就足够了。如果我决定继续使用这个级联分类器解决方案,我会记住你的建议。非常感谢@我在训练中也遇到了类似的问题。实际上,这个想法是要有很多样本,这样分类器至少可以训练10个阶段。如果没有这些,我想你不会注意到任何明显的效果