The aim of the project is to create a method allowed to identify a plate region from the picture and then to recognize a characters on this plate. For extracting the plate edge detection algorithms, binarization algorithms, dilation algorithms and localization algorithms are used. For optical characters recognition OCR library is used. The edge detection algorithms based on identifying points in a digital image at which the image brightness changes sharply or more formally had discontinuities. The purpose of detecting sharp changes in image is to capture important events. For detecting edges we use gradient magnitude with Prewitt arguments. image captured from the camera is converted to the binary image consisting of only 1's and 0's by thresholding to pixel values of "black" for all pixels in the input image with luminance less than threshold value and "white" for all other pixels. While dilation the image is captured with regard to obtain only the region where is situated our plate, it gives us an opportunity to reject needless edges like sharp of car or brand over the plate. On each pixel p we put a segment d and we count a number of pixels on it. While the number of pixels is less then threshold t we make this area black. Localization algorithms based on searching a big white pixels region and extract this area from the picture. Thanks to extracting operations we receive a searching area and use OCR library which gives us middle satisfying results. It is a problem with simlilar characters like O and 0 , moreover OCR has a problem with weak contrast of the image.
Automatyczne rozpoznawanie tablic rejestracyjnych (ang. automatic number plate recognition, ANPR) jest dość dobrze znanym problemem. Początki systemów opartych na tej technologii sięgają lat 70. i od tego czasu były dość mocno rozbudowywane. Systemy typu anpr/lpr mają ogromne spektrum zastosowań jak utrzymanie porządku na płatnych drogach i strefach, do kontroli średniej prędkości, ochrony stacji benzynowych, identyfikacji pojazdów czy też do kontroli ruchu na przejsciu granicznym. Używane są również do śledzenia pojazdów przez władze (np. w Londynie) z czym wiążą się pewne kontrowersje. Jest wiele komercyjnych programów realizujących to zagadnienie. Ich producenci chwalą się dokładnością rzędu 95-98% i sygnalizują z czego wynikają niedokładności. Jest wśród nich złe oświetlenie, zabrudzone tablice oraz zdjęcia wykonane pod kątem.
Większość systemów ANPR działa w oparciu o następujący schemat:
Celem naszego projektu było zlokalizowanie tablicy rejestracyjnej na zdjęciu i następnie jej rozpoznanie. Ze względu na złożoność problematyki i ograniczony czas skupiłyśmy się głównie na skuteczności lokalizowania tablic. W tym celu posłużyłyśmy się techniką wykrywania opartą na krawędziach. Kolejnym celem było zrealizowanie pkt 4 i 5. Jako problem dodatkowy potraktowałyśmy rozpoznawanie znaków. Użyłyiśmy w tym celu gotowej biblioteki OCR, rezygnując przy tym z implementacji własnej sieci neuronowej. Wydawało nam się, że nie będzie ona lepsza od znalezionej, szczególnie że starałyśmy się tak napisać program, aby był w miarę uniwersalny i rozpoznawał tablice bez względu na kraj w którym zostały wykonane oraz styl liter.
Program został napisany w języku JAVA (6.0) pod środowiskiem Eclipse z wykorzystaniem biblioteki graficznej Java Advanced Imaging oraz wersji testowej bibliteki ApriseOCR. Większość operacji wykonywanych przez program to przetwarzanie graficzne oraz praca na binarnej, dwukolorowj tablicy.
Program został dostosowany do obsługi plików BMP w skali szarości, w rozdzielczości bliskiej 800x600, gdzie samochód wypełnia ponad pół szerokości obrazu. Ze zdjęciami o innej rozdzielczości program może sobie gorzej radzić.
Proces rozpoznawania można podzielić na następujące fazy, które zostaną wytłumaczone
na przykładzie poniższego zdjęcia:
Do wykrywania krawędzi posłużyłyśmy się metodą filtorwania gradientowego
(ang. gradient magnitude ) z macierzami Prewitta jako argumentami.
Całość opisana jest na stronie [4].
Po przetworzeniu obraz ma następującą postać:
Aby móc w prosty sposób znaleźć krawędzie, które mogą być tekstem powyższy obrazek
poddajemy binaryzacji - w zależności od wartości numerycznej piksela
nadajemy mu biały bądź czatny kolor.
Kolejnym krokiem jest odsianie krawędzi, które nas nie interesują. Stosujemy do
tego metodę dylatacji (ang. dilation) opisaną w [5]. Polega ona na tym,
że po kolei, przez każdy z pokolorowanych (białych) pikseli p prowadzimy
poziomy odcinek o długości d, tak aby wyróżniony piksel był pośrodku odcinka.
Następnie zliczamy liczbę białych pikseli przez które przechodzi odcinek.
Jeśli jest ich mniej niż pewna wartość progrowa t, to p jest zaczerniany.
Operację powtarzamy drugi raz, ale dla odcinków pionowych.
Efekt tego jest następujący:
Na tak przygotowanym obrazku łatwo jest już zlokalizować tablicę. W tym celu
szukamy dużych skupisk białych pikseli. Jako skupisko definiujemy zbiór
pikseli, gdzie między każdą parą da się dojść, w dowolnej liczbie kroków o
długości mniejszej niż d, po białych pikselach. Znajdujemy w ten sposób szereg
skupisk, które mogą być tablicą. Wyznaczamy z nich najbardziej prawdopodobną tablice,
zakładając że szukane skupisko jest raczej na dole obrazka i ma większą szerokość niż wysokość.
Tak lokalizujemy pożądaną tablicę:
Ostatnim krokiem jest rozpoznanie znaków tablicy. Używamy do tego biblioteki ApriseOCR, co daje razultaty średnie. Najczęstrzym problem tutaj jest złe rozpoznanie jednego znaku (np. problem rozpozniana O oraz 0). Odkryliśmy również, że program nie radzi sobie ze zbyt słabym kontrastem zdjęć.
Aby rozpoznać poszczególne znaki musimy je najpierw zlokalizować.
Mając daną tablicę staramy się wyodrębnić znaki,
które zdefiniowałyśmy jako zbiór połączonych ze sobą czarnych pikseli. Z uwagi na to,
że większość czasu poświęciłyśmy na opracowanie metody wyszukiwania tablicy, nie zdołałyśmy
zaimplementować własnej sieci neuronowej. Co więcej, gotowe sieci neuronowe
dla JAVY, służące do rozpoznawania tekstu nie oferowały w cale lepszej szkuteczności
niż powyższa biblioteka. Zauważmy też, że sieć neuronowa może
nie poradzić sobie z tablicami innego kraju niż ten, na którym została wyternowana.
Początkowo chciałyśmy skorzystać z algorytmu lokalizacji tablicy pod nazwą smearing opisanego w [3] polagającego na zliczaniu pikseli w poziomych, następnie w pionowych liniach i zaczernianiu ich w wypadku, gdy ich liczba nie mieści się w określonym przedziale. Po zaimplementowaniu metody okazało się, że rezultaty są niezadowalające. Wynik tej metody był często przypadkowy i właściwie nigdy nie potrafił odnaleźć tablicy. Przypuszczamy, że wartości progowe muszą być bardzo precyzyjnie dobrane, być może muszą być adaptacyjne, a obraz musi być specyficznie przefiltrowany i zbinaryzowany. Ostatecznie porzuciłyśmy ten pomysł, gdyż perspektywy sukcesu były nikłe.
Okazało się, że nasza kolejna implementacja algorytmu wyszukującego tablice, oparta na krawędzich daje bardzo dobre rezultaty. Po przeprowadzeniu szeregu (przetestowano ok 50 tablic) testów na tablicach zagranicznych i polskich możemy oszacować skuteczność metody wyszukiwania tablic na blisko 70%, co jest wynikiem bardzo dobrym jak na semestralny (własciwie nawet półsemestralny)projekt, zwłaszcza,że użyto kilku nieskomplikowanych metod. Niestety taka metoda oparta na krawędziach nie działa zbyt dobrze, gdy na obrazku krawędzi jest bardzo dużo np. samochód sportowy z duża liczbą napisów na karoserii. Na przykładzie poniżej przedstawoiny jest samochód z dużą liczbą krawędzi na przedniej masce.
Wejście:
Znaleziona tablica:
Być może najsłabszym ogniwem naszej metody jest rozpoznawanie samego tekstu. Nasze podejście do tego problemu może mieć problemy ze zdjęciami pod dużym kątem. Taki problem jest stosunkowo trudny i przypuszczamy, że proste metody, polegające na określeniu kąta przekrzywienia za pomocą prowadzonych linii tak, by określić brzeg tablicy, mogłyby nie dawać od razu dobrych rezultatów. Istnieje też problem rozpoznania znaków o słabym kontraście, aczkolwiek ten można częściowo zneutralizować, poddając zdjęcia automatycznej obróbce przed zaaplikowaniem ich do naszego programu. Program nie radzi sobie również dobrze z tablicami kwadratowymi, gdzyz założono ich prostokątny kształt, a także z tablicami gdzie jasne litery umieszczone są na ciemnym tle (np. stare polskie tablice). W takim przypadku program poprawnie lokalizuje tablicę, ale problemem jest rozpoznanie liter. Można by oczywiscie zastosować odwrócenie kolorów,jeśli program miałby być stosowany wyłącznie do tablic starego typu. Na koniec nasza biblioteka ApriseOCR, ma nieraz problem z rozpoznaniem samych liter, gdyż pomimo dużego obrazka ze zdjęciem samochodu, sama tablica rejestracyjna jest czasem niskiej rozdzielczości. Ostateczną skuteczność naszego programu szacujemy na niecałe 30%. Przy interpretacji wyników naszego programu należy wziąć jego uniwersalność i brak uwarunkowania od stylu tablic poszczególnych państw.
Nasze doświadczenie pokazało, że problem rozpoznawania tablic rejestracyjnych nie jest problemem prostym. Udało nam się znaleźć bardzo dobrą metodę wykrywania samej tablicy i przypuszczamy, że podobne metody, w połączeniu z innymi, są wykorzystywane w systemach komercyjnych.
Problemy takie jak zdjęcia tablic pod kątem lub zbyt duże nagromadzenie krawędzi są problemami trudnymi i być może materiałem na osobny projekt. O ile nasz program potrafi zlokalizować tablicę ustawioną pod kątem, to rozpoznanie liter bez jej normalizacji jest bardzo trudny. W naszym programie należy też poprawić samą metodę rozpoznawania liter, która prawdopodobnie pozwoliłaby na podwojenie skuteczności rozpoznawania.