opencv createsamples没有错误,但没有找到样本

时间:2014-03-19 11:22:36

标签: opencv image-processing computer-vision training-data sample-data

我正在使用this教程,而我正处于从正面图片中创建大量样本的阶段。我正在使用Windows。

这是命令:

perl bin/createsamples.pl positives.txt negatives.txt samples 1500\  "C:\opencv_built\bin\Release\opencv_createsamples.exe -bgcolor 0 -bgthresh 0 -maxxangle 1.1\   -maxyangle 1.1 maxzangle 0.5 -maxidev 40 -w 80 -h 40"

这就是我得到的每个正面图像的输出:

C:\opencv_built\bin\Release\opencv_createsamples.exe -bgcolor 0 -bgthresh 0 -max
xangle 1.1\   -maxyangle 1.1 maxzangle 0.5 -maxidev 40 -w 80 -h 40 -img 60inclin
ation_315azimuth.jpg -bg tmp -vec samples0inclination_315azimuth.jpg.vec -num 62

Info file name: (NULL)
Img file name: 60inclination_315azimuth.jpg
Vec file name: samples0inclination_315azimuth.jpg.vec
BG  file name: tmp
Num: 62
BG color: 0
BG threshold: 0
Invert: FALSE
Max intensity deviation: 40
Max x angle: 1.1
Max y angle: 1.1
Max z angle: 0.5
Show samples: FALSE
Width: 80
Height: 40
Create training samples from single image applying distortions...
Done

这些消息似乎很成功,所以我进入了样本文件夹,希望看到1500个样本,但那里什么都没有!我注意到信息文件是<NULL>,这与此有什么关系吗?似乎没有任何错误,出了什么问题?

修改

我已将命令更改为包含所有内容的绝对路径,例如

perl bin/createsamples.pl C:\my_work\code\opencv-haar-classifier-training-master\positive_images\ C:\my_work\code\opencv-haar-classifier-training-master\positive_images\ samples 1500\  "C:\opencv_built\bin\Release\opencv_createsamples.exe -bgcolor 0 -bgthresh 0 -maxxangle 1.1\   -maxyangle 1.1 maxzangle 0.5 -maxidev 40 -w 80 -h 40"

但仍然没有运气!

6 个答案:

答案 0 :(得分:4)

我有类似的问题,我会尝试解释我做了什么,我希望它能解决你的问题。

首先,-info之后的NULL是正常的。正如OpenCV for opencv_createcamples的官方文档中所述,你需要输入一个图像(-img)或一组图像(-info)我会让你阅读文档以便进一步理解,但是对于这个例子你不需要和#39; t需要它。

其次,您不需要在此命令中放置绝对路径;这是我的命令:

perl bin/createsamples.pl  positives.txt negatives.txt samples 1500 "opencv_createsamples -bgcolor 0 -bgthresh 0 -maxxangle 1.1 -maxyangle 1.1 -maxzangle 0.5 -maxidev 40 -w 42 -h 40"

要做到这一点,一定要在你下载的gitHub目录的根目录(bin的父目录)确保你的positives.txt和否定。 txt在此目录中。另外,从OpenCV目录中复制粘贴opencv_createsamples.exe。

这样做我现在解释了主要的问题:该项目是在开始时为Ubuntu开发的,所以它很容易适用于Mac,但我认为你必须在Windows下。如果您还没有下载Cygwin,因为它主要使用Linux命令。

正如我所说,我被阻止了类似的问题,所以我尝试直接使用opencv_createsample而不是perl脚本来查看问题是否来自那里而且我注意到问题来自于这个事实我的positives.txt和negatives.txt是Windows格式而不是Unix,因此Perl脚本无法正确阅读

Windows和Linux之间的区别很大,Cygwin没有弥补差距,因此可能存在其他编码问题。所以我所做的肯定不是解决问题的最快方法,但这很简单。

我刚刚在我的电脑上安装了Ubuntu vm

使用TBB安装Opencv(许多互联网教程,最好的是来自OpenCV site的教程)。

我下载了gitHub Classifier training然后我按照给出的命令运行良好。

答案 1 :(得分:0)

另一个更简单的解释。让我们说你是OpenCV的新手(就像我一样),而你只是按照其中一个教程视频来创建你的第一个物体探测器。您可能通过从网上剪切粘贴来创建示例图像。样本图像必须是单色的,但不仅如此,它们必须是单通道,8位单色。如果您将样本设置为显示单色,但未更改其频道配置,则opencv_createsamples会忽略它,如果实际上有多个频道。

来源:〜/ apps / createsamples / utilities.cpp,函数icvStartSampleDistortion()。

答案 2 :(得分:0)

我遇到了类似的问题,也在Windows中,但我的解决方案是检查positives.txt和negatives.txt采用的是createsamples.pl文件可以理解的格式。我不确定这和你的问题是一样的,但我最终还是来了,所以其他人也可能。

我从与creatamples.pl相同的目录运行以下python脚本来形成文本文件,这似乎使perl文件对我有用:

&#13;
&#13;
'''
Run this from the folder containing the positive and negative samples' folders (Note: outputs the text files to this directory)
'''
import glob
import sys

def write_locations(folder, textFile):
    print('')
    file = open(textFile, 'w')
    for contents in glob.glob('{}/*'.format(folder)):
        try:
            fileName = contents.split("\\")[-1]
            file.write('\n./{0}/{1}'.format(folder, fileName))
            print('./{0}/{1}'.format(folder, fileName))
        except:
            pass

write_locations('positive', 'positives.txt')
write_locations('negative', 'negatives.txt')

print('\n -Done.')
&#13;
&#13;
&#13;

我的文件夹的组织可能与教程略有不同(我只是去了perl文件),但我所做的就是检查文本文件的内容如下:

&#13;
&#13;
./positive/1_1.png
./positive/1_2.png
./positive/1_3.png
./positive/1_4.png
&#13;
&#13;
&#13;

等等。

答案 3 :(得分:0)

我遇到了类似的问题,我将尝试解释我所做的事情,希望它能解决您的问题。

首先,将文件positives.datnegatives.dat命名为positives.txtnegatives.txt

第二步,将positives.datnegatives.dat文件复制并粘贴到当前目录中,然后运行:

perl bin/createsamples.pl positives.dat negatives.dat samples 1000 "opencv_createsamples -bgcolor 0 -bgthresh 0 -maxxangle 1.1 -maxyangle 1.1 maxzangle 0.5 -maxidev 40 -w 80 -h 40"

然后,检查您的示例文件夹,您应该看到包含许多矢量文件的正负文件夹。

答案 4 :(得分:-1)

我遇到了同样的问题。问题是我在文件名中有Captital字母,但在终端代码中没有。

答案 5 :(得分:-1)

这应该有效:

perl bin/createsamples.pl positives.txt negatives.txt samples 3000 "opencv_createsamples -bgcolor 0 -bgthresh 0 -maxxangle 0  -maxyangle 0 maxzangle 0 -maxidev 40 -w 32 -h 32"