Перейти к содержимому
Compvision.ru
K0rG

Распознавание номерного знака, расп. текста.

Recommended Posts

почитал я эту тему, пообедал, и решил внести свои пять копеек, в интересную на мой взгляд математическую задачу.

я новичок в компьютерном зрении просто читаю статьи...

так вот, есть в моем хозяйстве комерческий продук по распознанию номеров. сам его запускал на объекте.

и заметил я такую особенность, что жрет этот распознаватель с удовольствием и телефонные номера расклеянные на автомобилях как реклама. и метит их как белоруские.

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

поэтому, поделюсь соображениями:

1. для распознания номеров, мне кажется, рамку искать не надо. по крайной мере с этого начинать.

2. надо искать цифры и буквы, дабы их не так уж и много.

3. стандарные средства типа OCR мне кажется не подойдут, они заточены на обычный текст, ариал, тайм нью роман и т.д.(имеется ввиду сама форма символов)

у нас же есть четкие шаблоны скорее всего по госту. надо использовать их.

4. потом появилась мысль использовать библиотеку для распознования лиц. могу ошибится, так как в чтении до этой главы еще не дошел, но распознание там делается на основе образов. носа, глаз, губ.

ну а что нам мешать использовать цифры и буквы?

5. поиск по контрастам, не совсем хорош, так как при свете солнца, частенько отбрасывается тень на номер как от козырька (это из моей практики), и получается что пол номера темные сверху так сказать, а пол номера светлые.

здесь же в примерах были фотки тольнко с равномерным освещением, как в фото студи ;)/>

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

7. никто не упоминал о повороте номера. по часовой или против часовой стрелке на изображении. судя по распознователю лиц, в примерах которые мне попадались, наклоненные лица распознавались. в распознователе который у нас, наклоны допускаются до 30 градусов.

вот такие мысли на суд общественности...

1-2 все верно но как это реализовать загадка

3 однозначно существующие OCR не катят только самопал.

4 HAAR как в поиске лиц или SVM-HOG как в пешеходах применить можно даже работать будет но даже не приличном компе с ускорением через GPU меньше 100мс не получается. Возможно со временем оптимизируют но пока для риал тайма не подходит.

5 ни разу тени от козырька не видел больше наоборот пересвист

7 про какой распознаватель речь?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

не будем считать если изложите используемые у вас алгоритмы :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Собрал датасет 1302 номерных пластин (на 1302 терпение кончилось :) ), чтобы было на чем тренироваться:

post-1-0-40237700-1365492419_thumb.png

Пластины: LP_1302Plates.rar

Буквы и цифры с них: symblols.rar

Не аннотировал, если кто будет заниматься, буду благодарен если добавите аннотации.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

результат распознавания программой,так что могут быть ошибки особенно в регионе так как программа обучалась в основном на трех регионах. и еще момент 500 пикселей width нереальность 200 максимум, а в среднем камеры дают 120-150. Кстати как символы выделяли?

http://www.4shared.com/rar/L_utLMo1/test.html

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Сделал параметрическую модель расположения символов по ГОСТ.

Находил символы которые хорошо находятся (3 минимум (большие цифры) ), а затем по ним, методом наименьших квадратов настраивал параметры геом. модели, и после немного подстраивал по просветам. Дальше только нарезать квадратики.

500 пикселей - это растянуто для удобства они все разные были.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Еще наткнулся на проект распознавалки текста для android.

https://code.google.com/p/wordsnap-ocr/

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Продвинутая бинаризация изображения для OCR:

На входе:

post-1-0-10328800-1393761835_thumb.jpg

На выходе:

post-1-0-10342800-1393761847_thumb.jpg

Исходник:

ImageTresholding.cpp

Код написан на основе статьи (вбейте в поисковик):

"Binarising Camera Images for OCR - Xerox Research Centre Europe"

Первая pdf-ка и есть оно самое :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

решил по упражняться... на досуге... время есть.. в стране кризис.. да и самому интересно..

взял Вашу подборочку циферок, создал файлик формата

Good \002.png 1 0 0 20 20

...

у Вас кстати нету 001.png какойто хитрый замысел? ;)

руководствовался статьей:

http://habrahabr.ru/post/208092/

проблема возникла на этапе "opencv_createsamples.exe" и связана она стем что у меня линух :)

