Jump to content
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 про какой распознаватель речь?

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites

Продвинутая бинаризация изображения для 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-ка и есть оно самое :)

Share this post


Link to post
Share on other sites

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

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

Good \002.png 1 0 0 20 20

...

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

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

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

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

$ /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 какие то ошибки?? как бы понять?

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

в настоящий момент собрал какой то .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";

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

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

Share this post


Link to post
Share on other sites

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

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

Share this post


Link to post
Share on other sites

а как надо?

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

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

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

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

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

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

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

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

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now


  • Recently Browsing   0 members

    No registered users viewing this page.

×