- Предуслови
- Кораци у препознавању регистарске таблице помоћу Распберри Пи
- 1. Откривање регистарске плочице
- 2. Сегментација ликова
- 3. Препознавање ликова
- Случајеви неуспеха у препознавању регистарске плочице
- Остали успешни примери
Безбедност је увек била главна брига човечанства. Данас имамо камере за видео надзор у школама, болницама и на сваком другом јавном месту како бисмо се осећали безбедно. Према анкети ХИС-а, процењује се да је било око 245 милиона сигурносних камера инсталираних и функционисало још 2014. године, што је као да имате једну сигурносну камеру на сваких 30 људи на овој планети. Са напретком технологије, посебно у обради слика и машинском учењу, могуће је учинити ове камере паметнијим тако што ћете их оспособити за обраду информација из видео фида.
Видео феед са ових камера може се користити за препознавање лица, анализу узорака, анализу емоција и још много тога, што би га заиста приближило нечему попут „Божјег ока“ приказаног у филму ФФ7. У ствари, компаније за надзор попут Хиквисион-а и многих других већ су почеле да примењују ове функције у своје производе. Раније смо користили МАТЛАБ обраду слика за читање таблице са бројевима, данас ћемо у овом чланку научити како да препознамо и очитамо број регистарске таблице из аутомобила користећи Распберри Пи и ОпенЦВ. Користићемо неке случајне Гооглеове слике возила и написаћемо програм за препознавање регистарске плочице помоћу ОпенЦВ Цонтоур Детецтион, а затим ћемо прочитати број са плочице помоћу Тессерацт ОЦР-а. Звучи занимљиво, тачно !, па кренимо.
Предуслови
Као што је раније речено, користићемо ОпенЦВ библиотеку за откривање и препознавање лица. Зато обавезно инсталирајте ОпенЦВ библиотеку на Распберри Пи пре него што наставите са овим упутством. Такође напајајте свој Пи 2А адаптером и повежите га са монитором екрана ради лакшег отклањања грешака.
Овај водич неће објаснити како тачно ОпенЦВ ради, ако сте заинтересовани за учење обраде слика, погледајте ове ОпенЦВ основе и напредне водиче за обраду слика. Такође можете научити о контурама, откривању блоб-ова итд. У овом упутству за сегментацију слика користећи ОпенЦВ. Радићемо нешто слично овоме да бисмо на слици открили регистарску таблицу аутомобила.
Кораци у препознавању регистарске таблице помоћу Распберри Пи
Препознавање регистарске таблице или скраћено ЛПР укључује три главна корака. Кораци су следећи
1. Откривање регистарске таблице: Први корак је откривање регистарске таблице из аутомобила. Користићемо опцију контуре у ОпенЦВ-у да бисмо открили правоугаоне објекте за проналажење таблице. Тачност се може побољшати ако знамо тачну величину, боју и приближно место регистарске плочице. Алгоритам детекције се обично обучава на основу положаја камере и врсте регистарске плочице која се користи у тој одређеној земљи. Ово постаје замршеније ако слика нема ни аутомобил, у овом случају ћемо предузети додатни корак за откривање аутомобила, а затим и регистарске таблице.
2. Сегментација знакова: Једном када смо открили регистарску таблицу, морамо је изрезати и сачувати као нову слику. Поново се то може учинити лако користећи ОпенЦВ.
3. Препознавање знакова: Нова слика коју смо добили у претходном кораку сигурно садржи неке знакове (бројеве / абецеде). Дакле, на њему можемо извршити ОЦР (оптичко препознавање знакова) да бисмо открили број. Већ смо објаснили оптичко препознавање знакова (ОЦР) помоћу Распберри Пи.
1. Откривање регистарске плочице
Први корак у овом читачу регистарских таблица Распберри Пи је откривање регистарске плочице. Узмимо узорак слике аутомобила и кренимо са откривањем регистарске таблице на том аутомобилу. Тада ћемо користити исту слику и за сегментацију знакова и препознавање знакова. Ако желите да скочите право у код без објашњења, онда се можете померити до дна ове странице, где је дат целокупан код. Тест слика коју користим за овај водич је приказана у наставку.
Корак 1: Промените величину слике на жељену величину, а затим је додајте у сивим скалама. Шифра за исти је дата у наставку
имг = цв2.ресизе (имг, (620,480)) греи = цв2.цвтЦолор (имг, цв2.ЦОЛОР_БГР2ГРАИ) # претвори у сиву скалу
Променом величине помажемо нам да избегнемо проблеме са сликама веће резолуције, водите рачуна да плочица с бројевима и даље остаје у кадру након промене величине. Скалирање сиве боје је уобичајено у свим корацима обраде слике. Ово убрзава следећи синусни процес, па више не морамо да се бавимо детаљима боје приликом обраде слике. Слика би се трансформисала овако некако када се овај корак заврши
Корак 2: Свака слика ће имати корисне и бескорисне информације, у овом случају за нас су само регистарске таблице корисне информације, остале су прилично бескорисне за наш програм. Ове бескорисне информације називају се шумом. Уобичајено коришћење двостраног филтера (замагљивање) уклања нежељене детаље са слике. Код истог је
сива = цв2.билатералФилтер (сива, 11, 17, 17)
Синтакса је дестинатион_имаге = цв2.билатералФилтер (соурце_имаге, пречник пиксела, сигмаЦолор, сигмаСпаце). Можете повећати боју сигме и простор сигме са 17 на веће вредности да бисте замутили више позадинских информација, али припазите да се корисни део не замути. Излазна слика је приказана испод, као што видите да су детаљи позадине (дрво и зграда) на овој слици замагљени. На овај начин можемо избећи да се програм касније концентрише на ове регионе.
Корак 3: Следећи корак је занимљив тамо где вршимо детекцију ивица. Постоји много начина за то, најлакши и најпопуларнији начин је коришћење методе цанни едге из ОпенЦВ-а. Ред за исто је приказан испод
едгед = цв2.Цанни (сива, 30, 200) # Изврши откривање ивица
Синтакса ће бити одредишна_слика = цв2.Цанни (изворна_слика, прагВалуе 1, прагВалуе 2). Праг вредности 1 и вредност прага 2 су минималне и максималне вредности прага. Приказаће се само ивице које имају градијент интензитета већи од минималне вредности прага и мање од максималне вредности прага. Добијена слика је приказана испод
Корак 4: Сада можемо да почнемо да тражимо контуре на нашој слици, већ смо научили како да пронађемо контуре помоћу ОпенЦВ-а у нашем претходном упутству, па настављамо исто.
нтс = цв2.финдЦонтоурс (едгед.цопи (), цв2.РЕТР_ТРЕЕ, цв2.ЦХАИН_АППРОКС_СИМПЛЕ) цнтс = имутилс.граб_цонтоурс (цнтс) цнтс = сортед (цнтс, кеи = цв2.цонтоурАреа, реверсе = Труе) сцреенЦнт = Ноне
Једном када су бројачи детектовани, сортирамо их од великог до малог и узимамо у обзир само првих 10 резултата, игноришући остале. На нашој слици бројач може бити било шта што има затворену површину, али од свих добијених резултата наћи ће се и регистарска таблица, јер је то такође затворена површина.
Да бисмо филтрирали слику регистарске плочице међу добијеним резултатима, преместићемо све резултате и проверити која има контуру облика правоугаоника са четири странице и затвореном фигуром. Будући да би регистарска таблица дефинитивно била четворострана фигура правоугаоника.
# петља преко наших контура за ц у цнтс: # приближна контура пери = цв2.арцЛенгтх (ц, Труе) приближна = цв2.аппрокПолиДП (ц, 0,018 * пери, Труе) # ако наша приближна контура има четири тачке, онда # ми можемо претпоставити да смо пронашли наш екран ако је лен (приближно) == 4: сцреенЦнт = приближно пауза
Вредност 0,018 је експериментална вредност; можете се поиграти око тога да бисте проверили шта вам најбоље одговара. Или га подигните на следећи ниво помоћу машинског учења за тренирање на основу слика аутомобила, а затим тамо употребите праву вредност. Када пронађемо прави бројач, чувамо га у променљивој која се зове сцреенЦнт, а затим око њега нацртамо оквир правоугаоника како бисмо били сигурни да смо тачно открили регистарску таблицу.
Корак 5: Сад кад знамо где је регистарска таблица, преостале информације су нам прилично бескорисне. Тако можемо да наставимо са маскирањем целе слике, осим места на коме је таблица. Код за исто је приказан испод
# Маскирање дела који није маска таблице = нп.зерос (греи.схапе, нп.уинт8) нев_имаге = цв2.дравЦонтоурс (маска,, 0,255, -1,) нев_имаге = цв2.битвисе_анд (имг, имг, маск = маска)
Маскирана нова слика ће се појавити отприлике као испод
2. Сегментација ликова
Следећи корак у препознавању матичне плоче Распберри Пи је сегментација регистарске плочице са слике тако што ће је обрезати и сачувати као нову слику. Тада ову слику можемо користити за откривање карактера на њој. Код за обрезивање слике рои (Регија од интереса) из главне слике приказан је испод
# Сада је обрезивање (к, и) = нп.где (маска == 255) (топк, топи) = (нп.мин (к), нп.мин (и)) (боттомк, боттоми) = (нп.мак (к), нп.мак (и)) Обрезано = сиво
Добијена слика је приказана испод. Обично се додаје обрезивању слике, можемо је и сиво и по потреби ивицу. Ово је учињено ради побољшања препознавања ликова у следећем кораку. Међутим, открио сам да добро функционише чак и са оригиналном сликом.
3. Препознавање ликова
Завршни корак у овом препознавању матичне плоче Распберри Пи је заправо читање података регистарске плочице са сегментиране слике. Ми ћемо користити питессерацт пакет за читање знакова са слике, као што смо урадили у претходном тексту. Шифра за исти је дата у наставку
#Прочитајте регистарску плочицу тект = питессерацт.имаге_то_стринг (Цроппед, цонфиг = '- псм 11') принт ("Откривен број је:", текст)
Већ смо објаснили како да конфигуришемо Тессерацт мотор, тако да овде по потреби можемо поново да конфигуришемо Тессерацт ОЦР како бисмо постигли боље резултате ако је потребно. Откривени знак се затим штампа на конзоли. Када се компајлира резултат је приказан као доле
Као што видите, оригинална слика је имала број „ХР 25 БР9044“, а наш програм је открио да је на екрану исписала исту вредност.
Случајеви неуспеха у препознавању регистарске плочице
Комплетну датотеку пројекта, ово Распберри Пи препознавање регистарске таблице, можете преузети овде, садржи програм и пробне слике помоћу којих смо проверили наш програм. Без реченог, треба имати на уму да резултати ове методе неће бити тачни . Тачност зависи од јасноће слике, оријентације, изложености светлу итд. Да бисте постигли боље резултате, можете покушати да примените алгоритме машинског учења заједно са овим.
Да бисмо добили идеју, погледајмо још један пример када аутомобил није директно окренут према камери.
Као што видите, наш програм је могао правилно да открије регистарску таблицу и да је обреже. Али библиотека Тессерацт није успела да правилно препозна ликове. Уместо стварног „ТС 08 УЕ 3396“, ОЦР је препознао да је „1508 ие 3396“. Овакви проблеми могу се решити или употребом слика боље оријентације или конфигурисањем Тессерацт мотора.
Још један од најгорих сценарија је када контура не успе правилно да открије регистарску таблицу. На слици испод је превише позадинских информација и лоше осветљење, па чак ни програм није успео да идентификује регистарску таблицу са броја. У овом случају морамо се поново ослонити на машинско учење или побољшати квалитет слике.
Остали успешни примери
Већину времена квалитет слике и оријентација слике су тачни, програм је успео да идентификује регистарску таблицу и са ње прочита број. Доњи брзи снимци показују неколико успешних добијених резултата. Све тест слике и код који се овде користе поново ће бити доступни у овде датој ЗИП датотеци.
Надам се да сте разумели аутоматско препознавање таблице помоћу Распберри Пи- а и уживали сте сами да направите нешто цоол. Шта још мислите да се може урадити са ОпенЦВ-ом и Тессерацт-ом ? Јавите ми ваше мишљење у одељку за коментаре. Ако имате било каквих питања у вези са овим чланком, слободно их оставите у одељку за коментаре испод или користите форуме за друга техничка питања.