Projekt został wykonany w ramach przedmiotu Metody i algorytmy sztucznej inteligencji.
Projekt wykonali:
Bolesław Jodkowski
Piotr Dąbrowski
Data wykonania: 22.06.2007
Rozpoznawanie tablic rejestracyjnych jest zadaniem OCR (Optical Character Recognition). Odpowiednie algorytmy muszą najpierw zlokalizować tablicę na zdjęciu, wyodrębnić poszczególne znaki, a następnie je rozpoznać. Do ostatniego zadania używa się najczęściej sztucznych sieci neuronowych.
Obecnie istnieją na rynku programy służące do tego celu, a systemy rozpoznawania tablic rejestracyjnych znajdują szerokie zastosowanie. Używa się ich na parkingach, do monitorowania ruchu, kontrolowania opłat na płatnych odcinkach dróg czy na przejściach granicznych. Wspomagają ponadto pracę policji.
Do znalezienia na zdjęciu tablicy rejestracyjnej użyte zostały metody przetwarzania obrazów, natomiast znaki są rozpoznawane przy pomocy sztucznej sieci neuronowej. Jako środowisko programistyczne wykorzystany został program MatLab oraz toolboxy: Neural Network Toolbox oraz Image Processing Toolbox.
2. Opis projektu
Celem projektu było utworzenie systemu rozpoznającego tablice rejestracyjne na podstawie analizy obrazu ze zdjęć cyfrowych.
Podczas pracy wyodrębniono pięć zagadnień, których opracowanie jest wymagane w celu skutecznej realizacji postawionego zadania:
Segmentacja obrazu - odszukanie tablicy na obrazie
Segmentacja obrazu - wyodrębnienie znaków z tablicy rejestracyjnej
Sieć neuronowa - wyznaczenie parametrów
Sieć neuronowa - uczenie sieci i generowanie zbioru uczącego
Rozpoznanie znaków za pomocą sieci neuronowej
W opisywanym projekcie udało się wstępnie opracować wszystkie z powyższych zagadnień, jednak każde z nich wymaga znacznego dopracowania, szczególnie pod względem wydajności (czasu działania) oraz uniwersalności (skuteczności w przypadku zmiennych warunków w których zostało zrobione zdjęcie). W poniższych podrozdziałach zostały opisane wspomniane zagadnienia.
2.1 Segmentacja obrazu - odszukanie tablicy na obrazie
Algorytm wyszukiwania tablicy na obrazie został zaimplementowany na podstawie pracy [1]. Jest to uproszczona metoda analizy częstotliwościowej obrazu ([3]). Zdecydowano się na tę metodę ze względu na jej mały stopień skomplikowania i intuicyjność, jednak podejrzewa się, że jej zastosowanie dałoby lepsze efekty.
W skład algorytmu wchodzą następujące etapy:
Wykrycie krawędzi za pomocą filtru Sobela (poziomego oraz pionowego)
Analiza rzutowania poziomego oraz pionowego obrazu:
Rzutowanie poziome oraz pionowe obrazu
gdzie:
f(x,y) - funkcja reprezentująca obraz (x, y - współrzędne punktu, f - jasność)
h - wysokość obrazu
w - szerokość obrazu
W miejscach, gdzie w wykresie funkcji py(y) znajdują się szczyty możliwe jest wystąpienie pasa obrazu, który będzie zawierał tablicę rejestracyjną. Później następuje analogiczna analiza pozioma wykresów px(x) na wykrytych pasach z kandydatami na tablicę rejestracyjną.
Analiza heurystyczna kandydatów na tablicę rejestracyjną
Ponieważ w punkcie 2. znajdujemy kilku (kilkudziesięciu) kandydatów na tablicę, musimy ustalić warunki, które pozwolą odrzucić te, które ich nie spełniają i nie mogą być tablicami rejestracyjnymi. Lista warunków jest następująca:
proporcje obrazu (stosunek szerokości do wysokości)
błąd średniokwadratowy składowych kolorów RGB
gradient zmian po krawędziowaniu
Kandydaci, którzy najlepiej spełniają te warunki, poddawani są segmentacji, aby wykryć pojedyncze cyfry i litery.
2.2 Segmentacja obrazu - wyodrębnienie znaków z tablicy rejestracyjnej
W chwili, gdy dostępna jest tablica rejestracyjna (lub lista potencjalnych tablic rejestracyjnych), następuje analiza obrazu tablicy w celu segmentacji na poszczególne znaki. Segmentacja następuje poprzez zastosowanie własnego algorytmu:
1. Znajdź element analizując sąsiedztwa kolejnych pikseli
2. Jak skończysz, wywołaj punkt 1. dla następnych pikseli umieszczonych na poziomej linii przechodzącej przez środek tablicy
w implementacji program wyszukuje sąsiadujące piksele o jasności mniejszej niż zadany próg, następnie zapisuje je na liście i wybiera ostatni z nich (usuwając go z listy). Czynności te powtarza w pętli tak długo, aż zabraknie sąsiadów na liście.
2.3 Sieć neuronowa - wyznaczenie parametrów
Do rozpoznawania liter i cyfr użyto sztucznej sieci neuronowej. Poniżej zamieszczony jest schemat takiej sieci[2].
Wyznaczone parametry sieci neuronowej mają następujące wartości:
Ilość wejść równa ilości pikseli w obrazie wejściowym, czyli 24*30 = 720.
Sieć klasyfikująca - 36 wyjść (po 1 dla każdego znaku)
Funkcja progująca - logarytmiczno-sigmoidalna, zgodnie z teorią ([4]) jest to funkcja, która "spisuje" się najlepiej w przypadku sieci klasyfikujących
70 neuronów w warstwie ukrytej.
zbiór uczący - w skali szarości
obrazki na wejściu - binarne
algorytm uczenia sieci: przyspieszony wstecznej propagacji błędu (algorytm skalowanej koniugacji "SCG") - implementacja MatLaba.
Nauczenie sieci wymagało doboru odpowiedniej konfiguracji parametrów. Zostały one dobrane empirycznie, na podstawie wyników działania uczenia sieci. Dla wielu konfiguracji sieć nie uczyła się (nie osiągała zadanego poziomu dokładności).
2.3 Sieć neuronowa - uczenie sieci i generowanie zbioru uczącego
Zbiorem uczącym były zestawy znaków (0 1 2 3 4 5 6 7 8 9 A B C D E F G H I J K L M N O P Q R S T U V W X Y Z) zapisane w arkuszu kalkulacyjnym, jeden pod drugim, różnymi czcionkami i z różnym formatowaniem. Całość została wydrukowana do pliku graficznego. Tak przygotowana matryca została poddana przetwarzaniu prostymi algorytmami w celu podziału na pliki i zmniejszenia do kompatybilnych z siecią neuronową rozmiarów.
Uczenie sieci miało następujące parametry:
Ilość epok: 10000 (jednak gdy sieć miała prawidłowe parametry kończyło się po 300 epokach)
docelowa dokładność: 0.01
Sieć neuronowa uczona jest przyspieszonym algorytmem wstecznej propagacji błędu (scaled conjugate gradient). Warstwa wejściowa ma 720 wejść, co odpowiada obrazowi 24x30 pikseli. Jedna warstwa ukryta posiada 70 neuronów. Funkcja aktywacji jest logorytmiczno-sigmoidalna, natomiast wyjść jest 36 (26 liter oraz 10 cyfr).
3. Wyniki badań
Poniżej przedstawiono przebieg przykładowego badania.
Zdjęcie wejściowe
Zdjęcie po progowaniu:
Wykres rzutowania poziomego px(x) powyższego obrazu:
Znalezione paski na podstawie rzutowania:
Po rzutowaniu pionowym znaleziono następujących kandydatów na tablicę:
Znalezione elementy przy segmentacji
tablicy:
Odczytany wynik:
Badanie tablicy lekko przekrzywionej:
Znaleziona tablica:
Wynik:
Pewność sieci w tym przypadku wskazuje jej niewłaściwe wytrenowanie.
4. Wnioski
Podczas pracy nad projektem zmierzono się z szerokim zakresem zagadnień od przetwarzania obrazów, przez algorytmy segmentacji, aż do uczenia oraz projektowania sieci neuronowych i rozpoznawania za ich pomocą znaków.
Każde z tych zagadnień wymaga szerszej analizy. Z tego względu podczas realizacji ograniczono działania do rozwiązań zapewniających względnie dobre wyniki. Pominięto zupełnie efektywność czasową programów, co powoduje, że rozpoznawanie tablic może działać zbyt wolno. Poprawienie szybkości działania można byłoby osiągnąć przez dopracowanie algorytmów i implementacji (np. zwiększyć ilość działań na macierzach w MatLabie), lub przepisać całość w języku niższego poziomu. Dodatkowo metody wyszukania tablicy na obrazie są zupełnie nieodporne na ustawienie jej pod kątem. Problem ten można rozwiązać stosując algorytmy oparte np. na analizie częstotliwościowej obrazu [3]. Można poza tym zastosować techniki obracające i prostujące tablicę. Ponadto nie udało się nauczyć sieci neuronowej w odpowiednim stopniu. Spowodowane to jest zbyt mało licznym zbiorem uczącym. Efekt uczenia można byłoby polepszyć, poprzez wzbogacenie zbioru uczącego o litery przesunięte i zakłócone.
Czynnikiem, który wpływa na małą uniwersalność opracowanego oprogramowania jest konieczność zastosowania stałych i parametrów w programach. Rozwiązaniem tego problemu będzie uzmiennienie tych stałych w zależności od cech przetwarzanego obrazu, jednak wymagałoby to głębszej analizy i większej ilości badań.
Oprogramowanie jest względnie odporne na występowanie innych napisów na samochodzie, jednak ze względu na niedoskonałość sieci neuronowej, duże zakłócenia wprowadzają plamy i inne zakłócenia (np. zardzewiałe nity) na tablicy rejestracyjnej.
Skuteczność opracowanego oprogramowania ogranicza się do
obrazów, na których jest mała ilość roślinności. Związane jest to z dużą ilością
szybkich zmian obrazu w tych rejonach, co zakłóca proces wyszukiwania tablicy
(rośliny, przy wybranej metodzie traktowane są jako tekst). Efektu nie poprawiło
usunięcie składowych zielonych z obrazu.
5. Bibliografia
[1] Ondrej Martinsky, Algorithmic and mathematical principles of automatic number plate recognition systems, Brno University of Technology, 2007
[2] http://adam.imir.agh.edu.pl/dydakt/neur/jd/Image421.gif
[3] Beatriz Díaz Acosta, Experiments in image segmentation for automatic us license plate recognition, Virginia Polytechnic Institute and State University, 2004
[4] Pomoc programu MatLab
[5] http://rejestracja.blog.pl/
[6] http://www.polskietablice.prv.pl/