Maciej Kasperski, Rafał Kozik
Sztuczna inteligencja
10.06.2008r

Number Plate Finder

1. Opis zadania

Podjęliśmy próbę wyszukiwania i rozpoznawania tablic rejestracyjnych na zdjęciach. Stworzony algorytm powinien być w stanie wyszukiwać i rozpoznawać rejestracje na zdjęciach o różnych rozdzielczościach i w różnej jakości. Naszym celem jest rozpoznawanie tylko nowych Polskich rejestracji.

2. Zastosowana metoda

Postanowiliśmy podzielić rozwiązywanie problemu na 4 fazy.

Faza 1 -- Czytanie i wstępne przetworzenie obrazu:

Najpierw generowane są dwa dodatkowe obrazy - jeden ze zwiększoną jasnością i zwiększonym kontrastem, oraz drugi ze zmniejszoną jasnością i ze zwiększonym kontrastem. Następnie wykonujemy dodatkowe obroty o -8 i 8 stopni, co łącznie daje 9 obrazów. Dzięki temu zmniejszamy wrażliwość algorytmu na oświetlenie na zdjęciu i kąty pod jakimi zostało zdjęcie wykonane.

Faza 2 -- Wyszukiwanie tablic rejestracyjnych:

Jeden krok tej fazy polega na zaaplikowaniu kilku konfigurowalnych przekształceń obrazu:

Pierwsze trzy przekształcenia są opcjonalne. Taki komplet ustawień będziemy nazywać konfiguracją.

Teraz dla każdego obrazu z fazy 1 aplikujemy każdą z konfiguracji będących parametrem wejściowym algorytmu (program implementujący algorytm pozwala na dodawanie / usuwanie / edytowanie konfiguracji).

Gdy już zaaplikujemy konfigurację do obrazu, można znaleźć w obrazie spójne białe obszary o prostokątnym kształcie (równoległym do krawędzi obrazu) przypominającym proporcjami boków tablicę rejestracyjną. Na tej podstawie otrzymujemy pary złożone z prostokąta i obrazu do którego się odnosi.

Teraz dla każdej takiej pary przeskalowujemy obraz przez nią reprezentowany do rozmiaru 300x100 pikseli i na takich obrazach kontynuujemy analizę.

Faza 3 -- Segmentacja:

Dla każdego obrazu wyjściowego z fazy 3 staramy się wybrać jak najlepsze ustawienia jasności, kontrastu i parametr dla binaryzacji. Realizujemy to losując 10 różnych ustawień i wybieramy to, dzięki któremu można znaleźć najwięcej sensownych spójnych białych obszarów (nazwijmy je SSBO) w obrazie. Jako SSBO rozumiemy obszary, które spełniają takie własności:

Dodatkowo mając już wstępnie przefiltrowane białe obszary, dokonujemy dalszej korekty SSBO:

Obrazy, których ilość SSBO jest mniejsza niż 6 są automatycznie odrzucane (korekta błędów poprzedniej fazy).

Po wykonaniu tych operacji dostajemy prostokąty w których powinny znajdować się pojedyncze litery na rejestracji. W praktyce sprawdza się to bardzo dobrze.

Faza 4 -- Rozpoznawanie liter

Dla każdej możliwej litery mamy zapisane wzorce ją reprezentujące. Rozpoznawanie liter polega na dopasowaniu jak najlepszego wzorca (po przeskalowaniu wzorca i testowanego obszaru do rozmiaru 64x64 piksele). Pod uwagę brana jest też procentowe podobieństwo ilości czarnych pikseli.

Wynikiem działania algorytmu jest zestaw napisów oznaczających wykryte rejestracje i liczby określające stopień dopasowania (od 0-1). Jedna rejestracja może zostać rozważona kilkukrotnie.

3. Krótki opis implementacji

Program testowy został zaimplementowany w języku C# (.net 2.0) z użyciem biblioteki AForge.NET. AForge.NET jest przez nas używane do wykonywania wszelkich operacji związanych z transformacją obrazu.

4. Testy, zestawienie i omówienie wyników

Pierwszy test i wyniki
Drugi test i wyniki

Pozostałe testy znajdują się w archiwum.

Testy wykonaliśmy na 19 zdjęciach. Część z nich została znaleziona w sieci, część wykonana samodzielnie. Na zdjęciach występują zróżnicowane warunki oświetleniowe. Na niektórych zdjęciach występuje więcej niż jedna rejestracja.

Z testów wyszło nam, że w 78,9% przypadków jako wynik z najlepszym stopniem dopasowania wystąpiła rejestracja, która znajduje się na zdjęciu. W 10,5% nastąpiła pomyłka 0 z O. Daje to bardzo dużą skuteczność. Wśród wszystkich rejestracji znajdujących się na zdjęciach, algorytm wśród wyników wymienił 71,4% z nich. Jesteśmy bardzo zadowoleni z tego rezultatu.

5. Uwagi i wnioski

Pierwotnie algorytm miał zostać zaimplementowany w inny sposób.

Faza pierwsza miała opierać się o transformatę Hougha, tak jak zostało to opisane w [1], jednak biały kolor rejestracji sprawił, że ciężko było je odseparować od zdjęcia (przeważnie występowało dużo jasnych obszarów) i udało nam się stworzyć własne rozwiązanie tego problemu.

Faza trzecia miała się opierać o sieci neuronowe jak w [2]. Udało nam się wyszkolić sieć, żeby rozpoznawała literki wzorcowe używane do nauki, jednak w praktyce skuteczność jej działania była bardzo niska. Prawdopodobnie mieliśmy zbyt mało danych do nauki (użyliśmy tylko referencyjnej czcionki) i stąd taka a nie inna skuteczność. Na szczęście okazało się, że użyte przez nas rozwiązanie jest skuteczne.

Główne problemy sprawiła sama konstrukcja Polskich rejestracji samochodowych

Zastanawialiśmy się jak można by było usprawnić projekt, żeby mógł zostać użyty do zastosowań praktycznych:

6. Źródła i odnośniki

[0] http://en.wikipedia.org/wiki/Automatic_number_plate_recognition

[1] http://visl.technion.ac.il/projects/2002w03/

[2] http://visl.technion.ac.il/projects/2002w02/

[3] http://code.google.com/p/aforge/

[4] Rozporządzenie ministra infrastruktury z dnia 22 lipca 2002 r. w sprawie rejestracji i oznaczania pojazdów (czcionka referencyjna).