Нужны каскады Хаара для монет (особенно евро)

Мне понадобится каскадный классификатор haar для обнаружения монет, в частности евро, если они существуют. Я пытался создать свой собственный в течение нескольких дней, но результаты всегда были плохими. Или, может быть, вы знаете хороший учебник? Спасибо


person SagittariusA    schedule 27.01.2016    source источник
comment
Почему вы голосуете за мой вопрос, если это (stackoverflow.com/questions/9015498/) спросили то же самое?   -  person SagittariusA    schedule 27.01.2016


Ответы (1)


Вы, вероятно, не найдете много каскадов, предварительно сделанных для монет или даже специально для евро. Я бы порекомендовал тренироваться самостоятельно.

Что касается учебных пособий, я использовал учебное пособие по opencv 3.0 traincascade, когда создавал мой каскад LBP, но он также создает HAAR. Я также использовал mergevec, чтобы увеличить число положительных результатов.

В основном то, что я сделал, когда делал свой, было следующим:

Я сгенерировал положительные векторы, используя opencv_createsamples (который находится в установке opencv) и mergevec. Я в основном только что создал все свои векторы из небольших партий отдельных позитивных изображений и всех негативных изображений, которые дали мне несколько позитивных изображений для работы. Затем я использовал mergevec и объединил эти векторы вместе, чтобы получить один векторный файл, который мог бы использовать opencv_traincascade.

Затем я провел opencv_traincascade с этим новым положительным вектором из mergevec и отрицательными, которые у меня были. Я думаю, что у меня получилось около 7000 негативов и около 13000 позитивов, что, вероятно, немного перебор, но я получил действительно хороший каскад. Старайтесь, чтобы ширина и высота были ниже примерно 100х100, иначе на тренировки уйдет вся неделя.

