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
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.
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
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.
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:
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.
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.
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.
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
Gdzie l to liczność krawędzi, a p(x,y) to przypisanie wartości 1 dla białego piksela i 0 dla czarnego.
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.
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ą.
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:
Rys.6 Wynik programu dla poprawnie rozpoznanego uśmiechu na zdjęciu.
Rys.7 Wynik programu dla błędnie rozpoznanej złości
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/
Książki:
O'Rely OpenCV