rozdział 99 - Politechnika Gdańska

Transkrypt

rozdział 99 - Politechnika Gdańska
ROZDZIAŁ 99
WYDAJNOŚĆ ŚRODOWISK J2SE I C++ / OPENCV W
ZAGADNIENIU STEROWANIA KOMPUTEREM ZA POMOCĄ
GESTÓW1
Michał LECH2
Bożena KOSTEK
W rozdziale przedstawiono interfejs sterowania komputerem za pomocą gestów rąk, należący
do grupy systemów czasu rzeczywistego o łagodnych granicach (ang. soft real-time). Komponentami systemu są: komputer klasy PC, kamera internetowa, rzutnik multimedialny i ekran dla
rzutnika. Oprogramowanie interfejsu opracowano w oparciu o środowiska J2SE i Visual Studio
C++ z użyciem biblioteki OpenCV. Moduł systemu realizujący interpretację rozpoznanych pozycji rąk w postaci gestów zrealizowano w środowisku J2SE wykorzystując pakiet JFuzzyLogic, udostępniający metody logiki rozmytej. Część odpowiedzialną za przetwarzanie obrazu i
detekcję pozycji rąk stworzono zarówno w środowisku J2SE jak i C++ / OpenCV. Dokonano
analizy systemu pod kątem jego odpowiedzi w warunkach zmiennego środowiska i ograniczeń
czasowych. Porównano wydajność obu środowisk, a wyniki przedstawiono w postaci tabeli.
1. WPROWADZENIE
Interakcja człowieka z komputerem (ang. Human Computer Interaction) za
pomocą nowych rodzajów interfejsów, dostarczających użytkownikowi większych
możliwości niż klawiatura i mysz, jest obecnie zagadnieniem, któremu poświęca się
wiele uwagi. Znane są interfejsy umożliwiające sterowanie aplikacjami komputerowymi za pomocą gestów rąk [5-8], ust [2], czy głowy [3]. W zależności od specyfiki
tego typu interfejsu i jego zastosowania, w niektórych przypadkach istotne jest, aby
dany gest rozpoznany był przed upływem określonego czasu. Odpowiedź systemu po
______________
1
2
Praca wykonana w ramach projektu POIG.01.03.01-22-017/08 pt.: "Opracowanie typoszeregu komputerowych interfejsów multimodalnych oraz ich wdrożenie w zastosowaniach edukacyjnych, medycznych, w obronności i w przemyśle". Projekt jest współfinansowany ze środków Europejskiego
Funduszu Rozwoju Regionalnego i budżetu państwa.
Politechnika Gdańska, Katedra Systemów Multimedialnych; Narutowicza 11/12, 80-233 Gdańsk; [email protected]
M. Lech, B. Kostek
tym czasie, niezależnie od jej trafności, prowadzi do uzyskania błędnego wyniku
w ujęciu globalnym.
Przykładem interfejsu sterowania komputerem za pomocą gestów rąk, rozpatrywanym jako system czasu rzeczywistego, może być aplikacja autorstwa Lovella
i Heckenberga [6]. Autorzy zaproponowali sposób efektywnego kodowania w języku
C z wykorzystaniem instrukcji MMX. Pozwoliło to na opracowanie interfejsu spełniającego wymogi czasu rzeczywistego, działającego na platformie sprzętowej o niewygórowanych parametrach (procesor Pentium III 450 MHz) i przetwarzającego obraz
ruchomy o rozdzielczości 160 x 120 pikseli. Innym przykładem może być system rozpoznawania zestawu 46 gestów, zawierającego między innymi alfabet i cyfry amerykańskiego języka migowego [5]. Autorzy spełnili wymagania przetwarzania w czasie
rzeczywistym stosując kombinację klasyfikatora opartego na wzorcach i algorytmu
deterministycznego wzmacniania, co pozwoliło uzyskać efektywne ponowne trenowanie klasyfikatora w trakcie działania programu. Dzięki zastosowaniu takiej metody
zredukowano koszt obliczeniowy, będący w standardowym podejściu rzędu O(108) do
O(105). Rozpoznawanie gestów można również realizować w oparciu o dedykowane
układy. Autorzy publikacji [1] zaimplementowali algorytmy detekcji gestów na układach FPGA, co pozwoliło na efektywne sterowanie robotem mobilnym.
W kontekście sterowania komputerem za pomocą ruchów rąk, wyróżnić można
dwa podstawowe typy gestów, tj. statyczne i dynamiczne [7, 8]. Gesty statyczne polegają na uformowaniu dłoni i palców w określony kształt [7, 8]. Utrzymanie kształtu
przez pewien czas powoduje wykrycie gestu. W przypadku gestów dynamicznych,
kształt dłoni bądź innego obiektu sterującego nie jest istotny, znaczenie ma natomiast
trajektoria ruchu [7, 8]. Powszechne są systemy, które w ramach jednej aplikacji
umożliwiają interakcję użytkownika z komputerem w oparciu o oba typy gestów
[7, 8].
Przedstawiony w rozdziale system realizuje detekcję prostych gestów dynamicznych, jak na przykład ruch ręką w lewo lub przybliżanie rąk, jedna do drugiej.
Gesty rozpoznawane są w oparciu o sekwencję obrazów pobranych z kamery internetowej. Zmiana warunków oświetleniowych, jak i sam sposób wykonywania gestu
wpływa na czas wykonywania algorytmów, a w konsekwencji na czas uzyskania odpowiedzi i jej poprawność. System rozpatrywać można jako system czasu rzeczywistego o łagodnych granicach.
2. INTERFEJS STEROWANIA KOMPUTEREM ZA POMOCĄ GESTÓW
Aplikacja interfejsu została początkowo zaimplementowana w całości w oparciu o platformę J2SE. Powodem wyboru tej technologii było dysponowanie komponentami opracowanymi w ramach wcześniejszych prac nie związanych
z prezentowanym zagadnieniem oraz możliwość wykorzystania powszechnie stoso2
Wydajność Środowisk J2SE i C++ / OpenCV w Zagadnieniu Sterowania Komputerem …
wanego pakietu jFuzzyLogic, umożliwiającego interpretację gestów za pomocą wnioskowania rozmytego. W ramach początkowo określonych zastosowań systemu, jakimi
były zdalne przeglądanie obrazów i prezentacji multimedialnych, system z satysfakcjonującym rezultatem realizował swoje zadanie. Wydajność czasowa nie spełniała
jednak określonych wymagań, biorąc pod uwagę zastosowanie systemu do obsługi
tzw. Interaktywnej Tablicy [4] czy wprowadzając możliwość interpretacji gestów
zgrupowanych, opisanych dalej w rozdziale 2.2. Z tego względu wszelkie czasochłonne operacje, takie jak przetwarzanie klatek pozyskanych strumieni wizyjnych czy detekcja rąk w obrazie zaimplementowane zostały w środowisku Visual Studio C++ z
wykorzystaniem biblioteki OpenCV, w wersji 1.0, w wariancie udostępnianym bez
opłat. Moduł interpretacji gestów zaimplementowano w języku JAVA z wykorzystaniem wspomnianego wcześniej pakietu jFuzzyLogic. Po stronie kodu JAVA wykonywane jest również wywoływanie akcji systemowych przypisanych do gestów. Kod
napisany w języku C++ z wykorzystaniem biblioteki OpenCV został obudowany interfejsem JNI (JAVA Native Interfaces) i skompilowany do postaci biblioteki dynamicznej załączanej w kodzie JAVA.
2.1.
KOMPONENTY SYSTEMU
Prezentowany w niniejszym rozdziale system zaprojektowany został w oparciu
o następujące komponenty: komputer lub laptop do standardowych zastosowań (procesor dwurdzeniowy 2GHz, 3GB pamięci RAM), rzutnik multimedialny, kamera internetowa i ekran dla obrazu z rzutnika. Rzutnik, do którego przymocowana jest
kamera internetowa, podwieszony jest pod sufitem. Obiektyw kamery skierowany jest
na ekran i ustawiony w ten sposób, aby wyświetlany obraz był możliwie największych
rozmiarów w pozyskiwanym strumieniu wizyjnym i był w nim zawarty w całości.
W prezentowanym rozwiązaniu użytkownik steruje aplikacją stojąc pomiędzy
rzutnikiem a ekranem i wykonując proste gesty dynamiczne z możliwością łączenia
ich w sekwencje, które również mogą podlegać interpretacji.
2.2.
BAZA GESTÓW
W systemie zaimplementowano rozpoznawanie 10 gestów, przedstawionych
w tabeli 1. Pięć z nich bazuje na ruchu tylko jednej ręki i pięć na ruchu obu rąk jednocześnie. Interfejs graficzny udostępnia użytkownikowi możliwość zdefiniowania dodatkowych gestów, złożonych z gestów prostych wykonanych w odpowiedniej
kolejności bez przerw, na przykład Lewo-Góra-Dół. Do każdego gestu prostego przypisana została domyślna akcja, wykonywana poprzez emulowanie zdarzenia związanego z obsługą klawiatury lub myszy. Przykładowo, podczas przeglądania obrazów
3
M. Lech, B. Kostek
przybliżenie wyciągniętych przed siebie rąk, jedna do drugiej, interpretowane jest jako
operacja pomniejszenia.
Nazwa gestu
Ręka nieruchomo
Opis
Trzymanie ręki nieruchomo
Lewo
Ruch ręki w lewo
Prawo
Ruch ręki w prawo
Góra
Ruch ręki do góry
Dół
Ruch ręki w dół
Domyślna akcja
Kliknięcie
Wyświetlenie poprzedniego obrazu / slajdu lub
przesuwanie zawartości
Wyświetlenie następnego
obrazu / slajdu lub przesuwanie zawartości
Wyświetlenie poprzedniego obrazu / slajdu lub
przesuwanie zawartości
Wyświetlenie poprzedniego obrazu / slajdu lub
przesuwanie zawartości
Ręce nieru- Trzymanie obu rąk niechomo
ruchomo
Powiększenie Odsunięcie rąk od siebie
Przybliżenie rąk do siePomniejszenie
bie
Ruch lewej ręki w dół i
Obrót w lewo
prawej do góry
Obrót w pra- Ruch lewej ręki do góry i
wo
prawej w dół
Emulowane zdarzenie
Kliknięcie lewego przycisku myszy
wciśnięcie 
wciśnięcie 
wciśnięcie 
wciśnięcie 
Powiększenie
wciśnięcie ‘+’
Pomniejszenie
wciśnięcie ‘-‘
Obrót w lewo
wciśnięcie ‘l’
Obrót w prawo
wciśnięcie ‘r’
Tabela 1. Baza gestów
2.3.
METODA ROZPOZNAWANIA POZYCJI RĄK
Rozwiązanie bazuje na odejmowaniu obrazów pozyskanych z kamery od obrazów wyświetlanych za pomocą projektora multimedialnego. Wynik odejmowania jest
przetwarzany i następnie poddawany analizie pod kątem rozpoznawania gestów.
Odejmowanie wykonywane jest w przestrzeni barw RGB.
W pierwszej kolejności określany jest, w pozyskanej z kamery ramce, obszar,
który zawiera jedynie widok grafiki wyświetlanej przez projektor. Obszar ten jest dalej zwany obszarem efektywnym. Operacja wykonywana jest ręcznie i polega na
wskazaniu przez użytkownika rogów obszaru efektywnego w ramce wyświetlonej
w interfejsie graficznym użytkownika. W oparciu o te wskazania obraz z kamery jest
poddawany transformacji perspektywicznej, a następnie ekstrakcji obszaru efektywnego. Widok aktualnego ekranu systemu, który wyświetlany jest za pomocą projektora
4
Wydajność Środowisk J2SE i C++ / OpenCV w Zagadnieniu Sterowania Komputerem …
multimedialnego, poddawany jest przeskalowaniu, w celu zapewnienia identycznych
rozmiarów z przetworzonym obrazem z kamery. W celu ograniczenia wpływu warunków oświetlania panujących w pomieszczeniu, w którym wykorzystuje się system,
oraz zniekształceń wprowadzanych przez obiektyw kamery, przeprowadzana jest kalibracja barwowa. W trakcie tego procesu, dla określenia charakterystyki wpływu
oświetlenia na dany kolor, wyświetlane są kolejno obrazy o różnych kolorach. Wyniki
odejmowania pozyskanych dla tych kolorów widoków ekranu systemowego i odpowiadających ramek pobranych z kamery służą kompensacji zabarwienia obrazów
w procesie rozpoznawania gestów. Detekcja pozycji rąk realizowana jest w oparciu
o obrazy poddane binaryzacji i filtracji medianowej z separowalną maską kwadratową
o wielkości 7 pikseli. Dzięki zastosowaniu kompensacji barwowej i filtrowania nieliniowego największe skupisko sąsiadujących pikseli w obrazie stanowi reprezentację
dłoni. Obszar ten znajdowany jest za pomocą metody aktywnych konturów z zadanym
progiem wielkości obszaru.
3. ODPOWIEDŹ SYSTEMU W WARUNKACH ZMIENNOŚCI ŚRODOWISKA
Opracowany system bazuje na rozpoznawaniu gestów dynamicznych. Z tego
względu przetwarzanie musi odbywać się w czasie zapewniającym pozyskanie i przetworzenie określonej liczby ramek obrazu, na podstawie której można zinterpretować
gest.
Trajektoria ruchu ręki została zamodelowana za pomocą wektorów ruchu stworzonych w oparciu o punkty oznaczające pozycje rąk w obrazie dla czasów t1 i t2, odpowiednio w stosunku do czasów t0 i t1, zgodnie z rysunkiem 1.
lewo
t0
y
t1
lewo
y
t2
 21