person Rachel L    schedule 27.01.2016
comment
спасибо от души за добрый ответ. Я хочу, чтобы больше таких нежных людей, как вы, приложили немного усилий, чтобы ответить, даже если некоторые вопросы могут показаться им глупыми. В любом случае, я изучал и следовал этому (mememememememe.me/training-haar-cascades) учебник в течение нескольких дней, который объясняет, что именно вы написали. Первая пробная версия была действительно разочаровывающей. Теперь мой Mac снова тренировался более 8 часов; с 1100 позитивами и 1700 негативами. Я не могу найти так много изображений евро на изображениях Google, и я не знаю, где скачать столько изображений в качестве фона / негативов. - person SagittariusA; 28.01.2016
comment
Наконец-то я знаю, что я на правильном пути... посмотрим. Еще раз спасибо! - person SagittariusA; 28.01.2016
comment
Что я сделал, чтобы получить кучу изображений, так это снял короткое видео объекта, а затем разделил кадры (на самом деле вы можете сделать это через opencv, просто используя videocapture и сохраняя каждый кадр как что-то вроде /destinationfolder/imagenameXYZ, и просто увеличьте это для каждого кадра. Затем вам нужно просмотреть и отсеять действительно плохие изображения, но это проще, чем найти миллиард изображений в Интернете. Фон прост по сравнению с этим - http://tutorial-haartraining.googlecode.com/svn/trunk/data/negatives/ работает, просто убедитесь, что ни на одном из негативов нет монет. их. - person Rachel L; 28.01.2016
comment
Хорошо, я попробую с видео, как вы предложили. Только одно: я полагаю, что программа видеозахвата будет использовать веб-камеру, не так ли? Но если у меня есть видео монеты, то будет виден и стол, или другая поверхность, на которой лежит монета. Что насчет этого? Это проблема? Или обрезать фото/рамку вокруг монеты так, чтобы была видна только эта последняя? - person SagittariusA; 28.01.2016
comment
Videocapture capture(0); открывает веб-камеру, Videocapture capture("file/name/here.avi"); открывает созданный вами видеофайл (я снял его на телефон, а потом перекинул). Вы хотите, чтобы изображение было как можно обрезано, с одним цветом для фона (лучше всего черный и по умолчанию для opencv_createsamples, но вы можете изменить его на любой цвет, например, синий или белый и т. д.), и это можно сделать либо в этом opencv программу, которая получает кадры, или опубликуйте с помощью графического редактора, такого как paint.net. - person Rachel L; 28.01.2016
comment
Вы закончили хаар каскад? Я ищу один для банкнот евро, и мне интересно, придется ли мне тренировать новый - person Biribu; 11.02.2017
comment
Я закончил свой каскад (и он работал нормально). Вам нужно будет сделать новый для банкнот евро, но это должен быть тот же метод - снять его, взять кадры, отсечь плохие изображения, обрезать хорошие, и вот ваши положительные изображения. Фоновая группа (тот учебник-обучение) все еще должна работать, просто удалите все изображения с банкнотами евро. - person Rachel L; 11.02.2017
comment
Спасибо Рэйчел. Один вопрос, когда вы говорите: снимайте, хватайте кадры... снимайте что? банкноты? сколько картинок вы использовали для монет? должны ли они быть все изображения одинакового размера? Вы поворачивали и обрезали изображения, чтобы они были одинаковыми по W и H? Я пробовал пару раз с опцией createamples и 3-4 изображениями, но это не работает. Думаю, у меня какие-то проблемы с опцией W и H. Я нашел несколько веб-страниц с фоновыми изображениями, я думаю, что могу получить около 3k без банкнот на них. - person Biribu; 15.02.2017
comment
По сути, я просто записал видео рассматриваемых объектов, а затем вытащил кадры, чтобы у меня была куча разных неподвижных фотографий их под разными углами (программа Opencv, которая просматривала видео и сохраняла каждый кадр). Я использовал 10000 изображений для позитивных фотографий (с пометками) и 3000 изображений для негативных фотографий (без). Я обрезал все позитивные изображения, чтобы ширина и высота были одинаковыми (150 пикселей), но оставил вращение. - person Rachel L; 15.02.2017
comment
Вчера я сделал видео и получил около 6k изображений одной банкноты и стороны. Я руковожу сейчас тренировочной командой. Я думаю, что это займет еще 3-4 дня, так что я скажу тогда. Я не обрезал свои позитивные изображения. Я попробую, если не получу хорошего результата. Чего я действительно не понимаю, так это обрезки позитивных изображений. - person Biribu; 16.02.2017
comment
Возможно, мой английский не достаточно хорош, чтобы объяснить это, я постараюсь изо всех сил: Ширина банкноты примерно в 2 раза больше ее высоты. поэтому, если я сделаю снимок в горизонтальном положении и обрежу его так, чтобы была только банкнота, это будет что-то вроде: 150x60 (ШxВ), если теперь я поверну его на 90º, сделаю снимок и обрежу его, это будет 60x150 (ШxВ). ). Это нормально? Должен ли я повернуть изображение, чтобы вместо этого оно было 150x60? Кроме того, если я поверну изображение (исходное) на 45º, как мне обрезать изображение? ширина и высота будут выше, чем у двух других изображений... Вы понимаете, что я имею в виду? - person Biribu; 16.02.2017
comment
Я понимаю, что вы имеете в виду - мне повезло, что мой каскад смотрел на довольно квадратные объекты, так что это не проблема. Я думаю, что вы все можете оставить их в одном и том же вращении, и createamples повернет его для вас, когда он сгенерирует позитивы, но я не уверен на 100%. - person Rachel L; 16.02.2017
comment
Ну, через несколько дней, чтобы получить мой каскадный файл хаара. Я пытался распознать банкноту в 5 евро, и мне просто повезло на одном изображении. В других 4 пробовал, ничего. Даже то, что некоторые из тех 4, откуда из папки позитива... Что вы сделали с фоном ваших изображений? ты покрасил в черный? У меня коричневый (цвет таблицы) с некоторым отражением света, может ли это повлиять на результат алгоритма? Черт возьми, у меня 1400 позитивных изображений на одну сторону одной банкноты, если мне придется перекрашивать их все, я уйду на пенсию, занимаясь этим. - person Biribu; 20.02.2017
comment
Я использовал черный и по умолчанию для createsamples, но вы можете использовать любой цвет. Может быть, коричневый слишком близко, но я не могу быть уверен, не видя его. Вы также можете попробовать больше позитивных изображений — я использовал 10000 для одного объекта. Вы также можете поиграть с переменными minNeighbors, а также переменными минимального и максимального размера в вызове cascade.detectMultiScale в коде — уменьшение количества minNeighbors должно дать вам больше обнаружений (хотя и с большей вероятностью ложных срабатываний). - person Rachel L; 20.02.2017