Rozpoznawanie tablic rejestracyjnych z użyciem biblioteki OpenALPR.


Założenie było proste - sprawdzić skuteczność biblioteki OpenALPR dla tablic rejestracyjnych w europejskim formacie. Jedną instalację przez linuxowy terminal, jeden ułatwiający życie programik w Javie i setkę zdjęć cudzych samochodów później miałam już wynik, który mogę podsumować krótko: Jak sobie zapłacisz - tak będziesz miał.

CO TO JEST OPENALPR?

OpenALPR to darmowa biblioteka open-source, która może być używana w wielu językach programowania - C#, Java, Node.js, Go i Pythonie. Na wejściu podajemy jej zdjęcie lub wideo, a ona wypluwa tekst odczytany z widocznych na nim tablic rejestracyjnych. Można na tym w zasadzie skończyć, ale żeby biblioteka nie była czarną skrzynką już na zawsze, omówię pokrótce jej działanie.

JAK DZIAŁA OPENALPR?

Rozpoznawanie tablicy rejestracyjnej przez OpenALPR składa się z ośmiu etapów: detekcji, binaryzacji, badania znaków, detekcji krawędzi tablicy, prostowania obrazu, przetwarzania znaków, rozpoznawania znaków (OCR) i postprocesowania. Biblioteka zaczyna od wyszukania obszaru, gdzie może znajdować się tablica, następnie konwertuje go do czerni i bieli, i na tak przygotowanym wyszukuje plamy, które mogą być literami. W ich pobliżu znajdowane są krawędzie tablicy, zaś całość ulokowanego w nich obszaru jest następnie przekrzywiana i rozciągana do arbitralnie określonych idealnych wymiarów i proporcji. Potem jest już łatwo - "plamy liter" są rozdzielane i oczyszczane, rozpoznawane, a na sam koniec biblioteka tworzy listę najbardziej prawdopodobnych wyników.

Najbardziej zagadkowy jest pierwszy krok, czyli detekcja obszaru, który zawiera tablicę rejestracyjną. OpenALPR wykorzystuje do jego wykrycia metodę lokalnych wzorców binarnych (LBP = Local Binary Pattern). Obraz jest dzielony na małe fragmenty, z użyciem LBP dla każdego wylicza się maski i następnie histogram. Deskryptor opisuje kolor i kształt takiego obszaru i na tej podstawie biblioteka "zgaduje", gdzie też może znajdować się tablica rejestracyjna.


CZY OPENALPR JEST SKUTECZNA?

Odpowiedź na to pytanie jest nieco trudniejsza. Najpierw nieco szczegółów technicznych: używana przeze mnie wersja biblioteki (2.3) przystosowana była do Linuxa (Ubuntu) i wykorzystałam ją do przebadania około stu zdjęć, wykonanych przez moich teamowych kolegów. Zdjęcia te zrobiono bez żadnych odgórnych zasad - część zawierała jedną tablicę, część kilka, część była rozmazana, zasłonięta palcami i tym podobne. Mała, konsolowa aplikacja w Javie miała na celu głównie pobranie tych stu zdjęć z odpowiedniego katalogu i przepuszczenie ich po kolei przez bibliotekę, a następnie wyświetlenie zestawienia nazwy pliku z uzyskanym wynikiem. 

Ten prosty eksperyment dał początkowo bardzo kiepskie wyniki - to znaczy biblioteka miała około 2% poprawnych rozpoznań. Szybka naprawa konfiguracji (biblioteka domyślnie działa dla tablic amerykańskich, co ma znaczenie) i dokładność poprawiła się na... 31%. Biblioteka, o ile znajdowała już tablicę, zwykle rozpoznawała ją poprawnie. Jednak prawie 80% błędnych wyników brało się stąd, że algorytm detekcji nie zadziałał tak jak powinien i tablica po prostu została przeoczona.


OPENALPR CLOUD API

Nie da się ukryć, że uzyskane przeze mnie wyniki są rozczarowujące. Tym bardziej, że demo zaprezentowane przez twórców biblioteki - OpenALPR Cloud API dawało sobie dobrze radę z tymi zdjęciami. Szybkie wczytanie się... i okazuje się, że czysta biblioteka ma po prostu bardzo okrojoną funkcjonalność wobec zbudowanych na jej bazie produktów komercyjnych, oferowanych przez twórców - a takim właśnie jest OpenALPR Cloud Api.

Przeprowadzony przeze mnie eksperyment jest bardzo prosty i na pewno nie wyczerpuje tematu zastosowania OpenALPR. Tym bardziej, że sami jej twórcy na bazie biblioteki wyraźnie stworzyli produkty, które nadają się do rozpoznawania tablic rejestracyjnych znacznie lepiej niż mój prosty programik. Sekret tkwi prawdopodobnie w odpowiednim przygotowaniu zdjęć do analizy. Kuszące wydaje mi się jednak zgoła inne pytanie - czy można algorytm detekcji poprawić na tyle, żeby stał się on mniej zawodny? Odpowiedź na nie wymaga zagłębienia się w trzewia open-source'owej bestii...

Komentarze