спросите почему линух? на винде не завелось, денег жалко было. а на пингвины все встало за 5 секунд без танцев с бубном. имеется ввиду библиотека opencv

по тестил на распознание лиц демо-пример работает, компилится на ура!

так вот вопрос "opencv_createsamples.exe" это то что то сторонее? исходники есть? как бы мне это в пингвинах найти или собрать ну и запусть???

не кто не подскажет??

хотя чую что Вы мне за сумашедшего считаете... типа какие нафиг пингвины? нам бы с виндой разобраться.. :(

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Да вообще-то эти тулзы при построении OpenCV из исходников получаются сами собой :)

Исходники естественно есть и лежат в папке apps.

Сами исходники opencv легко качаются здесь: https://github.com/Itseez/opencv

Проект собирается при помощи CMake. Тру-Линуксоидам обычно это под силу :)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

проблема возникла на этапе "opencv_createsamples.exe" и связана она стем что у меня линух :)

Если у тебя Линукс, то...

Ставил из репозитория? Тогда: /usr/bin/opencv_createsamples

Ставил из исходников (например, sudo make install)? Тогда тоже: /usr/bin/opencv_createsamples

Что может быть проще?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Nuzhny спасибо, теперь нашел.

возникла проблема с формированием файла "good.dat" что то у меня парсер на него ругается, на оф сайте описание тоже не сильно ситуацию прояснило, мне бы примерчик живой может есть у кого.

а то я уже кучу вариантов ему подпихнул а он все ругается, не пойму что хочет. а формат угадать не удается

все создал файлик.

теперь по идее надо создать bad.dat

вопрос а без него можно??

у меня что то без него не запускается... второй так сказать этап.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

посмотрел, понравился англоязычный пример. и скриптики есть.

однако всетаки с bad примерами или они там называются negatives

от куда их берем? и скока минимум?

может у кого есть подборочки отрицательных образцов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Это любые картинки на которых отсутствуют объекты. Желательно, чтобы эти изображения были не абы какими а максимально приближёнными к условиям съёмки, а также на них присутствовали объекты, похожие на искомые, но не они.

Количество негативных образцов сравнимо с количеством позитивных.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

мда... где их взять? не имея ложных срабатываний??

кстати... что то я посмотрел что у меня собралось:

$ /usr/bin/opencv_createsamples -info good.dat -vec samples.vec -w 20 -h 20

Info file name: good.dat

Img file name: (NULL)

Vec file name: samples.vec

BG file name: (NULL)

Num: 1000

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: 20

Height: 20

Create training samples from images collection...

и появляются вопросы:

Num: 1000 это всего 1000 штук обработано??? а должно гдето 2732 .. не ясно..

Invert: FALSE

Show samples: FALSE какие то ошибки?? как бы понять?

первоначальное обучение можно как то провести без отрицательных образов?

что то появилась идея... могу ли я в качестве отрицательных образов выбрат буквы, нарезанные так же как и цифры?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я брал видео(кадры) с камеры проезжающих машин отмечал там номер(не руками), сам номер это положительный пример, а все что с каким-то погрешность с ним не совпадает это отрицательный. На первом этапе отрицательные выбираются случайно, обучается каскад, прогоняются фото все сработки не совпадающие с номером добавляются к отрицательным и так пока результат будет улучшатся(благо все это работает автоматически). Но толку в распознавании номера от этого мало так долго да и не точно.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

у номеров же начинка разная,

хотя есть такая одинокая статья от корейцев каких то

http://www.academia.edu/3671126/License_Plate_Detection_Based_on_Haar-like_Features_and_Adaboost_Algorithm

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

приследую спортивный интерес, можно сказать от безделия..

в настоящий момент собрал какой то .xml файлик решил прогнать его,

взял готовые рабочие исходники:

http://b.brainscode.com/2011/04/face-detection-opencv.html

елки пальки!

String cascadeName =

"../../data/haarcascades/haarcascade_frontalface_alt.xml";

String nestedCascadeName =

"../../data/haarcascades/haarcascade_eye_tree_eyeglasses.xml";

вот думаю почему тут их два. и в какую строчку подставлять свой полученный файлик...

