Biometryczne wspomaganie interakcji człowiek-komputer
Raport końcowy
Arkadiusz Antonik, TGSI, 201182
Dariusz Jędrzejczak, TGSI, 201208
Krzysztof Kubiak, TGSI, 201216
Maciej Nowicki, TGSI, 201231
Moduł analizy sygnału dźwiękowego
Arkadiusz Antonik, TGSI, 201182
Maciej Nowicki, TGSI, 201231
Celem projektu było stworzenie aplikacji na komputery PC, która będzie potrafiła zidentyfikować mówcę, na podstawie wypowiedzianego słowa. Aplikacja posiada wcześniej przygotowaną bazę nagrań tego samego słowa wypowiedzianego przez różne osoby.
Do wykonania zadania użyliśmy języka C++ oraz Visual Studio 2013 Community Edition jako środowiska programistycznego. Dodatkowo użyliśmy trzech zewnętrznych bibliotek:
Implementację aplikacji rozpoznającej mówcę oparliśmy na dwóch artykułach:
Danymi wejściowymi algorytmu są pliki dźwiękowe w formacie WAV. Wczytanie plików
 do pamięci oraz odpowiednie ich parsowanie jest w pełni zaimplementowane po stronie aplikacji. Implementacja powstała na podstawie ogólnodostępnych informacji o tym z jakich elementów składa się format WAV.
Danymi wyjściowymi są dwa elementy:
Posiadając w bazie danych wektory cech wzorcowych plików dźwiękowych oraz wektor cech wygenerowany dla pliku rozpoznawanego, możemy przejść do implementacji dopasowania odpowiednich cech w wektorach.
Wykorzystaliśmy tutaj metodę zaproponowaną w artykule odnoszącym się do rozpoznawania mówcy, czyli porównanie cech z nieliniowym skalowaniem dziedziny czasu. Ma to poprawić wydajność rozpoznawania mówcy nawet jeśli wypowiedziane słowo będzie szybciej lub wolniej.
W folderze z plikiem wykonywalny musi znajdować się również folder o nazwie “Content”. W nim natomiast są dwa podfoldery o nazwach: “Database” oraz “UnknownSpeaker”.
W folderze o nazwie “Database” znajdują się pliki dźwiękowe w formacie WAV, które będą użyte do stworzenia bazy wzorców dla procesu rozpoznawania. Aby pliki zostały poprawnie rozpoznane przez aplikację powinny posiadać odpowiednie nazwy stworzone według schematu:
{NazwaRozmówcy}_{NumerIdentyfikacyjnyRozmówcy}_{IdentyfikatorProbkiDlaRozmowcy}.wav
przykładowe pliki mogą wyglądać następująco:
Woman_1_Sample1.wav, Woman_1_Sample2.wav, Man_3_Sample1.wav, Man_3_Sample2.wav
W folderze o nazwie “UnknownSpeaker” powinien znajdować się tylko jeden plik o nazwie “UnknownSpeaker.wav”, który to plik jest próbką nagrania audio do rozpoznania przez aplikację.
Aplikacja działa poprawnie w 100% przypadków, jeśli rozpoznawaniu mówcy poddana jest próbka dźwięku wcześniej umieszczona w bazie wzorców. W przypadku jeśli analizowana próbka dźwięku nie istnieje w bazie, ale są tam umieszczone inne próbki wzorcowe, które reprezentują
 to samo wypowiedziane słowo przez tę samą osobę, lecz z inną szybkością lub intonacją,
 to wtedy aplikacja nie radzi sobie tak dobrze z rozpoznawaniem mówcy.
Aplikacja została tak skonstruowana aby zawsze starała się dopasować jakiegoś mówcę
 z posiadanej bazy wzorców do aktualnie analizowanej próbki. Dlatego też nigdy nie zostanie stwierdzone, że mówca został nierozpoznany, ponieważ algorytm nie posiada granicy dopasowania, dlatego zawsze wybierze najbardziej podobną próbkę wzorcową ze wszystkich dostępnych w bazie.
