Wizualizacja Danych Sensorycznych Projekt dr Bogdan Kreczmer Wizualizacja z systemu rozponawania twarzy Tomasz Mazurkiewicz 163188 15 czerwca 2010
Spis treści 1 Założenia Projektowe 2 2 Realizacja 2 2.1 Wybór urządzeń i elementów.................... 2 2.2 Warstwa Hardware.......................... 3 2.3 Komunikacja............................. 5 2.4 Warstwa Software.......................... 6 2.4.1 Funkcjonalności........................ 6 2.4.2 Interfejs Aplikacji....................... 6 3 Przykłady zastosowania 7 4 Podsumowanie i Wnioski 8 1
1 Założenia Projektowe Celem projektu było stworzenie systemu wizyjnego złożonego z kamery i czujnika odległości, dostarczającego dodatkowych informacji o odległości obiektu. systemie wizyjnym złożonym z kamery i czujnika odległości,. Wizualizowane miały być dane napływające z systemu i odpowiednio wcześniej przetwarzane, w celu odnalezienie interesujących nas elementów (w tym wypadku twarzy i jej elementów). Na początku pracy nad projektem zostały wyszczególnione 4 zagadnienia, które miała określać priorytety i kierunki pracy. Dodatkowo stanowiły one swego rodzaju kamienie milowe. Są to : ˆ Wybór kamery i czujnika ˆ Zaprojektowanie i wykonanie układu elektronicznego czujnika i komunikacji z PC ˆ Wykonanie programu mikrokontrolera w/w układu ˆ Wykonanie aplikacja przetwarzającej obraz i wizualizującej dane 2 Realizacja 2.1 Wybór urządzeń i elementów Sercem kazdego systemu wizyjnego jest kamera i od jej doboru moge w duzej mierze zalezec rezultaty pracy. W doborze kamery pod uwage wzieto ponizsze parametry: ˆ typ matrycy ˆ rozdzielczosc ˆ optyka ˆ dodatkowo funkcje (np. mozliwosc ustawiania ostrosci, zmiany rozdzielczosc) ˆ cena i dostepnosc Najwazniejszym kryterium był typ matrycy oraz optyki. Po ich uwzglednieniu wybrano kamery firmy Logitech z matryca CCD i optyka firmy Carl Zeiss. W skutek analizy pozostałych czynnikół (głównie ceny i dostepnosci) wybrano i zakupiono model Logitech Portable Webcam C905. Innym waznym elementem jest czujnik odległosci. Tutaj kryteriami doboru były : ˆ łatwosc implementacji ˆ zakres ˆ cena i dostepnosc 2
Po przeanalizowaniu wszystkich wybrany został analogowy czujnik typu SHARP[?] o zakresie 10-80cm. Ustalono, ze w odległosc do 80cm najczesciej trzymana jest głowa od monitora, a to na nim docelowo ma byc montowany układ kamery i czujnika. Aby móc korzystać z wybranego czujnika, należy posiadać układ mogący przetwarzać i przesyłać dane z czujnika. W tym celu potrzebny jest układ z mikrokontrolerem. Parametry brane pod uwagę przy wyborze mikrokontrolera to : ˆ posiadanie przetwornika analogowo- cyfrowego ˆ posiadanie modułu do komunikacji UART ˆ łatwość implementacji ˆ cena i dostepnosc Biorąc pod uwagę te aspekty zdecydowano się wykorzystać mikrokontroler AtMega8[?], który spełnia wszystkie powyższe wymagania, a dodatowo jest bardzo popularny w Polsce, dzięki informacje o pracy z nim są bardzo łatwo dostępne. Do komunikacji ze współczesnym komputerem klasy PC standard RS-232 staje sie niewygodny. Jest to spowodowane spadającą liczbą komputerów z odpowiednim portem. Dlatego zdecydowano się na komunikację poprzez port USB, powszechny i wspierany we wszystkich współczesnych komputerach. Najprostsza metoda przejścia ze standardu UART to USB to zastosowanie odpowiedniego układu. Parametry brane pod uwagę przy wybrze układu to: ˆ transparentność ˆ prędkość transmisji ˆ łatwość implementacji ˆ cena i dostepnosc Po przeanalizowaniu parametrów spektrum układów dostępnych na rynku wybrano układ FT232RL[?] 2.2 Warstwa Hardware Składa się ona z dwóch układów. Pierwsze z nich to płytka odbierająca dane z czujnika, przetwarzająca na sygnał cyfrowy, a następnie wysyłajaca dane dalej przez moduł UART (rys.??). Drugi układ odpowiada za komuniakcję bezpośrednio z PC, czyli w tym wypadku za konwersję sygnału UART na USB(rys.2). 3
Rysunek 1: Schemat elektryczny układu obsługującego czujnik i wysyłającego dane Rysunek 2: Schemat elektryczny układu odpowiedzialnego za komunikacją z PC Układy te zostały wykonane samodzielnie metodą termotransferu. Kompletny układ wraz z kamerą widać na zdjęciu 3. Układ był wykorzystywany również w innym projekcie, jednak główna plytka była projektowan z myślą o tym projekcie. 4
Rysunek 3: Zdjęcie kompletnego układu wraz z kamerą 2.3 Komunikacja Komunikacja odbywa się poprzez opisany układ kowertujący sygnały UART USB. Ustalone parametry transmisji po stronie mikrokontrolera to: ˆ Prędkość transmisji : 19,2kbps ˆ Ilość bitów stopu : 1 ˆ Bity parzystości : brak ˆ Ilość bitów danych : 8 W układzie stosowana jest kontrola poprawości przesyłu danych - CRC, która realizowana jest przez odpowiednią funkcję. Listing funkcji(po stronie mikrokontrolera) został umieszczony poniżj: char CRC8(char input) { char i, feedback, seed=0; for (i=0; i<8; i++) { feedback = ((seed ^ input) & 0x01); if (!feedback) seed >>= 1; else { seed ^= 0x18; seed >>= 1; seed = 0x80; 5
} input >>= 1; } return seed; } W związku z zastosowaniem CRC, zmuszony byłem do stworzenia 3bajtowych ramek danych. Jeden bajt to wskazanie czujnik, drugi to CRC. Ze względu na to, że obie te liczby są 8-bajtowe, wysyłajac tylko je nie byłoby możliwości rozróżnienia, który bajt jest bajtem danych, a który bajtem CRC. W przypadku utraty synchronizacji mogłoby by to mieć konsekwencję w postaci nie utrzymywania żadnych danych(wszystkie byłyby uznawane za niepoprawne). Dlatego na początku ramki dodano bajt sygnalizujący początek transmisji. W tej realizacji przyjęto, że będzie to znak x. 2.4 Warstwa Software Najbogatszym źródłem wiedzy na temat warstwy softwarowej są kod źródłowy oraz dokumentacja wygenerowana z programie Doxygen, które zostały dostarczone w załączaniku. Wiele mówią równiez diagram przepływu danych 2.4.1 Funkcjonalności ˆ Konfiguracja i kontrola portu - zrealizowano ˆ Rozpoznawanie twarzy i jej elementów - zrealizowane poza główną aplikacją(w OpenCV) ˆ Wizualizowanie rozpoznawania - niezrealizowano ˆ Rozpoznawanie twarzy ze wzorca - zaprojektowano(porównywanie rozpiętości oczu, stosunku boków prostokąta okalającego twarz do siebie, oraz odlegości między ustami, a nosem), częściowo zrealizowano poza główną aplikacją (w OpenCV) 2.4.2 Interfejs Aplikacji Interfejs składał się z dwóch zakładek. Jedna z nich widoczna na rysunku4, służyła jedynie do konfiguracji i ustanawiania połączenia. Mamy w niej możliwość wyboru portu, szybkośći transmisji, bitów parzystości, bitów stopu i ilości bitów danych. Tutaj dokonujemy połączeni i rozłączenia. Wszelkie komunikaty są zwracane w tej zakładce. Również czyste dane z portu wejściowego pojawiają się tutaj. Druga z nich miała odpowiadać, za główną część programu i jest ona widoczna na rysunku 5. Tutaj wyświetlany miał być obraz z kamery wraz z oznaczonymi, wybranymi elementami. Tutaj wybiarane są elementy jakie nalezy oznaczać. Tutaj również wyświetlane miał być wyliczane parametry twarzy pomocne w indentyfikacji twarzy z wybranego obrazu. 6
Rysunek 4: Zakładka komunikacyjna Rysunek 5: Główna zakładka 3 Przykłady zastosowania Na rysunkach przedstawiono działanie programu w wybranych sytuacjach. Na rys.6 widać aplikację podczas komunikacji. A na rysunku 7 widać program lokalizujący twarz w akcji. 7
Rysunek 6: Aplikacja podczas komunikacji Rysunek 7: Widok na program rozpoznający twarz 4 Podsumowanie i Wnioski Niestety projektu nie udało się zrealizować w zadowalajacym stopniu. Problemem, który stanął na przeszkodzie kompletnego zrealizowania zadania to trudności w funkcjonowaniu pomiędzy trzema bibliotekami takimi jak : QextSerialPort, Qt i OpenCV. Problem ten pogłębiał się w sytuacji równoległej pracy na dwóch systemach operacyjnych. Wszystkie stosowane biblioteki są wieloplatformowe, jednak migracja z jednej platformy na drugą stwarzała problemy. W przypadku QextSerialPort były to problemy bezpośrednio związane z pracą biblioteki, a w przypadku OpenCV z przygotowaniem środowiska pracy w systemie Windows. Biblioteka Qt 8
okazała się tutaj najbardziej uniwersalnym narzędziam, gdyż klasy do niej należące działały tak samo na obu systemach, bez konieczności żadnych zmian. Ze wzgledu na pojawiające się trudności, które pochłaniały sporo czasu, w końcowej fazie projektu zaczęły kumulować się opóźnienia, co skutkuje oddaniem wersji niekompletnej projektu. W toku realizacja została stworzona klasa łącząca funkcjonalność Qt i OpenCV, jednak ze względu na omawiane trudności nie znalazła ona miejsca w aplikacji, a tym samym w raporcie. Została ona jednak pokazana podczas prezentacji na żywo. Zrealizowano w pełni trzy z czterech stawianych na początku zadań. Ostatnie zadanie zostało zrealizowane, jedynie częściowo. 9