Rozpoznawanie emocji na zdjęciach twarzy

Projekt został wykonany w ramach przedmiotu: Metody i algorytmy sztucznej inteligencji.

Autorzy:

Michał Szlachetko

Wiktor Zasowski

Prowadzący:

dr inż. Witold Paluszyński

 

Data: 30.06.2009

Streszczenie:

Celem projektu było opracowanie i przetestowanie narzędzia do identyfikacji emocji na zdjęciach twarzy. W celu realizacji założeń posłużono się narzędziami dostępnymi w bibliotece OpenCV do obróbki obrazów oraz symulatorem sieci neuronowych SNNS w celu ich klasyfikacji.


Recognition emotion in faces pictures

This report has been prepared as a requirement for the course: Methods and algorithms of artificial intelligence.

Authors:

Michał Szlachetko

Wiktor Zasowski

Conducted by:

dr inż. Witold Paluszyński

 

Date: 30.06.2009

Abstrackt:

The aim of this project was to case studed and tested tool to recognition of emotion in faces pictures. To realize brief fordesign was used OpenCV Libery to work with pictures and simulator of artificial neural network SNNS to typecast ones.


1. Wstęp

Emocja, (łac. emovere) – silne odczucie (świadome lub nieświadome) o charakterze pobudzenia pozytywnego (pod wpływem szczęścia, zachwytu, spełnienia) lub negatywnego (pod wpływem gniewu, odrazy, strachu).

Mimika – ruchy mięśni twarzy, wyrażające myśli, emocje, przeżycia, nastroje, a także postawy wobec innych ludzi.

(Źródło Wikipedia.pl)

Twarz jest dla innych ludzi głównym źródłem informacji o emocjach, są przeżywane. Kiedy ktoś chce odgadnąć czyjeś emocje najczęściej przygląda się właśnie twarzy. Prawdopodobnie każdy uważa, że na podstawie czyjejś mimiki doskonale potrafi określać jakie emocje przeżywają osoby, z którymi się kontaktuje. Rozpoznawanie emocji jest obecnie wprowadzane w robotyzacji szczególnie w robotach społecznych których sposób działania jest zależy od wykrytych emocji u człowieka.

2.Opis projektu

Dla potrzeb projektu została stworzona aplikacja która przypisuje osobie na zdjęciu:

- uśmiech
- zdziwienie
- złość
- brak emocji

Aplikacja jest podzielona na dwie części pierwsza zajmuje się obróbką obrazu oraz wydobyciem odpowiednich cech, na podstawie których druga część aplikacji dokonuje klasyfikacji.

2.1 Obróbka obrazu z wykorzystaniem OpenCV

Pierwszym etapem obróbki obrazu jest znalezienie twarzy na zdjęciu wykorzystana jest do tego klasyfikator Haara wraz z bazą danych dostępnych jako fragment biblioteki OpenCV.

0

Rys.1 Rozpoznana twarz za pomocą biblioteki OpenCV.

 

 

Następnie w programie rozpoznana twarz była dzielona na trzy obszary obejmujące czoło, nos i usta.

0

Rys.2 Część twarzy przestawiająca usta.

Kolejnym etapem było wydobycie krawędzi z wcześniej przygotowanych fragmentów twarzy tak by można było wydobyć ze zdjęcia ilość rys z poszczególnych obszarów.

Zastosowano do tego filtr Canny wbudowany w bibliotekę OpenCV. Współczynniki filtrowania dobrano doświadczalnie.

0

Rys.3 Fragment czoła po przefiltrowaniu filtrem Canny.

Przedostatnim elementem pierwszej części programu było wykonanie mechanizmu zliczającego liczność wejść krawędzi. Funkcja licząca wyraża sie przez

0

Gdzie l to liczność krawędzi, a p(x,y) to przypisanie wartości 1 dla białego piksela i 0 dla czarnego.

0

Na końcu przeskalowano otrzymane wyniki tak by mogły zostać przyjęte jako wejście do części programu odpowiedzialnej za klasyfikację. W części klasyfikującej dane wejściowe nie mogą przekraczać 1

2.2 Klasyfikacja z wykorzystaniem symulatora sieci neuronowych SNNS

W programie wykorzystano symulator sieci neuronowych SNNS do zaprojektowania struktury sieci oraz przeprowadzenia procesu uczenia. Ze względu na reprezentację cech po wstępnym przetworzeniu zdecydowano się na sieć składającą się z trzech neuronów w warstwie wejściowej oraz czterech neuronów w warstwie wyjściowej. Zrezygnowano z wprowadzania warstw ukrytych do sieci, gdyż nie zaobserwowano pozytywnego wpływu ich obecności na jakość otrzymywanych wyników.

0

Rys.4 Nauczona sieć w programie SNNS.

Proces uczenia sieci przeprowadzono wykorzystując spreparowany plik wzorcowy zgodny ze specyfikacją symulatora SNNS. Do wygenerowania ciągu uczącego użyto kilkudziesięciu (36) zdjęć przedstawiających jedną osobę wyrażającą różne emocje na kolejnych zdjęciach. Mimo obserwacji dość dużych wartości współczynników błędów nauczona sieć cechuje się dość dobrą skutecznością.

0

Rys.5 przebieg krzywej obrazującej błąd.

3. Przykłady działania programu

Uruchomienie programu:

Będąc w katalogu zawierającym plik start.bat wydać polecenie start.bat [nazwa_pliku]

Przykładowe uruchomienie:

0

0

Rys.6 Wynik programu dla poprawnie rozpoznanego uśmiechu na zdjęciu.

0

0

Rys.7 Wynik programu dla błędnie rozpoznanej złości

0

0

Rys.8 Wynik programu dla poprawnie rozpoznanego zdziwienia na zdjęciu, u osoby której zdjęcia nie były wykorzystywane w procesie uczenia.

4. Podsumowanie

Podczas badania własności programu uzyskano obiecujące wyniki w postaci dużej liczby poprawnie sklasyfikowanych zdjęć spoza wzorca uczącego. Można było zaobserwować duży wpływ jakości oświetlenia na otrzymywane wyniki, co sugeruje konieczność obróbki zdjęć w celu wyeliminowania niedogodności z tym związanych. Integracja programu z kamerą oraz uniezależnienie się od jakości zdjęcia poprzez filtrowanie szumów i zakłóceń powinno być kolejnym krokiem potencjalnego rozwoju.

5. Narzędzia

-SNNS v4.2

-Visual Studio C++ Express 2008

-Borland C++Builder 6

-OpenCV

6. Bibliografia

INTERNET:

http://www.pedagog.umcs.lublin.pl/~sylwesto/praktyka.htm

http://opencv.willowgarage.com/wiki/

http://www.jasinski.us/2009/01/tadeusiewicz-sieci-neuronowe-2/

SNNS v4.2 Manual

Książki:

O'Rely OpenCV


Valid HTML 4.0 Transitional