Moduł analizy obrazów statycznych i sekwencji wideo
Dariusz Jędrzejczak, TGSI, 201208
Krzysztof Kubiak, TGSI, 201216
Moduł jest aplikacją wykrywającą i odróżniającą 3 emocje na podstawie ułożenia ust. OpenCV jest używane do detekcji twarzy (metodą Viola-Jones). Następnie emocja jest wykrywana przy użyciu analizy głównych składowych (Principal Component Analysis, PCA).
Aplikacja analizuje obraz z kamery podłączonej do komputera i określa emocję na podstawie ułożenia ust użytkownika. Działanie aplikacji odbywa się w trzech etapach: trening, wykrwanie twarzy, wykrywanie emocji:
Wykrywanie twarzy jest podstawowym elementem programu. Żeby wykryć emocję, potrzebujemy zlokalizować usta na obrazie. Do wykrycia twarzy wykorzystujemy algorytm Viola-Jones. Algorytm charakteryzuje się dużą szybkością i skutecznością wykrywania. Wykorzystuje koncepcję integralnego obrazu, który jest opisany za pomocą sum i różnic wartości pikseli w prostokątnych obszarach określonych specjalnymi szablonami. Algorytm określa na obrazie tzw. cechy Haaro-podobne (Haar-like features).
PCA jest techniką, która umożliwia rozkład wektora danych tak, aby zmniejszyć liczbę jego składowych i pozostawienia tylko tych istotnych. Jest ona używana do rozpoznawania twarzy, czyli klasyfikacji twarzy jako podobne. W przypadku tej aplikacji nie porównujemy całych twarzy, lecz same usta.
Aplikacja jest zaimplementowana w języku C++ przy użyciu biblioteki OpenCV 2.4.11. Działanie aplikacji polega na:
Program w głównej pętli wczytuje z klawiatury wejście od użytkownika.
Aplikacja działa w systemie Windows.
Program należy uruchamiać podając jako parametr numer użytkownika, którego emocje będziemy rozpoznawać na podstawie próbek w bazie (próbki znajdują się w folderze data/numer_użytkownika). Dla nieznanego/dowolnego użytkownika przygotowane są uniwersalne próbki. Żeby wypróbować rozpoznawanie dowolnego użytkownika należy uruchomić program z parametrem 4 (lub uruchomić przygotowany skrypt test_unknown.bat).
Po uruchomieniu program uruchamia pierwszą dostępną kamerę w komputerze użytkownika. Jeżeli taka nie zostanie znaleziona, program się kończy, wyświetlając odpowiedni komunikat.
Po załadowaniu obrazów treningowych rozpoczyna się etap rozpoznawania twarzy. Pojawiają się 3 okna. Jedno (główne) z obrazem z kamery, na którym wykryte twarze są oznaczone czerwonymi prostokątami. Drugie z wyciętym fragmentem twarzy przedstawiającym usta z wyrównanym histogramem. Ostatnie okno przedstawia ikonę określającą wykrytą emocję.
Przyciski H, S i O powodują zrobienie zrzutu ekranu z okna z ustami dla emocji odpowiednio uśmiechniętej, smutnej i zaskoczonej i zapisanie go w folderze data aplikacji. Takich zrzutów można potem użyć do dodania do bazy nowego użytkownika (należy stworzyć podfolder z odpowiednim numerem w folderze data i umieścić tam stworzone zrzuty).
Wciśnięcie klawisza ESC kończy działanie aplikacji.
Na zrzutach poniżej widzimy przykładowe poprawne rozpoznanie poszczególnych emocji (kolejno smutek, zaskoczenie i radość):
Integracja zadań 1 i 2
Moduły są zintegrowane za pomocą prostej aplikacji napisanej w języku C++. Jej działanie polega na uruchomieniu modułu dźwiękowego, który po rozpoznaniu użytkownika zwraca wartość będącą jego numerycznym identyfikatorem określającym numer linii w pliku z bazą nazw użytkowników (user_name_db). Ten identyfikator jest przekazywany jako parametr do uruchomienia modułu analizy obrazu, który wybiera odpowiedni dla danego użytkownika zestaw próbek i na ich podstawie rozpoznaje emocje użytkownika. Kiedy użytkownik chce zakończyć rozpoznawanie, wciska klawisz ESC, co powoduje zamknięcie modułu obrazu i zwrócenie wartości będącej numerycznym identyfikatorem określającym numer linii w pliku z bazą emocji (emotion_name_db). Następnie aplikacja integrująca wyświetla komunikat zawierający nazwę rozpoznanego użytkownika i ostatnio rozpoznaną dla niego emocję.
Aplikacja działa pod systemem Windows. Należy ją uruchamiać za pomocą przygotowanego skryptu run_integration.bat lub ew. z pliku Integration.exe podając w parametrach kolejno ścieżkę do pliku wykonywalnego modułu dźwiękowego, ścieżkę do pliku wykonywalnego modułu obrazu, ścieżkę do bazy danych nazw użytkowników oraz ścieżkę do bazy danych emocji. Przykładowe uruchomienie:
Integration.exe SpeakerRecognizer\SpeakerRecognizer.exe VideoPart\Biometric_mouth.exe user_name_db emotion_name_db
Moduły mogą działać niezależnie i być używane w programach zewnętrznych do uzyskiwania danych biometrycznych o użytkowniku na zasadzie identycznej, na jakiej działa aplikacja integrująca. Programy zewnętrzne mogą uruchamiać moduły i otrzymywać od nich identyfikatory skojarzone z wpisami w bazach danych. Moduły są łatwo rozszerzalne o dodatkowe funkcjonalności, takie jak rozpoznawanie większej liczby emocji.
Ponadto aplikacja integrująca może również zostać wykorzystana do współpracy modułów z innymi programami -- wystarczy podać odpowiednie ścieżki jako parametry uruchomieniowe i zapewnić zwracanie przez te zewnętrzne programy odpowiednich wartości skojarzonych z wpisami w bazach danych.