Krzysztof Dondajewski

Jarosław Puszczyński

 

 

 

Śledzenie ruchu twarzy

 

 

  1. Zakres projektu

 

Celem projektu było stworzenie aplikacji, która zdolna by była śledzić ruch ludzkiej głowy i zgodnie z tymi ruchami sterować na przykład myszką komputerową.

 

  1. Sposób wykonania

 

Projekt realizowany był w środowisku java z wykorzystaniem bibliotek: Java Media Framework, Java Advanced Imaging oraz biblioteki genetycznej ECJ z wykorzystaniem Genetic Programming. Projekt składał się z dwóch części – uczącej i testującej. W części uczącej algorytm starał się stworzyć drzewo genetyczne, które w jak najlepszy sposób znajdowałoby pozycję nosa – względem którego miały być wykonywane ruchy. W części testującej sprawdzane były stworzone drzewa na nowych plikach z nagranymi ruchami twarzy.

 

a)      część ucząca

 

Materiałem uczącym były filmy z nagranymi ruchami twarzy oraz pliki z zapisanymi rzeczywistymi pozycjami nosa w każdej klatce. Każdy osobnik był drzewem składającym się liści, którymi były wejścia maski zdefiniowanej jako pewna liczba sąsiadów danego piksela oraz węzłów będących funkcjami (m.in. min, max, +, -, *, /, threshold, exp). Każdy z osobników było ocenianym na podstawie piksela wybranego (przez drzewo algorytmu genetycznego) jako pozycja nosa i jego odległości euklidesowej od rzeczywistej pozycji nosa. Dokładnie była to funkcja:

 

fitness = exp (-1*beta*d(poz. rzecz, poz. osobnika))

 

b)     część testująca

 

W części testującej dla najlepszego osobnika z populacji testowane było jego zachowanie na nowym zbiorze bądź na tym samym zbiorze. Wynik można było obserwować na obrazkach, w których były zaznaczone pozycje nosa dla jednego bądź wielu osobników powstałych w wyniku działania programu uczącego z innymi parametrami populacji bądź na innym zbiorze uczącym.

 

  1. Testy

 

Działanie aplikacji zostało przeprowadzone na dwóch wcześniej przygotowanych sekwencjach avi (po ok. 20 i 600 klatek). Dla pierwszej z nich uczono się na każdej klatce (bądź co 2, 3) na drugiej sekwencji co 25 bądź 50 klatek. Parametry algorytmu genetycznego - rozmiar populacji i liczba generacji zostały ustalone odpowiednio na 10 osobników oraz 20 generacji.

Przykładowe drzewa wygenerowane przez algorytm genetyczny wyglądają następująco (litery oznaczają odpowiednie „sensory” maski piksela):

 

(exp (/ e (/ c (exp (* (/ c d) (- a b))))))

(thres1 (- a d) (+ e d))

 

Uzyskane wyniki były obiecujące, w początkowej fazie obliczona pozycja nosa podążała za rzeczywistą pozycją nosa. Jednak wraz z czasem pozycje nosa zaczęły „się rozjeżdżać". Przyczyną tego jest zapewne mała liczba populacji i generacji algorytmu genetycznego. Należałoby zwiększyć obydwa te parametry, wiąże się to jednak z dłuższym nakładem czasowym na stworzenie ostatecznego drzewa. Poza tym program posiada jeszcze wiele parametrów, których zmiana może mieć wpływ na działanie algorytmu i które należałby przebadać. Są to na przykład: maska piksela (rozmiar, wybrane piksele), szerokość i wysokość obszarów którym szukamy nowej pozycji nosa, rozmiar zbioru uczącego, współczynnik frameskiprate (na co której klatce się uczymy).