Haar 创建样本解析错误

Posted

技术标签:

【中文标题】Haar 创建样本解析错误【英文标题】:Haar create sample parse error 【发布时间】:2011-11-08 22:05:29 【问题描述】:

我正在通过“opencv_createsamples.exe”在 opencv 2.1 中创建示例,但在第 1 行出现解析错误。

文件positives.txt 包含:

c:\haar\Positives\PosImg_0.jpg 1 175,120,275,240
c:\haar\Positives\PosImg_1.jpg 1 175,120,275,240
c:\haar\Positives\PosImg_10.jpg 1 175,120,275,240
...(--and so on )

而我在 cmd 中所做的是:

c:\Haar>C:\OpenCV2.1\bin\opencv_createsamples.exe  -info positives.txt -vec Posi
tivesMany.vec -num 15 -w 24 -h 24 PAUSE
Info file name: positives.txt
Img file name: (NULL)
Vec file name: PositivesMany.vec
BG  file name: (NULL)
Num: 15
BG color: 0
BG threshold: 80
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: 24
Height: 24
Create training samples from images collection...
positives.txt(1) : parse errorDone. Created 0 samples

所有信息文件路径都正确。

【问题讨论】:

【参考方案1】:

我遇到了同样的问题,我在this training page找到了解决方案

【讨论】:

【参考方案2】:

您需要删除 positives.txt 文件中的逗号。

像这样:

c:\haar\Positives\PosImg_0.jpg 1 175 120 275 240
c:\haar\Positives\PosImg_1.jpg 1 175 120 275 240
c:\haar\Positives\PosImg_10.jpg 1 175 120 275 240
...(--and so on )

另外,你的所有图片中的对象都在完全相同的位置,这似乎很奇怪......

【讨论】:

【参考方案3】:

我遇到了同样的问题,在我的情况下,我通过将 -num 参数传递给 opencv_createsamples 来解决它,该参数与描述文件中描述的图像样本总数完全相同。我想通过的次要号码也可以。

请注意,省略 -num 参数也会产生解析错误,即使当您想要处理所描述的所有样本时,它显然是一个冗余参数。

【讨论】:

【参考方案4】:

我有同样的错误信息,但在我的情况下,它是由其中的对象实例数量错误引起的。

【讨论】:

【参考方案5】:

我对注释文件内容有疑问。 opencv_createsamles 没有指出注释文件中发生的行号就中断了。 搜索需要的行一直很乏味和无聊。

我收到此错误消息:

Create training samples from images collection... OpenCV Error: Assertion failed (rect.width >= 0 && rect.height >= 0 && rect.x < image->width && rect.y < image->height && rect.x + rect.width >= (int)(rect.width > 0) && rect.y + rect.height >= (int)(rect.height > 0)) in cvSetImageROI, file /home/kostya/work/opencv/opencv-2.4.13.6/modules/core/src/array.cpp, line 3006
terminate called after throwing an instance of 'cv::Exception'
  what():  /home/kostya/work/opencv/opencv-2.4.13.6/modules/core/src/array.cpp:3006: error: (-215) rect.width >= 0 && rect.height >= 0 && rect.x < image->width && rect.y < image->height && rect.x + rect.width >= (int)(rect.width > 0) && rect.y + rect.height >= (int)(rect.height > 0) in function cvSetImageROI

我创建了简单的 perl 脚本来指向文件中的错误行。 当发现坏线时,我决定检查图像文件的内容和坐标。 碰巧,发现有些点坐标超出了图像尺寸。它是怎么发生的,我不知道。 我已经使用 opencv_annotation 来创建这个注释文件。 我的脚本代码如下:

#!/usr/bin/perl
use strict;
use warnings;

my $TARGET_FILE = 'annotations.txt';
my $MIN_W = 70;
my $MIN_H = 14;

main();

sub main

    open F, $TARGET_FILE;

    my $cur_line = 1;
    while (my $inp_str = <F>)
    
        print "line: $cur_line\n";

        if ($inp_str =~ m/0 0 0 0/)
        
            print "Bad coordinates! Line: $cur_line\n";
            close F;
            die;
        

        open W, '>temp_annotations.txt';
        print W $inp_str;
        close W;

        my $res = `opencv_createsamples -info temp_annotations.txt -bg negatives_cam.txt -vec temp.vec -w $MIN_W -h $MIN_H -num 1 2>&1`;

        if ($res =~ m/Error/)
        
            print "Broken line: $cur_line\n";
            print "Original error message: \n\n $res\n\n";
            close F;
            die;
        
        $cur_line++;
    
    close F;
    print "File is correct\n";

【讨论】:

【参考方案6】:

Hariseldon78 的解决方法对我有用。

为了完全清楚(正如我首先误解的那样),提供的数字(在 --num 参数中)不是行数,而是样本总数。

在我的情况下,错误消息甚至显示所需的数字。

> opencv_createsamples.exe -vec result.vec -info info.txt  
Info file name: info.txt
Img file name: (NULL)
Vec file name: result.vec
...
Create training samples from images collection...
info.txt(335) : parse errorDone. Created 460 samples

在最后一行中,460 是样本数(335 是我文件中的行数)。 因此,将 460 给应用程序作为要处理的样本数足以避免错误消息。

> opencv_createsamples.exe -vec result.vec -info info.txt -num 460
Info file name: info.txt
Img file name: (NULL)
Vec file name: result.vec
...
Create training samples from images collection...
info.txt(335) : parse error
Done. Created 460 samples

另外:我不确定错误消息是否重要,我可以说的是前面 2 个命令生成的 .vec 文件不同

【讨论】:

以上是关于Haar 创建样本解析错误的主要内容,如果未能解决你的问题,请参考以下文章

Hive 创建表:解析 json 文件时解析错误缺少“>”

Appsync“批量创建”解析器给出“映射模板”错误

解析错误代码 206:无法修改用户(解析服务器)

Spotify API 创建播放列表返回 错误: 状态:400,消息:'解析 JSON 时出错。'

解析日期在云函数中执行的创建作业中引发错误

从哪里获取背景/负样本图像进行 haar 训练?