正如我在上一篇文章here中所解释的那样,我正在尝试生成一些cascade.xml
文件来识别将在我的iOS应用程序中使用的欧元硬币。无论如何,我在理解如何生成.vec文件作为opencv_traincascade
的输入时遇到了许多困难。这是因为我听到了许多不同的观点:有人告诉我,向量文件必须只包括只包含待识别对象的正面图像;其他人(以及我的教程中的阅读)说,向量文件必须包括“样本”图像,换句话说,opencv_createsamples
添加了要识别的对象的随机背景。在文字中有:
opencv_createsamples -img positives/1.png -bg negatives.txt -info 1.txt -num 210 -maxxangle 0.0 -maxyangle 0.0 -maxzangle 0.9 -bgcolor 255 -bgthresh 8 -w 48 -h 48
产生了12000幅图像。最后,我使用以下内容创建了.vec文件:
cat *.txt > positives.txt
opencv_createsamples -info positives.txt -bg negatives.txt -vec 2.vec -num 12600 -w 48 -h 48
因此,我想问一下,哪些正确的图像将包含在以下两个矢量文件中:
此外,进行训练的最后命令是哪一个?到目前为止,这是我用过的:
opencv_traincascade -data final -vec 2.vec -bg negatives.txt -numPos 12000 -numNeg 3000 -numStages 20 -featureType HAAR -precalcValBufSize 2048 -precalcIdxBufSize 2048 -minHitRate 0.999 -maxFalseAlarmRate 0.5 -w 48 -h 48 -mode ALL
其中.vec文件包含12000个样本图像(背景+硬币识别)。如果.vec文件只包含正面图像(只有硬币),我应该如何告诉opencv_traincascade
使用样本图像进行培训?
我真的需要知道如何做正确的事情,因为我已经开始了很多训练,然后导致没有正确的结果,因为它们需要很多小时或几天来执行,我不能再浪费时间了。
感谢大家的关注。
UPDATE I使用LBP创建了一个cascade.xml
文件。看看如果我将一个用作训练样本的映像提供给一个简单的OpenCV程序会发生什么:
而图像如下所示:
根本不起作用。我真的不知道我在哪里犯了这个错误。
更新,首先,将正图像转换为灰度可能会有帮助吗?
发布于 2016-02-01 04:26:10
我使用了INRIA培训http://pascal.inrialpes.fr/data/human/的negative samples
数据库
而这个投入(png与α透明围绕硬币):
使用此命令如下:
opencv_createsamples -img pos_color.png -num 10 -bg neg.txt -info test.dat -maxxangle 0.6 -maxyangle 0 -maxzangle 0.3 -maxidev 100 -bgcolor 0 -bgthresh 0
产生这样的输出:
所以背景颜色显然不起作用。然而,在开始时转换为灰度给了我这个输入:
相同的命令产生如下输出:
我知道这不是你所有问题的答案,但也许它仍然有帮助。
发布于 2016-02-01 01:46:59
OpenCV级联(HAAR,LBP)能够很好地检测出具有永久性特征的物体。例如,所有的脸都有鼻子,眼睛和嘴在同一个地方。OpenCV级联被训练为在所需的对象类中搜索公共特性,而忽略在不同对象之间变化的特性。问题是,级联使用矩形搜索窗口,但硬币是圆形的。因此,一枚硬币的形象总是有一定的背景。因此,硬币的训练图像必须包括所有可能的背景,这样分类器才能忽略它们(否则只能在特定的背景上检测硬币)。
因此,所有训练样本必须具有相同的图像比,硬币的大小和位置(以硬币为中心的方形图像,硬币直径= 0.8-0.9图像宽度),以及不同的背景!
https://stackoverflow.com/questions/35125138
复制相似问题