толку мало
а как надо?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Ради спортивного интереса можно открыть англо-русский словарь. Ведь там кристально ясно всё: каскад для лица и вложенный каскад для глаз. Имена переменных и названия каскадов-то не просто так даются!

Так вот, поясню на всякий случай: на кадре ищутся лица, а на найденных лицах глаза. Это тоже весьма очевидно, но...

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

а как надо?

Если вы про поиск номер, то все что видел из реально используемого основывается или на текстуре(номер очень контрастный) либо на контуре.

Если вам чисто для интереса то может стоит попробовать на лицах. В этом случае могу дать позитивные и отрицательные примеры (13000/12000) и если что то получится еще и по тестирую ваш каскад на реальных камерах.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

За Англорусский спасибо! :)

Я примерно так и догадывался. Что для моей ситуации не утешительно так как придется искать другой пример или править этот код. Что бы испытать свой файлик.

Может есть у кого готовенький исходник которому можно подсунуть картину?

Если вы про поиск номер, то все что видел из реально используемого основывается или на текстуре(номер очень контрастный) либо на контуре.

Вы очень уверенно говорите! Что то сами делали или знакомые?

На лицах есть штатная демка, я запускал ее на видео, на веб камере, есть конечно ошибки но все равно прикольно. Можно сказать наигрался. К сетевой камере мне библиотеку прикруть не удалось. Какую Вы цель приследуете? Смею предположить у Вас высокие требования к точности? Развивая хитрость демки можно не ограничиваться лицом и глазами а искать еще нос рот уши лоб волосы, но все это ресурсы компа. Как то видел рекламу что израильские по моему программистов индентифицируют лицо по десяти или двадцати критериям. Получается почти как электронной днк. Вы что то подобное хотите?

Поделитесь лучше если не секрет про распозновалку номеров. Ну вот хочется решить эту задачку. Если хотите могу аську оставить... Уж больно мне понравилось как комерческие продукты работают. У меня на одном компе 5 каналов с HD камер пережовывают. Красота!

Свои предположения как это может работать страницу назад в этой теме оставлял. Так же не так давно слышал о неком алгоритме похожести но что такое пока не нашел. Якобы очень эффективно решает проблему маштаба и поворота.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

За Англорусский спасибо! :)

Я примерно так и догадывался. Что для моей ситуации не утешительно так как придется искать другой пример или править этот код. Что бы испытать свой файлик.

Может есть у кого готовенький исходник которому можно подсунуть картину?

Вы очень уверенно говорите! Что то сами делали или знакомые?

На лицах есть штатная демка, я запускал ее на видео, на веб камере, есть конечно ошибки но все равно прикольно. Можно сказать наигрался. К сетевой камере мне библиотеку прикруть не удалось. Какую Вы цель приследуете? Смею предположить у Вас высокие требования к точности? Развивая хитрость демки можно не ограничиваться лицом и глазами а искать еще нос рот уши лоб волосы, но все это ресурсы компа. Как то видел рекламу что израильские по моему программистов индентифицируют лицо по десяти или двадцати критериям. Получается почти как электронной днк. Вы что то подобное хотите?

Поделитесь лучше если не секрет про распозновалку номеров. Ну вот хочется решить эту задачку. Если хотите могу аську оставить... Уж больно мне понравилось как комерческие продукты работают. У меня на одном компе 5 каналов с HD камер пережовывают. Красота!

Если вы iss пробовали то там точно с контрастом работают, работает быстро но цены кошмар.

Делал программу по распознаванию номеров с нуля на opencv, не текущий момент в районе 200 комплексов(камера+комп) висят и активно нас штрафуют :D , а пока ее писал разумеется смотрел как работают другие программы. Собственно по этому и не могу рассказывать подробности реализации. А про лица, сейчас просто работаю над детекцией лиц с последующим ..., использую стандартный каскад который вполне справляется но если сделаете свой который будет лучше с радостью попробую.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Вы молодец! Ну даже теперь и не знаю что и спросить! :) так как не можите, а мне то интересно :) эх-х-х все равно молодец!

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Создайте учётную запись или войдите для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать учётную запись

Зарегистрируйтесь для создания учётной записи. Это просто!

Зарегистрировать учётную запись

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас


  • Сейчас на странице   0 пользователей

    Нет пользователей, просматривающих эту страницу

×