Rozpoznawanie znaków drogowych.
Autor: Paweł Kuźmicz
Raport z projektu: Metody i algorytmy sztucznej inteligencji, ARE3513
Prowadzący: dr inż. Witold Paluszyński
Data: 16 czerwca 2008r.

Projekt ma na celu stworzenie systemu (programu) potrafiącego rozpoznawać w sekwencji wideo występujące znaki drogowe. Nagranie byłoby rejestracją tego, co widzi kierowca podczas normalnej jazdy samochodem. Informacja o mijanych znakach drogowych jest istotna, umożliwiłaby budowę systemu wspomagającego kierowcę w trakcie jazdy. Napisany program potrafi odebrać strumień wideo, podzielić go na klatki i dokonać analizy obrazu. Nauczony jest wzorca znaku pierwszeństwa, to jego wystąpienie jest wychwytywane. Program napisano w języku C++ z wykorzystaniem i w oparciu o biblioteki OpenCV. Uzyskane wyniku są zadowalające – udaje się całkiem skutecznie dostrzegać występowanie znaku. Raport zawiera: wprowadzenie do zagadnienia, analiza problemu, zaproponowanie rozwiązania, etapy pracy, prezentacja efektów, uwagi oraz wnioski.

The Road Sign Recognition Problem.
Author: Paweł Kuźmicz
This report has been prepared as a requirement for the course: Methods and algorithms of artificial intelligence
Conducted by: dr eng. Witold Paluszyński
Date:June 16, 2008

The project aims to create a system (program) to identify road sings at a video sequence. The recording is a record what the driver sees during normal driving. Information from road signs would allow to construct of a system to assist the driver while driving. Written program can receive video streams, divide them into pictures and analyse them. The programe is learnt to recognized “right of way” sign. The program is written in C + +, based on the OpenCV library. Obtained results are satisfying - quite effectively manage to see the presence of the sing. The report includes: introduction to the issue, the analysis of the problem, propose solutions, working stages, presentation of results, observations and conclusions.


1. Wprowadzenie do tematyki

W obecnej chwili przepisy drogowe dokładnie określają jakie informacje powinny być poprzez znaki drogowe komunikowane kierowcom. Niestety, występowanie tych znaków jest tak liczne, że kierowcy jeżdżą na pamięć, przestają w trakcie codziennego prowadzenia zwracać uwagę na znaki, a to właśnie z powodu ich przytłaczającej ilości. Co więcej, nawet w przypadku uważnej jazdy nie lada wyzwaniem jest odnotowanie wszystkich mijanych znaków, gdy niejednokrotnie na raz widać ich nawet kilkanaście, bądź tło skutecznie je maskuje.

przykład nieczytelności znaków

Znacznym ułatwieniem dla kierowców byłby system (oprogramowanie), który samodzielnie wychwytywałby i rozpoznawał mijane znaki i i tą informację albo ponownie przekazywał kierowcy do uwzględnienia w dalszej jeździe, albo wykorzystywałby ją aktywnie, podejmując konkretne działania (np. rozpoczęcie zwalniania po minięciu ograniczenia prędkości – kwestia wykorzystania informacji nie jest istotą tego opracowania). W tym projekcie zostanie podjęta próba realizacji takiego systemu w zakresie akwizycji obrazu i jego interpretacji, tzn. stworzenia oprogramowania, które z obrazu uzyskanego z kamery umieszczonej w samochodzie, a skierowanej w kierunku jazdy, potrafiłoby wyłuskać określonego typu znak drogowy.


2. Analiza problemu

Istotą tego zagadnienia jest umiejętność wyłuskiwania pożądanych informacji z olbrzymiego wektora danych, jakim jest pojedyncze zdjęcie (klatka z filmu). Aby przybliżyć jak dużo informacji może zawierać, wystarczy podać, ze analizowane w tym projekcie obrazy o rodzielczości 640x480 pikseli, to już prawie milion liczb z przedzialu 0-255 (analizowany format bmp plików). Konieczne jest pobierania na bieżąco obrazu z kamery i przetwarzanie w czasie rzeczywistym uzyskanego obrazu, a więc dochodzi aspekt niezbędnych urządzeń peryferyjnych, komunikacji z nimi oraz kwestia prędkości działania wynikowej aplikacji.


3. Propozycja rozwiązania

