1.2 MiB
Sztuczna empatia 8
Rozpoznawanie emocji
Joanna Siwek
Spis treści
- Wstęp
- Emocje
- Metody rozpoznania emocji
- Zastosowania ER
- Rozpoznawanie emocji a sztuczna empatia
- Zadania
Wstęp
- korelacji pomiędzy różnymi rodzajami sygnałów fizycznych a emocjami
- wyborze właściwych impulsów, wywołujących porządane emocje
- wyodrębnianiu właściwych cech sygnałów emocjonalnych
- machanizch przyczynowo-skutkowości w wywoływaniu emocji
- wielokanałowym rozpoznawaniu emocji
Emocje
- przybliżone: szybkie reakcje uwzględniające pamięć (ale nie skomplikowane procesy poznawcze na dostępnych danych)
- reaktywne: wykonywane automatycznie w razie potrzeby;
- adaptacyjne: dynamicznie dostosowujące się do środowiska;
- ewolucyjne: tymczasowe, z możliwością nauczenia się ich;
- zbiorowe: np. emocje tłumu;
- zaraźliwe: np. reakcje na emocje innych osób generowane przez neurony lustrzane.
- emocje są instynktowne
- różni ludzie w tych samych sytuacjach odczuwają te same emocje
- różni ludzie wyrażają te same proste emocje w ten sam sposób
- podczas odczuwania podstawowych emocji, wzorce reakcji fizjologicznych różnych ludzi są takie same
Metody rozpoznawania emocji
Głównym celem badań nad rozpoznawaniem emocji jest uzyskanie bardziej naturalnego, harmonijnego i przyjaznego interfejsu HCI oraz przekształcenie komputera z logicznej maszyny obliczeniowej w intuicyjny perceptron, przechodząc w ten sposób do projektowania maszyn zorientowanego na człowieka [13].
- rozpoznanie na podstawie pikseli
- local binary pattern (LBP) - oparte na histogramach map binarnych, które są lokalną reprezentacją relacji pomiędzy pikselem a jego sąsiadami
- wavelet transform
- dyskretna transformacja kosinusowa
- Gabor feature extraction (GFE) - używa filtrów Gabora, metoda odporna na światło, skalę i przesunięcie
- wykrywanie krawędzi i skóry
- wykrywanie konturu twarzy
- metody logiki rozmytej (np. FURIA)
- algorytm k-najbliższych sąsiadów
- naiwne sieci Bayesa
- Space-Representation based Classifier (SRC)
- Support Vector Machine (całkiem dobrze wyjaśnione w [13])
Zastosowania ER
zastosowaniach w marketingu - dostosowanie treści do reakcji użytkownika; celowane reklamy; prognozowanie rynku
zastosowanie w samochodach - kontrola stanu kierowcy, pasażera
Snapchat
szeroko rozumiane zbieranie informacji zwrotnej od użytkownika
API
edukacja - dostosowanie do stanu emocjonalnego uczącego się
gry komputerowe - immersja
zdrowie i medycyna
monitorowanie obywateli (!)
Na ten moment ER jest najbardziej rozpowszechnione w dziedzinie sprzedaży i promowania produktów.
Jednym z popularniejszych rozwiązań w ER w marketingu jest wspominana już na tych zajęciach Affectiva. Systemy Affectivy rozpoznają emocje z użyciem smartfonów oraz kamerek internetowych. Algorytm najpierw odnajduje twarz wykrywając jej cechy charakterystyczne, a następnie mapuje je na wyrazy twarzy, te natomiast na emocje (rozłożone w czasie). Affectiva bada reakcje użytkowników na reklamy i produkty, pomagając budować bazę klientów [3]. Więcej o Affectivie można znaleźć w materiałach szóstych.
Na rynku dostępne są również roboty, które wkorzystują emocje w trochę inny sposób. Zamiast antropomorficznie upodabniać się do człowieka, wykorzystują one do komunikacji inne formy przekazu - na przykład wyrażanie emocji przy pomocy koloru [8].
Rozpoznawanie emocji a sztuczna empatia
Zadania
- Zainstaluj bibliotekę fer do rozpoznawania emocji. Z fer zaimportuj FER, w celu rozpoznania emocji twarzy.
Zaimportuj pyplot.
import matplotlib.pyplot as plt
Wczytaj jedno ze zdjęć, które zrobiłeś/zrobiłaś.
img = plt.imread("happy.jpg")
Wykryj twarz.
Wykryj emocję funkcją detect_emotions przyjmującą argument w postaci obrazka.
from fer import FER
detector = FER(mtcnn=True)
plt.imshow(img)
<matplotlib.image.AxesImage at 0x1dfbc25b730>
Pokarz wykryte emocje.
print(detector.detect_emotions(img))
[{'box': [337, 144, 260, 362], 'emotions': {'angry': 0.0, 'disgust': 0.0, 'fear': 0.0, 'happy': 1.0, 'sad': 0.0, 'surprise': 0.0, 'neutral': 0.0}}]
Sprawdź wszystkie 6 zdjęć. Czy emocje zostały dobrze rozpoznane?
img = plt.imread("sad.jpg")
plt.imshow(img)
print(detector.detect_emotions(img))
[{'box': [34, 211, 542, 685], 'emotions': {'angry': 0.09, 'disgust': 0.0, 'fear': 0.04, 'happy': 0.0, 'sad': 0.25, 'surprise': 0.0, 'neutral': 0.61}}]
img = plt.imread("angry.jpg")
plt.imshow(img)
print(detector.detect_emotions(img))
[{'box': [829, 189, 365, 500], 'emotions': {'angry': 0.99, 'disgust': 0.0, 'fear': 0.01, 'happy': 0.0, 'sad': 0.0, 'surprise': 0.0, 'neutral': 0.0}}]
img = plt.imread("surprised.jpg")
plt.imshow(img)
print(detector.detect_emotions(img))
[{'box': [308, 130, 156, 254], 'emotions': {'angry': 0.08, 'disgust': 0.0, 'fear': 0.13, 'happy': 0.0, 'sad': 0.0, 'surprise': 0.79, 'neutral': 0.0}}]
img = plt.imread("neutral.jpg")
plt.imshow(img)
print(detector.detect_emotions(img))
[{'box': [168, 68, 133, 171], 'emotions': {'angry': 0.01, 'disgust': 0.0, 'fear': 0.01, 'happy': 0.0, 'sad': 0.26, 'surprise': 0.0, 'neutral': 0.72}}]
img = plt.imread("fear.jpg")
plt.imshow(img)
print(detector.detect_emotions(img))
[{'box': [171, 68, 171, 246], 'emotions': {'angry': 0.39, 'disgust': 0.02, 'fear': 0.52, 'happy': 0.03, 'sad': 0.0, 'surprise': 0.04, 'neutral': 0.0}}]
Z fer zaimportuj FER i Video, w celu rozpoznania emocji z filmu.
Wczytaj film.
Przypisz film do zmiennej video.
Przeanalizuj wideo wykorzystując FER.
Wypisz wynik analizy. Sama analiza może zająć chwilę. W wyniku powinna powstać kopia filmu z zaznaczoną twarzą oraz opis emocji w każdej klatce.
- Zacznijmy od ściągnięcia danych dzwiękowych. Można skorzystać np. z [15].
- Następnie instalujemy i importujemy potrzebne biblioteki. Przyda się np. sklearn do sieci neuronowych, librosa, soundfile do dźwięków.
- W następnym kroku definujemy funkcje, które będą wyodrębniać cechy z pliku dźwiękowego: mfcc, chroma i mel. Funkcje te odpowiadają cechom mowy, które chemy wyodrębnić. Otwieramy plik dźwiękowy przy pomocy Soundfile. Dla każdej cechy, jeżeli istnieje, odwołaj sie do właściwej funkcji z librosa.feature i znajdź wartosć średnią.
- Definiujemy słownik emocji dostępny dla naszych danych. Zawęź liste do 3 wybranych emocji.
- Wczytujemy dane. Z nazw plików dźwiękowych wyodrębniamy fragment będący etykietą emocji. Wybieramy tylko te 3, które chcemy obserwować. Tworzymy dwie listy. Jedna zawiera cechy, a druga emocje. Wywołujemy funkcję train_test_split.
- Dzielimy dane na cześć treningową (75%) i testową (25%).
- Obserwujemy kształt danych treningowych i testowych.
- Obliczamy liczbę wyodrębnionych cech.
- Inicjujemy klasyfikator.
- Trenujemy model.
- Dokonujemy predykcji wartości dla zbioru testowego.
- Obliczamy dokładność modelu przy pomocy funkcji accuracy_score() ze sklearn.
Źródła:
[1] https://analyticsindiamag.com/face-emotion-recognizer-in-6-lines-of-code/
[2] https://data-flair.training/blogs/python-mini-project-speech-emotion-recognition/
[3] https://www.skyword.com/contentstandard/what-marketers-should-know-about-artificial-empathy/
[4] Bahreini, K., Van der Vegt, W., & Westera, W. (2019). A fuzzy logic approach to reliable real-time recognition of facial emotions. Multimedia Tools and Applications, 78(14), 18943-18966.
[5] Lanjewar, R. B., & Chaudhari, D. S. (2013). Speech emotion recognition: a review. International Journal of Innovative Technology and Exploring Engineering (IJITEE), 2(4), 68-71.
[6] Franzoni, V., Vallverdù, J., & Milani, A. (2019, October). Errors, biases and overconfidence in artificial emotional modeling. In IEEE/WIC/ACM International Conference on Web Intelligence-Companion Volume (pp. 86-90).
[7] James, J., Watson, C. I., & MacDonald, B. (2018, August). Artificial empathy in social robots: An analysis of emotions in speech. In 2018 27th IEEE International Symposium on Robot and Human Interactive Communication (RO-MAN) (pp. 632-637). IEEE.
[8] Terada, K., Yamauchi, A., & Ito, A. (2012, September). Artificial emotion expression for a robot by dynamic color change. In 2012 IEEE RO-MAN: The 21st IEEE International Symposium on Robot and Human Interactive Communication (pp. 314-321). IEEE.
[9] Poria, S., Majumder, N., Mihalcea, R., & Hovy, E. (2019). Emotion recognition in conversation: Research challenges, datasets, and recent advances. IEEE Access, 7, 100943-100953.
[10] Hortensius, R., Hekele, F., & Cross, E. S. (2018). The perception of emotion in artificial agents. IEEE Transactions on Cognitive and Developmental Systems, 10(4), 852-864.
[11] Sapiński, T., Kamińska, D., Pelikant, A., & Anbarjafari, G. (2019). Emotion recognition from skeletal movements. Entropy, 21(7), 646.
[12] Domnich, A., & Anbarjafari, G. (2021). Responsible AI: Gender bias assessment in emotion recognition. arXiv preprint arXiv:2103.11436.
[13] Zhang, J., Yin, Z., Chen, P., & Nichele, S. (2020). Emotion recognition using multi-modal data and machine learning techniques: A tutorial and review. Information Fusion, 59, 103-126.
[14] Hazarika, D., Poria, S., Zadeh, A., Cambria, E., Morency, L. P., & Zimmermann, R. (2018, June). Conversational memory network for emotion recognition in dyadic dialogue videos. In Proceedings of the conference. Association for Computational Linguistics. North American Chapter. Meeting (Vol. 2018, p. 2122). NIH Public Access.
[15] https://drive.google.com/file/d/1wWsrN2Ep7x6lWqOXfr4rpKGYrJhWc8z7/view