Rozpoznawanie numerów startowych
Transkrypt
Rozpoznawanie numerów startowych
Rozpoznawanie numerów startowych na zdjęciach z zawodów sportowych Łukasz Wieczorek, inf75971 Spis treści Analiza wymagao ................................................................................................................................3 Opis problemu ................................................................................................................................3 Cel projektu ....................................................................................................................................3 Dane ...............................................................................................................................................3 Dane wejściowe ..........................................................................................................................3 Dane wyjściowe ..........................................................................................................................3 Metodologia .......................................................................................................................................3 Wykrywanie cyfr .............................................................................................................................3 Analiza krawędzi .........................................................................................................................4 Analiza obszaru ...........................................................................................................................5 Rozpoznawanie cyfr ........................................................................................................................6 Sied neuronowa ..........................................................................................................................6 Zbiór uczący ................................................................................................................................6 Rozmiar wzorca i testy................................................................................................................6 Lista rozpoznanych cyfr ...............................................................................................................7 Grupowanie cyfr w numery startowe ..............................................................................................7 Architektura systemu ..........................................................................................................................8 Ogólna architektura systemu ..........................................................................................................8 Sied neuronowa ..............................................................................................................................8 Testy ...................................................................................................................................................8 Podsumowanie ................................................................................................................................. 13 Wnioski ......................................................................................................................................... 13 Dalszy rozwój ................................................................................................................................ 13 Analiza wymagań Opis problemu W trakcie największych imprez sportowych wykonywane są tysiące zdjęd uczestników. Przeglądnięcie wszystkich zdjęd i odnalezienie na nich siebie lub interesującej nas osoby jest często bardzo trudne i wymaga sporej ilości czasu. W ostatnim czasie na rynku pojawiła się także znaczna liczba firm specjalizująca się w obsłudze fotograficznej zawodów sportowych (głównie biegów), które umożliwiają kupno interesujących zdjęd. Wyszukanie zdjęd często możliwe jest w bardzo łatwy sposób poprzez podanie numery startowego. Przypisanie każdemu zdjęciu numerów startowych zawodników znajdujących się na nim jest jednak procesem długotrwałym i wymagających zaangażowania wielu osób. Cel projektu Projekt ma na celu umożliwid automatyczne przypisanie danemu zdjęciu numerów startowych zawodników znajdujących się na nim. Dane Dane wejściowe Zdjęcia przedstawiające uczestników zawodów wraz z numerami startowymi. Numer startowy powinien składad się wyłącznie z czarnych cyfr na białym tle. Rysunek 1 Przykładowe dane wejściowe – zdjęcia z zawodów lekkoatletycznych. Dane wyjściowe Numery startowe zawodników znajdujących się na danym zdjęciu. Metodologia Proces rozpoznawania numerów startowych składa się z trzech faz. Wykrywanie cyfr W celu wykrycia obszaru zawierającego cyfrę obraz skanowany jest prostokątem o stosunku boków 17 do 30, kolejno o wymiarach: 20 x 33 piksele, 25 x 41 pikseli, 30 x 50 pikseli, 35 x 58 piksele, 40 x 66 piksele, 45 x 75 pikseli, 50 x 83 pikseli, 55 x 91 pikseli. Ze względu na zapewnienie jak największej dokładności wykrywania cyfr obszar skanowany jest co 1 piksel. Niestety wiąże się to z potrzebą analizy bardzo dużej liczby obszarów, dlatego priorytetem było stworzenie jak najszybszej funkcji wykrywającej cyfry. Działanie zaimplementowanej funkcji składa się z dwóch etapów: analizy krawędzi oraz analizy obszaru. Najpierw wyznaczana jest dla każdego obszaru liczba białych punktów na krawędziach prostokąta. Następnie jeśli otrzymane wyniki spełniają ustalony warunek sprawdzane jest czy krawędzie nie przecinają czarnych obszarów oraz jaki procent całego obszaru zajmują czarne punkty. Analiza krawędzi Analiza krawędzi umożliwia w szybki sposób sprawdzenie czy w danym obszarze może znajdowad się cyfra. Procedura wymaga jedynie wyznaczenia liczby punktów na krawędziach, których składowe wartości RGB przekraczają ustalony próg (za próg została przyjęta wartośd 160). Liczba punktów zostaje wyznaczona oddzielnie dla dolnej, górnej, lewej i prawej krawędzi. Następnie odbywa się sprawdzane czy ich liczba przekracza 60% całkowitej liczby punktów znajdujących się odpowiednio na krawędzi pionowej lub poziomej. Jeśli warunek jest spełniony następuje przejście do procedury analizy obszaru. Analiza krawędzi jest kluczowa ze względu na wydajnośd aplikacji. Zdjęcie wielkości 800 na 600 pikseli wymaga przeanalizowania prawie 4000000 obszarów, dlatego konieczna była jak największa optymalizacja. Wyznaczone liczby białych punktów na dolnej i prawej krawędzi dla poszczególnych obszarów zostają zapamiętane. Dzięki temu dla kolejnych obszarów nie ma konieczności obliczania liczby punktów na górnej i lewej krawędzi, gdyż wykorzystane zostają zapamiętane wartości. Rysunek 2 Działanie procedury zapamiętującej liczbę białych punktów. Procedura skanowania dla danego zdjęcia wykonywana jest aż 8 razy dla poszczególnych wielkości obszaru. Za każdym razem konieczne jest obliczenie liczby białych punktów poprzez przeglądnięcie wszystkich punktów na krawędziach i zsumowanie spełniających ustalony warunek. Wymiary obszarów są wielokrotnościami liczby 5, dlatego możliwe jest przyspieszenia procedury poprzez wstępne obliczenie i zapamiętanie liczby białych punktów leżących na odcinkach o długości 5 pikseli. Dzięki temu nie trzeba przeglądad wszystkich punktów, a jedynie zsumowad odpowiednie odcinki. Rysunek 3 Działanie procedury zapamiętującej liczbę białych punktów na odcinkach o długości 5 pikseli. Analiza obszaru Analiza obszaru wymaga przeglądnięcia całego obszaru i wyznaczenia liczby czarnych punktów. Dodatkowo sprawdzane jest czy na krawędziach znajdują się czarne punktu, które świadczyłyby o przecięciu cyfry przez krawędzie obszaru. W przypadku gdy stosunek liczby czarnych punktów do liczby wszystkich punków obszaru przekracza 10% oraz na krawędziach nie znajdują się czarne punkty obszar uznawany jest za taki, na którym znajduje się cyfra. Procedura analizy obszaru wykorzystywana jest na dużo mniejszej liczbie obszarów niż analiza krawędzi i w dużej mierze zależy od specyfiki zdjęcia. Zdjęcia, na których znajduje się dużo jasnych, białych obszarów będą przetwarzane wolniej niż obrazy zawierające jedynie białe tło numeru startowego. Rysunek 4 Zdjęcie z niewielką oraz dużą liczbą jasnych obszarów. Rozpoznawanie cyfr Sieć neuronowa W celu rozpoznania cyfry została wykorzystana sied neuronowa Neocognitron. Jest to sied wielowarstwowa, hierarchiczna z połączeniami pomiędzy ograniczonymi obszarami. Pierwotnym przeznaczeniem sieci było rozpoznawania ręcznie pisanych znaków, w tym także chioskich. Sied Neocognitron jest niewrażliwa na rozmiar, obroty i przesunięcia znaków. Rysunek 5 Typowa architektura sieci Neocognitron. Zbiór uczący Zbiór uczący składał się z 113 zdjęd z zawodów lekkoatletycznych. Ze zdjęd wyodrębnione zostały 374 wzorce cyfr. Poszczególne klasy zawierały: cyfra 0 – 32 wzorce, cyfra 1 – 69 wzorców, cyfra 2 – 71 wzorców, cyfra 3 – 22 wzorce, cyfra 4 – 43 wzorce, cyfra 5 – 40 wzorców, cyfra 6 – 21 wzorców, cyfra 7 – 11 wzorców, cyfra 8 – 39 wzorców, cyfra 9 – 31 wzorców. Rysunek 6 Przykładowe wzorce cyfr. Rozmiar wzorca i testy Rozmiar wzorca został ustalony na podstawie przeprowadzonych testów na 30 na 45 pikseli. Umożliwia do zachowanie bardzo wysokiej trafności klasyfikacji przy względnie małym rozmiarze obszaru co przekłada się na szybkośd działania. Poniżej przedstawione zostały wyniki testów. Zbiór uczący składał się z 274 wzorców, natomiast zbiór testujący z pozostałych 100. Rozmiar wzorca 50 na 75 pikseli 40 na 60 pikseli 30 na 45 pikseli 20 na 30 pikseli Trafnośd klasyfikacji 99% 99% 99% 76% Tabela 1 Trafnośd klasyfikacji dla wzorców o różnym rozmiarze. Do nauki sieci neuronowej wykorzystanej ostatecznie w projekcie został użyty zbiór uczący zawierający wszystkie dostępne wzorce. Lista rozpoznanych cyfr Sied neuronowa dla danego obszaru zwraca przypisaną kategorie oraz prawdopodobieostwo przynależności do klasy. Jeśli prawdopodobieostwo przekracza 71% rozpoznana cyfra uznawana jest za poprawną i zostaje dodana do listy rozpoznanych cyfr. Po przeanalizowaniu całego zdjęcia wywoływana jest procedura grupowanie cyfr w numery startowe. Lista rozpoznanych cyfr wykorzystywana jest także w trakcie wykrywania cyfr. Wraz z cyfrą do listy rozpoznanych cyfr dodawana jest informacja o współrzędnych lewego górnego wierzchołka obszaru, w obrębie którego wykryto cyfrę. Umożliwia to pominięcie w trakcie analizowania obszaru, którego otoczenie lewego górnego wierzchołka o promieniu wynoszącym 70% długości krótszej krawędzi zawiera punkt znajdujący się na liście rozpoznanych cyfr. Na rysunku poniżej czerwonym prostokątem został zaznaczony obszar, w którym została rozpoznana cyfra oraz został on umieszczony na liście rozpoznanych cyfr. Niebieski prostokąt oznacza obszar, który nie zostanie przeanalizowany, gdyż otoczenie jego lewego górnego wierzchołka zawiera lewy górny wierzchołek czerwonego prostokąta. Rysunek 7 Rysunek obrazujący działanie listy rozpoznanych cyfr. Powyższa procedura nie tylko skraca czas analizy zdjęcia, ale także uniemożliwia pojawienie się na liście rozpoznanych cyfr kilka razy tej samej cyfry. Grupowanie cyfr w numery startowe Grupowanie cyfr w numery startowe odbywa się poprzez posortowanie wszystkich cyfr znajdujących się na liście rozpoznanych cyfr według ich współrzędnej x. Następnie jeśli odległośd między współrzędnymi x i y kolejnych cyfr jest mniejsza niż 80 pikseli to z cyfr tworzony jest numer. Architektura systemu Ogólna architektura systemu Stworzona aplikacja składa się z modułów odpowiedzialnych za wykrycie cyfr, rozpoznawanie cyfr oraz grupowanie cyfr w numery startowe. Wszystkie moduły zostały napisane w C++ z wykorzystaniem biblioteki OpenCV oraz środowiska programistycznego Visual Studio 2008. W ramach projektu została również wykonana aplikacja umożliwiająca w łatwy i szybki sposób wygenerowanie zbioru uczącego. Umożliwia ona stworzenie wzorca poprzez zaznaczenie odpowiedniego obszaru na zdjęciu i podanie kategorii (cyfry od 0 do 9). Sieć neuronowa W projekcie została wykorzystana sied neuronowa Neocognitron, której implementacja znajduje się na stronie http://visiome.neuroinf.jp/modules/xoonips/detail.php?item_id=5738. Sied stworzona przez Kunihiko Fukushima pierwotnie wykorzystana była do rozpoznawania ręcznie pisanych znaków zapisanych w specyficznym formacie. Sied wymagała zatem dostosowania do formatu zapisu przetwarzanych zdjęd oraz wymogów projektu. Wykorzystana implementacja zakłada dynamiczne tworzenie sieci w trakcie procesu uczenia. Umożliwia to automatyczne dostosowanie architektury do specyfiki danych. Testy Do testów aplikacji wykorzystany został zbiór 47 zdjęd. Dla każdego zdjęcia określona została: liczba poprawnie rozpoznanych cyfr, liczba obszarów bez cyfry rozpoznanych jako cyfra, liczba wszystkich cyfr na zdjęciu, liczba poprawnie rozpoznanych numerów startowych (numer uznawany jest za poprawny także w przypadku gdy częśd numeru jest zakryta w sposób uniemożliwiający jego pełne rozpoznanie), liczba częściowo rozpoznanych numerów startowych, liczba niepoprawnie rozpoznanych numerów, liczba wszystkich numerów na zdjęciu, czas przetwarzania zdjęcia w sekundach. Rysunek 8 Zdjęcia przedstawiające częściowo zakryty numer startowy. Nr zdjęcia Liczba poprawnie rozpoznanych cyfr Liczba obszarów bez cyfry rozpoznanych jako cyfra Liczba cyfr na zdjęciu Liczba poprawnie rozpoznanych numerów Liczba częściowo rozpoznanych numerów Liczba niepoprawnie rozpoznanych numerów Liczba numerów na zdjęciu Czas [s] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 1 3 3 3 6 2 2 4 3 2 1 2 2 1 2 2 4 4 2 2 2 2 3 5 2 4 5 3 2 4 3 3 5 3 3 3 2 1 1 1 1 3 3 3 3 2 1 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 3 0 0 0 0 1 0 0 0 0 0 0 1 3 6 3 3 3 2 5 3 3 1 2 2 2 3 2 4 4 3 3 3 3 3 9 3 7 9 4 3 6 3 3 6 3 3 3 3 1 2 1 1 3 3 3 3 2 1 1 1 1 1 0 0 1 1 2 1 1 1 1 1 0 1 2 2 0 0 0 0 1 1 0 1 1 1 0 1 1 1 1 1 1 1 0 1 1 1 1 1 1 1 1 1 1 0 0 2 0 3 1 1 0 0 1 0 0 0 0 0 0 0 1 0 0 0 2 0 0 0 0 0 0 0 0 0 0 0 0 0 1 0 0 0 0 0 1 0 0 0 0 1 0 0 0 0 0 0 1 1 3 1 3 1 1 2 2 2 1 1 1 2 1 1 2 2 1 1 1 1 1 3 1 3 3 2 1 2 1 1 2 1 1 1 1 1 2 1 1 1 1 1 1 1 1 12,953 7,437 26,422 36,891 134,531 17,688 32,312 6,484 6,578 129,484 13,250 21,500 14,344 30,625 9,218 14,407 8,281 15,938 11,938 33,125 5,500 10,343 24,437 7,828 8,469 33,781 38,125 23,781 11,421 31,140 12,203 62,609 46,234 28,281 101,250 62,140 31,734 7,109 4,391 4,594 63,703 64,953 13,625 61,860 6,500 33,079 38,579 1 0 0 0 0 0 0 1 0 0 0 1 1 1 1 0 2 1 1 1 0 1 0 0 0 1 0 0 0 1 0 0 0 0 0 0 0 0 0 0 Tabela 2 Wyniki przeprowadzonych testów dla poszczególnych zdjęd. Liczba poprawnie rozpoznanych cyfr Liczba obszarów bez cyfry rozpoznanych jako cyfra Liczba cyfr na zdjęciu Stosunek liczby poprawnie rozpoznanych cyfr do liczby wszystkich cyfr 124 9 152 81,6% Tabela 3 Wyniki sumaryczne dla cyfr. Wyniki sumaryczne dla cyfr 152 160 140 124 120 100 80 60 40 20 9 0 Liczba poprawnie rozpoznanych cyfr Liczba obszarów bez cyfry rozpoznanych jako cyfra Liczba cyfr na zdjęciu Poprawnie rozpoznane i nierozpoznane cyfry 18% Liczba poprawnie rozpoznanych cyfr 82% Liczba nierozpoznanych cyfr Liczba poprawnie rozpoznanych numerów Liczba częściowo rozpoznanych numerów Liczba niepoprawnie rozpoznanych numerów Liczba numerów na zdjęciu Stosunek liczby poprawnie rozpoznanych numerów do liczby wszystkich numerów Stosunek sumy liczby poprawnie i liczby częściowo rozpoznanych numerów do liczby wszystkich numerów 40 20 8 67 59,7% 89,6% Tabela 4 Wyniki sumaryczne dla numerów. Wyniki sumaryczne dla numerów 80 67 70 60 50 40 40 30 20 20 8 10 0 Liczba poprawnie rozpoznanych numerów Liczba częściowo rozpoznanych numerów Numery poprawnie rozpoznane i nierozpoznane Liczba niepoprawnie rozpoznanych numerów Liczba numerów na zdjęciu Numery poprawnie i częściowo rozpoznane oraz nierozpoznane 10% 40% 60% 90% Liczba poprawnie rozpoznanych numerów Liczba poprawnie i częściowo rozpoznanych numerów Liczba nierozpoznanych numerów Liczba nierozpoznanych numerów Powyższe wyniki pokazują, że trafnośd rozpoznawania cyfr wynosi blisko 82%. Natomiast trafnośd rozpoznawania numerów startowych – 60%, a uwzględniając częściowo rozpoznane numery – 90%. Jest to wartośd zadowalająca, gdyż w wielu przypadkach ze względu na zasłonięcie części lub całej cyfry nie ma możliwości rozpoznania kompletnego numeru. Średni czas przetwarzania zdjęcia wynosi 30,2 sekundy. Tak duża wartośd wyniki z faktu powolnego przetwarzania zdjęd z dużą liczbą jasnych obszarów, których analiza trwa nawet ponad 2 minuty, a także wykorzystania do testów komputera z procesorem zdecydowanie odbiegającym od obecnych standardów (Pentium M 1,60 GHz). Rysunek 9 Zdjęcie numer 18 oraz 26. Rysunek 10 Zdjęcie numer 30 oraz 35. Rysunek 11 Zdjęcie numer 36 oraz 43. Podsumowanie Wnioski Stworzona aplikacja umożliwia przypisanie danemu zdjęciu numerów startowych zawodników znajdujących się na nim. Przeprowadzone testy świadczą o dużej skuteczności. Jednakże analiza pojedynczego zdjęcia zajmuje średnio 30 sekund, co jest wynikiem niezadowalającym. Konieczna wydaje się zatem dalsza optymalizacja i wykorzystanie szybszych metod przetwarzania i rozpoznawania obrazu. Dalszy rozwój Jednym z kierunków dalszego rozwoju aplikacji jest wykorzystanie programowania współbieżnego. Obecnie czas analizowania pojedynczego zdjęcia jest znaczny, a poprzez wykorzystanie współbieżności możliwe byłoby jego skrócenie. Doskonały do równoległego wykonania wydaje się byd etap skanowania zdjęcia obszarami o różnej wielkości. Dalszy rozwój możliwy jest także poprzez stworzenie większego zbioru uczącego. Obecny zbiór zawiera 374 elementy przy czym liczba wzorców dla poszczególnych kategorii waha się od 11 do aż 71. Pożądane wydaje się zatem utworzenie zbioru uczącego liczącego nawet kilka tysięcy wzorców z zachowaniem zbliżonej liczby elementów w poszczególnych klasach.