Istnieje wiele opracowań na temat metod rozpoznawania obrazów. Powstały setki różnych mniej lub bardziej skutecznych w swym działaniu algorytmów . W związku z tym zdecydowano się na wybranie takich gotowych rozwiązań, które są skuteczne, wydajne i na tyle elastyczne, by dało się je wykorzystać w rozpatrywanym zagadnieniu.

Niemalże idealnym narzędziem okazały się biblioteki Open Source Computer Vision Library. OpenCV jest biblioteką funkcji wykorzystywanych podczas obróbki obrazu, opartą o otwarty kod i zapoczątkowaną przez Intela. Biblioteka ta jest wieloplatformowa, można z niej korzystać w Mac OS X, Windows jak i Linux. Autorzy jej skupiają się na przetwarzaniu obrazu w czasie rzeczywistym. Posiada własne mechanizmy rozpoznawania obrazów i komunikacji z urządzeniami cyfrowymi.


4. Etapy prac nad projektem


FAZA KONCEPCYJNA

Należało zapoznać się na tyle dokładnie z tematyką, aby określić wstępnie jaki zakres prac będzie realizowany „własnoręcznie”. Istnieją gotowe rozwiązania bardzo wielu aspektów wymaganych w tym projekcie (biblioteki, moduły, środowiska programistyczne) i o ile to możliwe, należało się skłaniać do ich stosowania, aby móc osiągnąć założony cel. W tej fazie podjęto decyzję o wykorzystaniu biblioteki OpenCV, pisaniu oprogramowania w darmowej aplikacji Borland C++ Builder pod system Windows.


OKREŚLENIE SPODZIEWANYCH REZULTATÓW PRACY

Zastosowanie biblioteki OpenCV przyśpieszyło znacznie moment, w którym coś już można było zaobserwować. Wstępnie napisana aplikacja pobiera obraz z kamery, dzięki gotowemu wzorcowi dołączonemu do biblioteki rozpoznaje określone obrazy – potrafi wyszczególnić na kadrze twarz. Uzyskanie takiego działania, tylko wobec znaków, jest celem tego projektu. Aplikacja będzie na bieżąco analizować obraz z kamery w celu odnalezienia na nim znaku drogowego.


ZEBRANIE DANYCH DO INTERPRETACJI

W trakcie pisania aplikacji koniecznym było posiadanie testowych nagrań widoku kierującego pojazdem. Dane zebrano przy użyciu aparatu fotograficznego Olympus C-770 Ultra Zoom. Nagrania pochodzą z jazdy samochodem po ulicach Wrocławia. W trakcie całych prac nad projektem wykorzystano około 0,5 h nagrań. Nagrania te były następnie dzielone na pojedyncze kratki – taki format danych (zdjęcia) był również niezbędny.


KONTRUKCJA WZORCA

Zasadniczym punktem prac nad projektem było uzyskanie wzorca pożądanego znaku, który byłby wykorzystywany przez algorytm w analizie obrazu. Wymagało to zgromadzenia jak największej ilości obrazów, które zawierały by w sobie oczekiwany znak – znak pierwszeństwa. Kilkadziesiąt posiadanych nagrań zostało rozebranych na pojedyncze klatki, z których wybrano wszystkie te, które zawierały wyraźny symbol białego kwadratu z żółtym pasem wokół. Również wszystkie inne kadry były potrzebne, konieczna była seria ucząca tła na jakim z reguły występuje znak (z reguły tłem była roślinność, elewacje budynków czy niebo, jednak zdarzały się i billbordy, na tle których znak bywał zupełnie niewidoczny).

rodzaje obrazów

Należało dokładnie określić współrzędne wszystkich tych obszarów, które zawierały znak (jedno ujęcie mogło zawierać ich wiele) na wszystkich zdjęciach. Ogromna uciążliwość tego procesu skłoniła do napisania aplikacji ułatwiającej to zadanie. Umożliwia wyszczególnianie kursorem myszki takich obszarów i zwraca ich wymagane współrzędne – odpowiednio wsp. x,y lewego górnego rogu oraz szerokość i wysokość obszaru.
Nauczanie przebiega tym efektywniej, im większa liczba podanych zdjęć. Wskazane ilości dochodzą do rzędu kilku tysięcy! Oprócz tego duże są wymagania do sprzętu komputerowego. Na komputerze 2-rdzeniowym o 2GB pamięci proces uczenia (którego efekty i tak pozostawiają spory niedosyt) trwał prawie 20h.