dół

u21
le10
wo
u10
10
 21
x
x
Rys. 1 Wektory ruchu stworzone dla półkolistego ruchu ręki w lewo
5
M. Lech, B. Kostek
Metoda detekcji gestów na podstawie wyznaczonych wektorów ruchu opisana
została w publikacji [4].
Interwały czasowe t1 – t0 i t2 – t1 wyznaczane są w zależności od uzyskanej rozdzielczości czasowej systemu. Rozdzielczość ta w dużej mierze zależy od złożoności
czasowej algorytmów przetwarzania obrazu i detekcji rąk. Wiarygodne rozpoznawanie gestów w obrazie wizyjnym w większości przypadków wymaga użycia algorytmów przetwarzania obrazu o dużej złożoności czasowej [7, 8]. Zastosowanie metody
złożonej z wielu takich algorytmów pozwala otrzymać obraz zawierający jednoznaczną informację o położeniu ręki w danej chwili, co w teorii pozwala skutecznie
interpretować wykonany gest. Ceną za wysoką skuteczność rozpoznawania pozycji
rąk czy innych obiektów sterujących jest niska wydajność całego systemu. Z tego
względu, w niektórych zastosowaniach użycie takiej technologii jest niepraktyczne.
Dodatkowo, biorąc pod uwagę fakt, że ruch tworzący gest dynamiczny może być wykonywany przez użytkowników z dowolną prędkością, wraz ze spadkiem wydajności
maleje wiarygodność systemu. System bowiem, nie jest w stanie zapewnić przetwarzania wystarczającej liczby klatek dla zarejestrowania szybkiego ruchu w całości, co
może prowadzić do błędnej interpretacji wykonanego gestu. Z tego względu projektowanie interfejsów rozpoznawania gestów, a w szczególności gestów dynamicznych,
opiera się na znalezieniu kompromisu pomiędzy wiarygodnością detekcji rąk w obrazie, a co za tym idzie finalną skutecznością rozpoznawania gestów, a wydajnością systemu.
W prezentowanym systemie operacjami o najwyższej złożoności czasowej, wykonywanymi najdłużej, w porównaniu z innymi algorytmami, również z punktu widzenia rozmiaru danych wejściowych, są: filtracja medianowa i korekcja perspektywy.
Przetwarzanie obrazu z pominięciem tych algorytmów prowadziło do obniżenia skuteczności do nieakceptowalnego poziomu.
Rozdzielczość czasowa systemu, którego część odpowiedzialną za przetwarzanie obrazu i detekcję rąk zaimplementowano w środowisku Visual Studio C++ /
OpenCV, przy zastosowaniu komputera o dwurdzeniowym procesorze o częstotliwości taktowania 2GHz i pamięci RAM 3GB, utrzymuje się na poziomie 15 klatek na
sekundę. Dla takiej rozdzielczości czasowej każdy z wyznaczonych wektorów ruchu
obejmuje 3 kolejne ramki, co pozwala na skuteczne rozpoznawanie gestów nawet, jeśli ruch w którejś z jego faz odbywa się w innym kierunku niż kierunek globalny (rysunek 1). Oznaczanie wektorów dla punktów w ramkach i oraz i + 2 uznano za
optymalne biorąc pod uwagę prędkość z jaką grupa testowa 20 osób wykonywała gesty w trakcie badań systemu. Zbadana skuteczność detekcji gestów plasowała się w
przedziale 94.2% - 100.0%. Interfejs użytkownika udostępnia możliwość zmiany liczby klatek, w oparciu o które tworzone są wektory ruchu. Dla systemu z modułem odpowiedzialnym za przetwarzanie obrazu zaimplementowanym w środowisku J2SE,
uzyskana rozdzielczość czasowa wynosi około 5 klatek na sekundę. Biorąc pod uwagę
specyfikę pracy z Interaktywną Tablicą [4], interfejs nie spełniał wymagań stawianych
systemom czasu rzeczywistego o łagodnych granicach. Kierunek ruchu był bowiem
6
Wydajność Środowisk J2SE i C++ / OpenCV w Zagadnieniu Sterowania Komputerem …
rozpoznawany prawidłowo, jednak wydłużony czas uzyskania odpowiedzi powodował, że szybki ruch wykonywany w trakcie rysowania nie odzwierciedlał w prawidłowy sposób kształtu rysowanego na tablicy.
Czas uzyskania odpowiedzi systemu zależny jest również od warunków oświetlenia panujących w pomieszczeniu. Czas wykonania algorytmu pozyskania obrazu
z kamery, udostępnianego przez bibliotekę OpenCV, skraca się wraz ze zwiększaniem
jasności w pomieszczeniu. Jednocześnie, aby zapewnić odpowiedni kontrast treści
wyświetlanej przez projektor multimedialny, jasność ta nie może być zbyt duża. Z kolei, implementacja algorytmu pobierania ramek obrazu ze strumienia wizyjnego w języku JAVA oferuje lepszą wydajność przy niższych poziomach jasności.
4. WYNIKI
Wyniki porównania wydajności systemu sterowania komputerem za pomocą
gestów z modułem przetwarzania obrazu zaimplementowanym w środowisku J2SE
i Visual Studio C++ / OpenCV przedstawiono w tabeli 2. Znak „-” w wierszach zawierających nazwę funkcji oznacza, że funkcja napisana została przez autora systemu.
Tym samym nie podano nazwy biblioteki dla tej funkcji. Znak „-” w wierszach zawierających czas wykonania funkcji oznacza, że operacja wymagała wielu iteracji i była
częścią innej operacji. W tym przypadku nie dokonywano pomiaru czasu, podano natomiast czas wykonania operacji nadrzędnej.
Zamieszczone czasy są wartościami uśrednionymi z 1000 iteracji wykonywanych w identycznych warunkach dla obu środowisk programistycznych. Wyniki można zatem traktować jako proporcje czasowe.
Biblioteka
Funkcja
Czas wykonania (ms)
Biblioteka
Funkcja
Czas wykonania (ms)
Biblioteka
Funkcja
Czas wykonania (ms)
Biblioteka
Funkcja
J2SE
Visual Studio C++ / OpenCV
Pozyskanie ramki obrazu
LTI-Civil
OpenCV
captureStream.start
cvQueryFrame
33,06
32,7
Pozyskanie widoku ekranu (w tym*)
java.awt.Robot
windef.h, winuser.h, wingdi.h
Robot().createScreenCapture
CreateCompatibleBitmap
27,19
4,45
*Przeskalowanie
java.awt.Graphics
OpenCV
g.drawImage
cvResize
0,5
0,46
Korekcja perspektywy
JAI
OpenCV
JAI.create("warp", pb);
cvWarpPerspective
7
M. Lech, B. Kostek
Czas wykonania (ms)
Biblioteka
Funkcja
Czas wykonania (ms)
Biblioteka
Funkcja
Czas wykonania (ms)
Czas wykonania (ms)
Funkcja
Czas wykonania (ms)
Biblioteka
Funkcja
Czas wykonania (ms)
Biblioteka
Funkcja
Czas wykonania (ms)
Biblioteka
Funkcja
Czas wykonania (ms)
Całkowity czas wykonania
(zbadany) (ms)
Całkowity czas wykonania
(suma) (ms)
FPS
37,6
Ekstrakcja obszaru efektywnego
java.awt
.getSubimage
12,99
Odejmowanie
19,97 (w tym*)
Kalibracja barwowa
*16,52
Binaryzacja
Filtracja medianowa
Java Advanced Imaging
JAI.create(„MedianFilter”, p)
55,75
Detekcja kształtu
-
7,18
OpenCV
cvGetSubRect
0,05
OpenCV
cvAbsDiff
0,38
6,12
cvThreshold
0,08
OpenCV
cvSmooth
4,88
OpenCV
cvFindContours
cvDrawContours
2,38
7,85
Detekcja gestu
jFuzzyLogic
rule.getDegreeOfSupport
0,22
jFuzzyLogic
rule.getDegreeOfSupport
0,22
196,06
70,30
194,63
58,90
5,10
14,22
Tabela 2. Wyniki porównania wydajności intefrejsu gestowego przetwarzającego obrazy w oparciu
o algorytmy zaimplementowane w środowisku J2SE i Visual Studio C++ / OpenCV
Zastosowanie technologii Visual Studio C++ / OpenCV przyczyniło się do około 3-krotnego wzrostu wydajności systemu. Mierzony czas wykonania operacji był
krótszy dla wszystkich badanych operacji.
Znaczna różnica pomiędzy zbadanym całkowitym czasem wykonania iteracji
rozpoznawania gestu a czasem wynikającym z sumy wszystkich zbadanych czasów,
przy przetwarzaniu w środowisku Visual Studio C++ / OpenCV wynikała z konieczności stosowania dodatkowych operacji, których celem było dopasowanie formatów
danych. Przykładem takich operacji mogą być funkcje: cvFlip, cvCvtColor, cvSplit,
8
Wydajność Środowisk J2SE i C++ / OpenCV w Zagadnieniu Sterowania Komputerem …
które realizowały odpowiednio: rotację obrazu względem danej osi, konwersję kolorów, zastąpienie wszystkich składowych koloru jedną, wybraną składową. W przypadku korzystania ze środowiska J2SE, nie było konieczności stosowania tego typu
operacji, stąd całkowity czas zbadany i wyliczony są podobne. Niewielkie różnice
wynikają ze stosowania operacji, dla których czasy nie były mierzone, takich jak wyświetlanie nazwy rozpoznanego gestu na ekranie. Operacje te wykonywane były po
stronie kodu JAVA odpowiedzialnego za interpretację gestów, a więc nie wpływały na
badanie wydajności przetwarzania obrazów w poszczególnych środowiskach wytwarzania oprogramowania.
5. WNIOSKI
Przeprowadzone testy uświadamiają, iż dla zapewnienia wysokiej efektywności
detekcji gestów znaczenie ma nie tylko sam sposób modelowania ruchu bądź zastosowane metody przetwarzania obrazu, ale również wybór technologii wytwarzania.
Interfejs opracowany w środowisku J2SE, ze względu na swoją wydajność, zapewniał
efektywny sposób sterowania jedynie w sytuacji, w której proste gesty nie były grupowane w bardziej złożone struktury, a wykonanie gestu powodowało jednorazowe
uruchomienie przypisanej akcji. Jako przykład tego typu zastosowania interfejsu,
można podać sterowanie przeglądarką obrazów lub prezentacji multimedialnych,
w którym istotny jest jedynie fakt prawidłowej interpretacji gestu, natomiast czas wykonania przypisanej akcji nie decyduje o efektywności systemu. W takim przypadku
rozpatrywany system nie należy do grupy systemów czasu rzeczywistego. W sytuacji
sterowania za pomocą gestów z uwzględnieniem możliwości tworzenia gestów złożonych lub w przypadku pracy z aplikacjami takimi jak Interaktywna Tablica [4], znaczenia nabiera dostarczenie odpowiedzi o rodzaju wykonanego gestu w określonych
ramach czasowych, co nakłada na interfejs wymagania systemów czasu rzeczywistego. System opracowany z wykorzystaniem jedynie technologii JAVA nie zapewniał
wydajności na poziomie wystarczającym do efektywnej pracy w takich warunkach.
Dla wiarygodnego odzwierciedlenia gestów w postaci ruchów kursora na ekranie, rysowanie kształtów musiało odbywać się odpowiednio wolno, co czyniło interfejs niepraktycznym. Przeniesienie części systemu odpowiedzialnej za przetwarzanie obrazu
i detekcję pozycji rąk do środowiska Visual Studio C++ i zastosowanie biblioteki
OpenCV przyczyniło się do około trzykrotnego zwiększenia wydajności. Uzyskane
przetwarzanie na poziomie 15 klatek na sekundę pozwoliło na efektywną pracę
z opracowaną aplikacją Interaktywnej Tablicy.
W ramach dalszych usprawnień systemu prowadzących do wzrostu wydajności
rozważyć można kolejność wykonywania operacji korekcji perspektywy i ekstrakcji
obszaru efektywnego. Obecnie algorytm bazuje na wykonaniu korekcji perspektywy
w pierwszej kolejności, przez co oprócz przetwarzania istotnego fragmentu pobranej
9
M. Lech, B. Kostek
z kamery ramki, jakim jest obraz wyświetlany przez projektor, przetwarzana jest również informacja zbędna (obszar wokół wyświetlanego obrazu). Następnie ze skorygowanego obrazu ekstrahowany jest prostokątny fragment o wierzchołkach określonych
przez użytkownika w procesie kalibracji. Jako alternatywną metodę można zaproponować wstępną ekstrakcję istotnego obszaru z nieskorygowanego perspektywicznie
obrazu, następnie wykonanie transformacji perspektywicznej na zmniejszonym obrazie i ostateczne wycięcie z otrzymanego obrazu fragmentu zawierającego jedynie wyświetlaną grafikę. W tym przypadku operacja ekstrakcji wykonywana jest dwukrotnie,
jednak biorąc pod uwagę, potwierdzoną rezultatami badań, dużą złożoność czasową
transformacji perspektywicznej i niską złożoność operacji ekstrakcji, dla określonego
rozmiaru danych wykonywanie operacji w takiej kolejności może zwiększyć wydajność systemu.
LITERATURA DO ROZDZIAŁU
[1] Bonato V. et al.: A Real Time Gesture Recognition System for Mobile Robots. In International
Conference on Informatics in Control, Automation and Robotics, 2004
[2] Dalka P., Czyżewski A.: Controlling Computer by Lip Gestures Employing Neural Networks.
RSCTC 2010, materiały konferencyjne The Seventh International Conference on Rough Sets and
Current Trends in Computing, Gdańsk 2010.
[3] Kosikowski Ł., Dalka P., Odya P.: Wykorzystanie analizy obrazu ruchów głowy w multimedialnym
interfejsie komputerowym. Technologie Informacyjne, Zeszyty Naukowe Wydziału ETI Politechniki
Gdańskiej, Gdańsk 2010.
[4] Lech M., Kostek B.: Gesture-based Computer Control System Applied to the Interactive
Whiteboard. ICIT, Gdansk Univ. Of Technology Faculty of ETI Annals, Gdańsk 2010.
[5] Lockton R., Fitzgibbon W.A.: Real-time gesture recognition using deterministic boosting. British
Machine Vision Conference, conference proc., 2002
[6] Lovell B.C., Heckenberg D.: Low-Cost Real-Time Gesture Recognition. ACCV2002, proc. of the
5th Asian Conference on Computer Vision, Melbourne 2002
[7] Mitra S., Acharya T.: Gesture Recognition: A Survey. Systems, Man, and Cybernetics, Part C:
Applications and Reviews, IEEE Transactions on, 2007, vol. 37, no. 3, pp. 311-324.
[8] Vlaardingen M.: Hand Models and Systems for Hand Detection, Shape Recognition and Pose
Estimation in Video.
10

Podobne dokumenty