Haar создать пример разбора ошибки - PullRequest
4 голосов
/ 02 сентября 2011

Я создаю образцы в opencv 2.1 с помощью "opencv_createsamples.exe", но у меня есть ошибка синтаксического анализа в строке 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

Все пути к информационным файлам верны.

Ответы [ 6 ]

10 голосов
/ 27 июня 2014

У меня была такая же проблема, и в моем случае я решил ее, передав параметру -num в opencv_createsamples точно точное количество образцов изображения, описанных в файле описания. Полагаю, что минорный номер тоже будет работать.

Обратите внимание, что пропуск параметра -num также приводит к ошибке разбора, даже если это явно избыточный параметр, когда вы хотите обработать точно все описанные примеры.

1 голос
/ 25 января 2013

Вам необходимо удалить запятую в вашем файле 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 )

Кроме того, кажется странным, что все ваши изображения имеют объект точнотам же ...

0 голосов
/ 06 сентября 2018

Обходное решение Hariseldon78 сработало для меня.

Чтобы было совершенно ясно (как я неправильно понял вначале), число для предоставления (в параметре --num) - это не номер строки, а общее числоsamples.

В моем случае в сообщении об ошибке даже отображается требуемое число.

> 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

Дополнительно: я не уверен, является ли сообщение об ошибке значительным или нет, я могу сказать, чточто файлы .vec, созданные двумя предыдущими командами, отличаются

0 голосов
/ 27 апреля 2018

У меня проблема с содержимым файла аннотации. 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";
}
0 голосов
/ 12 декабря 2014

У меня было то же сообщение об ошибке, но в моем случае оно было вызвано неправильным числом экземпляров объекта.

0 голосов
/ 06 июля 2012

У меня была такая же проблема, и я нашел решение на этой странице обучения

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...