aplikacja pomocnicza
TESTOWANIE

Po etapie nauczania aplikacji rozpoznawać wybrany znak drogowy przystąpiono do testów. Polegały one na sprawdzeniu, czy program poprawnie wychwyci znaki na nagraniu, które nie posłużyło jako materiał uczący.

Kilka prób szybko uwidoczniło konieczność zweryfikowania parametrów uczenia mechanizmu rozpoznawania. Koniecznym okazało się ponowne utworzenie całej bazy uczącej (zastosowanie mniej stratnej konwersji video -> bmp, zamiast video -> jpg) , proces uczenia przeprowadzano wielokrotnie, do różnych poziomów, z różnymi wielkościami wzorca. Również sama wielkość bazy obrazów wejściowych musiała ulec zwiększeniu.


5. Prezentacja efektów

Prace nad projektem zaowocowały stworzeniem aplikacji, która – zgodnie z założeniami – potrafiłaby rozpoznawać znaki drogowe z pobieranego z kamery obrazu. Obecny jej stan umożliwia wychwycenie jednego typu znaku – znaku pierwszeństwa – jednak nie ma ograniczeń co do ich ilości – kolejne znaki to tylko następne wzorce, jakie należy wytworzyć w przedstawiony w tym opracowaniu sposób.

aplikacja

6. Uwagi i wnioski

Zagadnienie rozpoznawania obrazów jest ze wszech miar ciekawe. Możliwości jakie daje poprawna analiza otoczenia są przecież ogromne. Już przy tym projekcie, z definicji i tak o ograniczonym rozmachu, udało się uzyskać bardzo wymierną korzyść – pozyskać informację, która decyduje o naszym bezpieczeństwie, a więc zdrowiu i życiu.


Napisana aplikacja na obecnym etapie prac nie gwarantuje jeszcze wykrycia każego wystąpiąpienia wyuczonego znaku. W sekwencji video niekiedy potrafi całkiem nie zauważyć mijanego symbolu. Jest to jedynie kwestia lepszego wyszkolenia wzorca. Zwiększenie ilości zdjęć testowych do kilku tysięcy i co najmniej 2-3 dni obliczeń na wysokiej klasy komputerze wystarczyłoby z pewnością na uzyskanie satysfakcjonującego efektu. Sam mechanizm jest poprawny i odpowiedni do rozwiązania poruszanego zagadnienia.


Spełnienie kilku innych wymagań również przyczyniłoby się do lepszej pracy aplikacji. Tymi wymaganiami są:
Powyższe uwagi w zasadzie tyczą się dwóch odrębnych kwestii:
  1. sposobu działania urządzeń rejestrujących
  2. sprawności algorytmów ekstrakcji cech z obrazu.

Ad.1
Na potrzeby tego projektu stosowany był aparat cyfrowy, którego przeznaczeniem na pewno nie jest nagrywanie widoku ze środka przemieszczającego się pojazdu. Zastosowanie urządzeń domyślnie przeznaczonych do takich celów z pewnością zaowocowałoby uzyskaniem obrazów mniej rozmytych, mniej podatnych na wpływ niekorzystnego oświetlenia, skoncentrowanych na wycinku przestrzeni, a więc o ograniczonej wielkości i łatwiejszych w analizie

Ad.2
Algorytm wykorzystuje wypracowany wzorzec do rozpoznawania znaków. Ilość tych wzorców jest w zasadzie ograniczona jedynie możliwościami obliczeniowymi systemu komputerowego, sensowną więc wydawałaby się propozycja utworzenia „wzorców specjalizowanych”: dany znak miałby swój „wzorzec nocny”, dedykowany do wykrywania go w zmroku, „wzorzec pochylony”, uwzględniający tak krzywe zamocowanie znaku jak i pochylanie się samochodu na zakrętach itd.
Sprawność algorytmu bezpośrednio zależy od sposobu szkolenia wzorca, którym się posługuje. Wzorzec będzie tym lepszy, im większa pula ucząca, różnorodność tła, na jakim przyjdzie odnajdywać znak oraz im więcej czasu umożliwimy na opracowywanie wzorca oprogramowaniu uczącemu.


7. Źródła


8. Wykorzystane narzędzia

Valid XHTML 1.0 Transitional