analyse dynamique d'expressions faciales dans une vidéo

49
Stage de Master Image, Vision, Interation 2 ème année Analyse dynamique d'expressions faciales dans une vidéo Smagghe Philippe 1/02/11 - 30/06/11 Laboratoire LIFL - Équipe FOX-MIIRE Directeur de stage : Chaabane Djeraba Encadrants : Marius Bilaşco, Taner Danışman 16/05/11 16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 1/49

Upload: philippesmagghe

Post on 07-Aug-2015

302 views

Category:

Documents


2 download

DESCRIPTION

Report of my5-months Internship at Laboratory of Fundamental Computer Science of Lille (LIFL)

TRANSCRIPT

Page 1: Analyse dynamique d'expressions faciales dans une vidéo

Stage de Master Image, Vision, Interation 2ème année

Analyse dynamique d'expressions faciales

dans une vidéoSmagghe Philippe

1/02/11 - 30/06/11

Laboratoire LIFL - Équipe FOX-MIIREDirecteur de stage : Chaabane Djeraba

Encadrants : Marius Bilaşco, Taner Danışman

16/05/11

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 1/49

Page 2: Analyse dynamique d'expressions faciales dans une vidéo

Résumé

La reconnaissance d'émotions dans un flux vidéo est une thématique importante de la vision par ordinateur. Ses applications sont variées, allant de l'animation de visage réaliste à l'amélioration de la communication homme-machine, en passant par les robots-jouets répondant aux émotions des utilisateurs. La méthode généralement suivie consiste en un repérage du visage et de caractéristiques faciales, comme la position et le mouvement relatif des sourcils, puis en une classification directe en émotion pour chaque image. Dans cette étude, l'approche proposée se base sur une vision dynamique de la reconnaissance d'émotions. En détectant le visage, les sourcils, les yeux, et en cherchant les informations sur le mouvement de ces parties du visage dans un flux vidéo, l'implémentation réalisée permet de reconnaître certaines de ces actions et d'en déduire les expressions faciales utilisées.

Summary

Recognition of emotions in a video stream is a major theme of computer vision. Its applications are wide, ranging from realistic facial animation to improved human-machine communications, via robotic toys that meet the users' emotions. The standard approach consists in tracking face and facial features, such as position and relative movement of the eyebrows, followed by a direct classification into emotions for each picture. In this study, the proposed approach is based on a dynamic vision of emotion recognition. By detecting the face, eyebrows, eyes, and looking for informations on the movement of these parts of the face in a video stream, the implementation allows to recognize some of these actions and to infer the facial expressions used.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 2/49

Page 3: Analyse dynamique d'expressions faciales dans une vidéo

RemerciementsJe tiens à remercier ici :

Chabane Djeraba, pour m'avoir permis de réaliser ce stage au sein de l'équipe,

Taner Danışman et Marius Bilaşco pour leur encadrement,

Robin Pochet, pour ses conseils avisés,

Ainsi que toute l'équipe FOX-MIIRE pour leur accueil et leurs conseils.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 3/49

Page 4: Analyse dynamique d'expressions faciales dans une vidéo

SommaireI. Introduction

1. Laboratoire LIFL et équipe FOX-MIIRE2. Analyse dynamique d'expressions faciales.

II. État de l'art1. Systèmes de mesure d'expressions faciales2. Types d'approches pour l'analyse d'expressions faciales3. Extraction des caractéristiques4. Classification des expressions5. Conclusion

III. Approche développée1. Approche globale2. Détection des zones d'intérêt3. Estimation de la pose4. Détection temporelle5. Extractions des caractéristiques6. Classification en expression

IV. Implémentation et tests1. Détail de l'implémentation2. Fonctions de détection3. Fonctions d'extraction et de classification4. Tests et comparaisons de l'algorithme

V. Conclusion et perspectives

Bibliographie

AnnexesA. Liste des Unités d'ActionsB. Code des fonctions

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 4/49

Page 5: Analyse dynamique d'expressions faciales dans une vidéo

I. Introduction1. Le laboratoire LIFL et l'équipe FOX-MIIRE

a) LIFL

Le LIFL, Laboratoire d'informatique fondamentale de Lille, est situé à Villeneuve d'Ascq sur le campus de l'Université de Lille 1 et de la Haute-Borne. En partenariat étroit avec le CNRS depuis sa création, le LIFL est une Unité Mixte de Recherche (UMR) de l'Université Lille 1 du CNRS et de l'université Lille 3. Il est rattaché à l'Institut des Sciences Informatiques et de leurs Interactions (INS2I) du CNRS. Partenaire privilégié du centre INRIA Lille Nord-Europe depuis sa création, il partage avec celui-ci 10 équipes-projets.

Riche de nombreux partenariats académiques, industriels et interdisciplinaires, le laboratoire s'inscrit dans la dynamique régionale de la recherche en STIC. Membre de l'institut IRCICA (USR CNRS, Institut de Recherche sur les Composants matériels et logiciels pour l'Information et la Communication Avancée) depuis 2007, le LIFL est également impliqué dans l'Institut de Recherche Interdisciplinaire (IRI). Il développe des plates-formes techniques d’envergure comme la Plate-forme Images Réalité Virtuelle et Interaction (PIRVI) ou participe à des plates-formes nationales (Grid 5000, EGEE, Senslab). Créé en 1983, le laboratoire a connu depuis une forte croissance et accueille actuellement environ 250 personnes, dont une centaine de chercheurs et enseignants-chercheurs, trente ingénieurs, techniciens et administratifs et une centaine de doctorants : c'est le plus important laboratoire français de recherche en informatique au nord de Paris.

b) Équipe FOX-MIIRE

L'équipe FOX-MIIRE (Fouille et indexation de dOcuments compleXes et multimédias - Multimédia, Image, Indexation et Reconnaissance) est une équipe de recherche du LIFL. Les thèmes principaux du groupe portent sur a) l'analyse statistique de formes 3D et ses applications comme la segmentation, la mise en correspondance et la recherche d'informations 3D, et b) la reconnaissance de visages ou d'expressions faciales. Ce travail s'inscrit dans ce second axe. L'équipe développe de nouveaux outils mathématiques et algorithmiques en combinant de nombreux domaines d'expertise tel que la géométrie, la topologie, les statistiques, l'apprentissage, la reconnaissance de formes, ou encore la vision par ordinateur.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 5/49

Page 6: Analyse dynamique d'expressions faciales dans une vidéo

2 . Analyse dynamique d'expressions faciales dans une vidéo

a) Contexte

L'analyse d'émotions remonte au 19ème siècle, où Darwin [01] avait démontré l'universalité des expressions faciales et leurs présences communes chez les hommes et les animaux. Plus récemment, Ekman et Friesen [02] ont postulé l'existence de six émotions primaires distinctes qui résultaient dans des expressions faciales différentes. Ces expressions communes semblent être universelles entre les cultures et ethnicités humaines (fig 1).

Auparavant réservée à la recherche psychologique, la reconnaissance d'émotions s'est ouverte à la recherche en vision par ordinateur avec l'arrivée d'outils comme la détection et le suivi de visages, ainsi qu'une puissance de calcul croissante. Les applications envisagées recouvrent plusieurs domaines, de l'analyse d'images pour la robotique [46] et les interfaces hommes-machines (IHMs) [45][48][50], à l'analyse de visage en médecine [03] ou pour des études psychologiques, en passant par la compression d'images de visages, la réalité augmentée ou l'animation de visages virtuels [04]. L'intérêt de la reconnaissance d'émotions a également été montré dans l'apprentissage [47].

L’équipe FOX s’intéresse de manière générale à l’extraction des informations de la vidéo et à ses applications au comportement humain. Les travaux déjà réalisés ont exploré l’extraction des émotions de base à partir des images en utilisant uniquement des informations statiques telles que les distances entre les régions significatives du visage (sourcils, yeux, nez, bouche, etc). Ces informations étaient suffisantes pour caractériser des émotions simples et plutôt statiques telles que la joie ou la surprise. Cependant, elles ne suffisent pas lors de l'étude des émotions plus complexes telles que l’énervement ou le stress.

Les expressions faciales sont générées par les contractions des muscles du visage, ce qui génère des déformations dans les zones caractéristiques du visage, telles que les paupières, les sourcils, ou les lèvres pour une durée généralement comprise entre 250 ms et 5 s. Les émotions sont déduites de la déformation relative des différentes zones d'intérêt faciales, mais également de leurs combinaisons et timings. C'est pourquoi l'analyse d'images statiques ne peut révéler des changements subtils dans l'expression faciale. L'hypothèse de l'équipe est que l’apport informationnel issu de l’étude du mouvement de la personne dans sa globalité peut augmenter de manière importante la détection des émotions et la quantification de leur intensité, hypothèse validée par différentes recherches psychologiques [49].

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 6/49

Figure 1 : Expressions de la colère, du dégoût,de la tristesse, de la peur, de la suprise et de la joie.

Page 7: Analyse dynamique d'expressions faciales dans une vidéo

b) Problématique et objectifs

Le sujet de ce stage est d’étudier l’impact de la dynamique du visage et des gestes sur l’extraction des émotions à partir de flux vidéos. L'objectif de ce stage est donc de modéliser, implémenter et tester un programme exploitant la composante dynamique des expressions faciales pour reconnaître les émotions des utilisateurs. Les différentes étapes incluent la détection temporelle des expressions, la détection spatiale du visage, des yeux et de la bouche et leur normalisation, puis l'extraction de caractéristiques spécifiques aux expressions faciales, et enfin une classification de ces caractéristiques en émotions.

Les principaux problèmes à résoudre sont, notamment, la grande diversité des physionomies d'une personne à l'autre et l'immense gamme d'expressions faciales possibles, variables en timing et en aspect à la fois selon l'âge, le sexe, l'ethnie, l'apparence des cheveux, ainsi que la présence de divers accessoires (lunettes, mèches). À cela s'ajoutent les difficultés liées à la prise de vue, comme les variations de la position de la tête, les éclairages partiels, et les occlusions. Enfin, des contraintes techniques imposent de limiter l'espace mémoire requis et le temps de calcul afin de permettre l'exécution en temps réel ou semi-temps réel.

c) Plan du rapport

Dans la suite du rapport, je présente dans la partie II un état de l'art détaillé sur les méthodes existantes en reconnaissance dynamique d'émotions, avec une comparaison des types de mesures d'expressions faciales (II.1), une analyse des techniques de normalisation et des approches de détection des expressions faciales (II.2), une revue de plusieurs techniques d'extraction de caractéristiques (II.3) et une étude des méthodes de classification des expressions (II.4).

J'expose dans la partie III l'approche élaborée au cours du stage, avec notamment la détection spatiale des caractéristiques faciales (III.2), une estimation de la pose de la tête pour la normalisation (III.3), la détection temporelle des expressions (III.4), l'extraction de caractéristiques (III.5) et une classification des expressions en émotions (III.6).

Ensuite, la partie IV montre le détail de l'implémentation (IV.1), les tests et résultats des algorithmes de détection (IV.2), des algorithmes d'extraction de caractéristiques et des algorithmes de classification (IV.3), enfin les tests de l'algorithme entier (IV.4). Enfin, la partie V conclut ce rapport et apporte quelques perspectives sur des applications futures. Certains détails du système de classification ainsi que le code des fonctions sont détaillés respectivement dans les annexes A et B.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 7/49

Page 8: Analyse dynamique d'expressions faciales dans une vidéo

II. État de l'art1 . Systèmes de mesure d'expressions faciales

a) Approches basée sur le jugement

Il existe différentes approches dans l'analyse d'expression. La plupart des approches se réfèrent à un jugement humain et consistent en la classification directe de visages dans les 6 émotions basiques définies par Ekman [02], en se basant sur l'interprétation d'experts ou de non-experts pour juger des résultats. Cette méthode est la plus simple à tester, mais a pour désavantage d'influencer la précision des résultats, en particulier pour l'évaluation du timing et de l'intensité des expressions par les interprètes.

b) Approches basées sur les symboles

À l'opposé, d'autres approches sont basées sur les symboles, les déformations et mouvements du visage sont reconnues puis classifiées, avant d'être interprétée. Différents systèmes ont déjà été créé pour le codage de ces différentes actions faciales. Les plus récents, comme EMFACS [06], MAX [07], ou AFFEX [08] sont construits spécifiquement dans le but de la reconnaissance d'émotions. Cependant, le système majoritairement utilisé dans les approches basées sur les symboles est le système FACS (Facial Action Coding System) conçu dans ce but par Ekman et Friesen [05].

Selon Ekman [66], plusieurs aspects doivent être considérés lors de la mesure d'expressions faciales, comme (a) une référence externe pour l'évaluation de certaines actions faciales spécifiques, car certaines expressions sont plus aisées à reconnaître que d'autres, (b) des expressions spontanées plutôt que posées, (c) des sujets variés, y compris des enfants, des adultes et des personnes âgées, (d) l'utilisation d'experts et de non-experts pour la mesure, et (e) l'évaluation de la précision de la mesure à la fois pour le type et l'intensité des expressions. Ces étapes sont plus facilement résolus avec une approche basée sur les symboles qu'avec une approche basée sur le jugement, car cette dernière ne peut fournir qu'une précision de classification limitée. Par exemple, il y a au sein d'une catégorisation basique d'émotions trop de place pour l'interprétation. Même si ces émotions sont universelles, l'interprétation est fortement influencée par la culture [67] ou l'apprentissage [68].

D'un autre côté, les approches basées sur les symboles sont plus objectives, car les interprètes ne doivent s'accorder que sur des actions spécifiques plutôt que de réaliser l'interprétation globale du visage. Ces approches ont également l'avantage de séparer la reconnaissance et l'interprétation des expressions faciales. C'est pourquoi l'approche proposée ici se base sur les symboles, à l'aide du système FACS, décrit plus précisément dans la suite.

c) Détail du système FACS

Le Facial Action Coding System (FACS) est une méthode de description des mouvements du visage développée par les psychologues Paul Ekman et Wallace Friesen à la fin des années 1970 [05]. C'est devenu le principal outil de description utilisé dans les études s'intéressant à l'expression faciale, par exemple dans le domaine des sciences affectives. Cette nomenclature s'inspire elle-même des travaux de l'anatomiste suédois Carl-Herman Hjortsjö publiés dans son ouvrage sur l'imitation faciale Människans ansikte och mimiska språket [59] (Le visage de l'homme et le langage de l'imitation, 1969).

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 8/49

Page 9: Analyse dynamique d'expressions faciales dans une vidéo

Dans le système FACS, les mouvements du visage sont décomposés en unités d'action (ou Action Unit, AU). Le système FACS repose sur la description de 46 AUs identifiées par un numéro dans la nomenclature FACS. Par exemple, l'AU 1 correspond au mouvement de lever les sourcils au niveau du nez (Inner Brow Raiser), comme montré sur la figure 2.

Figure 2 : AU 1 : Levé sourcils intérieurs (Inner Brow Raiser)

Chaque AU peut correspondre à la contraction ou à la détente d'un ou plusieurs muscles, qui se traduit par un mouvement d'une partie donnée du visage. Une expression faciale, comme une expression de peur, correspond donc à la mise en jeu de plusieurs unités d'action. Par exemple, dans le cas d'un visage apeuré, les AUs mises en jeu seraient : (1), levé des sourcils intérieurs (2), levé des sourcils extérieurs, et éventuellement (20), tension des lèvres et (26), abaissement de la mâchoire inférieure.

Le système FACS permet de coder manuellement presque l'ensemble des expressions faciales possibles, en les décomposant en AUs, et en segments temporels correspondants. Comme les AUs sont indépendantes de l'interprétation, elles peuvent être utilisées par des processus plus complexes, comme la reconnaissance des émotions basiques. Ekman et Friesen ont également développé EMFACS [06] (Emotion Facial Action Coding System) et FACSAID [09] (Facial Action Coding System Affect Interpretation Dictionary) qui ne considèrent que les émotions relatives aux actions faciales. Par exemple :

Joie AU 6+12

Tristesse AU 1+4+15

Surprise AU 1+2+5B+26

Peur AU 1+2+4+5

Colère AU 4+5+6+23

Dégoût AU 9+15+16

Mépris AU 12A+14A

Le système FACS est un index d'expressions faciales, mais ne donne aucune information biomécanique à propos du degré d'activation des muscles. Les intensités des AUs sont notées par des lettres de A à E, A étant le degré le plus faible, et E l'intensité maximale pour la personne. Les degrés sont les suivants :

A Trace, B Léger, C Marqué/Prononcé, D Sévère/Extrême, E Maximum

Une liste des AUs est donnée en Annexe A.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 9/49

Page 10: Analyse dynamique d'expressions faciales dans une vidéo

2 . Types d'approches pour l'analyse d'expressions faciales

Sur la figure 3, on représente les différentes approches généralement utilisées dans le cadre de la reconnaissance d'émotions. Les méthodes varient selon leur méthode de normalisations et segmentation, leur extraction des caractéristiques, leur représentation et codage sous-jacent, ainsi que leur interprétation.

L'analyse des expressions faciales en vision par ordinateur est complexe du fait de la variété des physionomies d'une personne à l'autre, ainsi que des problèmes liés à la prise de vue, comme l'éclairage, la position du visage par rapport à la caméra, et les occultations. Certaines méthodes permettent de résoudre ces problèmes en normalisant le visage. En particulier, il existe des algorithmes de normalisation par rapport à des modèles de visage pour la position de la tête [10], ainsi que des méthodes d'analyse multi-résolutions pour l'estimation de la taille de la tête [11]. Pour les problèmes d'illumination, il existe des approches à base d'ondelettes de Gabor [12] qui résolvent les changements d'éclairage de manière globale, mais peu de travaux ont été réalisés sur des visages en partie éclairés [13]. L'approche proposée ici normalise le visage par rapport aux rotations et à l'échelle, ce qui est détaillé dans la partie III.3. Les problèmes d'illuminations n'ont pas été considérés par manque de temps. Enfin, les problèmes d'occultations sont partiellement résolus par la segmentation du visage en sous-parties, ce qui est mis en évidence dans la partie III.6.

La détection temporelle des expressions est peu abordé dans les études, parfois résolu à l'aide de détection d'images-clés (keyframes) [16], ou par l'analyse de fenêtres temporelles de taille variables. Ces méthodes permettent de réduire le temps de calcul de l'algorithme par rapport à une analyse directe pour l'ensemble des données, en évitant de réaliser des calculs inutiles sur des images où aucune expression n'est détectée. L'approche proposée utilise une méthode dérivée de [16] pour la détection temporelle des expressions, dans la partie III.4.

À partir d'un visage normalisé, on peut diviser les différentes approches selon plusieurs critères. On distingue par exemple les approches basées sur les déformations (dites statiques) des approches basées sur les mouvements (dites dynamiques). Dans le premier cas, on se concentre sur une image supposée neutre du visage pour extraire des caractéristiques faciales qui sont pertinentes pour déterminer les expressions. Mais ces méthodes ne permettent pas

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 10/49

fig.3 : Représentation des différentes étapes de la reconnaissance d'émotions. (données, méthodes) [14].

Normalisation : Pose, Échelle Illumination

Acquisition du visage

Approches : Déformation - Basée sur l'image - Basée sur des modèles

Approches : Mouvement- Suivi de points d'intérêt- Dense Optical Flow- Modèles de mouvements

Classification de l'expression

Représentation des caractéristiques : Basée sur les actions musculaires Modèles de paramètres Projection en composantes

Reconnaissance : - Codage en actions faciales

Interprétation : - Classification en expressions

Émotions basiques

Extraction des caractéristiques

Segmentation : Arrière plan/Visage Points d'intérêts

Page 11: Analyse dynamique d'expressions faciales dans une vidéo

de reconstruire des mouvements de manière globale. Des études psychologiques [49] ont montré que la reconnaissance des expressions était plus précise et robuste dans le cas de vidéos qu'avec des images seules. Dans le cas des approches dynamiques, on extrait les changements du visage dus à une expression, ce qui permet de s'affranchir des caractéristiques propres à une personne, telles que physionomie du visage, rides, tatouages, mèches de cheveux. Les méthodes dynamiques ont également plus de liens avec les systèmes de codage tel que FACS, car les mouvements du visage sont directement liés aux actions musculaires et donc aux Actions Units. C'est pourquoi l'algorithme proposé se base sur une approche de type dynamique.

3. Extraction des caractéristiquesDans le cadre des approches dynamiques, on peut distinguer deux directions de

recherche distinctes : les approches holistiques, où l'on analyse le visage dans sa globalité, et les approches locales, où l'on se concentre sur des caractéristiques faciales qui sont représentatives des expressions. Les points caractéristiques pertinents sont en particulier les yeux, les sourcils, la bouche, et éventuellement le front. De manière générale, les méthodes holistiques sont meilleures pour déterminer les expressions dans leur ensemble, tandis que les méthodes locales peuvent détecter des changements plus subtils [69].

a) Extraction par optical flow

Parmi les différentes méthodes dynamiques, nous trouvons l'optical flow dense [17][18], appliqué de manière holistique. La méthode utilisée dans [18] utilise en particulier une méthode d'optical flow dense, multi-résolution, basé sur des ondelettes. Dans la figure 4, nous pouvons voir un exemple de vecteurs obtenus en appliquant une méthode d'optical flow sur une séquence d'images.

fig.4 : Exemple d'application d'optical flow [14].

Cette méthode a également été appliquée de manière locale dans [19][58] en estimant l'activité de plusieurs muscles faciaux. Le calcul est alors réalisé dans chaque fenêtre autour de la région d'intérêt sélectionnée. D'autres travaux [20] ont également estimé l'expression dynamique en appliquant la transformée de Fourier aux résultats d'optical flow de zones particulières. Ces algorithmes sont de manière générale sensibles au bruit, à l'éclairage, ainsi qu'aux discontinuités de mouvement. Le temps de calcul peut parfois être important.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 11/49

Page 12: Analyse dynamique d'expressions faciales dans une vidéo

b) Extraction par modèles de mouvements

L'utilisation de modèles de mouvement (motion models) est également une approche utilisée de manière locale ou holistique. Par exemple, dans [21], des contours déformables (snakes) sont utilisés pour suivre les mouvements des lèvres et d'autres caractéristiques faciales sur des séquences d'images. Dans [22], on utilise des modèles de mouvement 3D pour la reconnaissance d'expression sur l'ensemble du visage.

De manière locale, les modèles de mouvement ont également été utilisés avec l'utilisation de modèles paramétriques sur des régions d'intérêt [23][24][57] pour modéliser les mouvements de la bouche, du nez, des paupières et des sourcils. Ces méthodes permettent d'exprimer avec peu de paramètres les mouvements faciaux basiques, mais se révèlent peu efficaces sur des actions plus complexes.

c) Extraction par suivi de points d'intérêts

Certaines méthodes se concentrent sur le mouvement relatif de points d'intérêts, de motif ou de marqueurs. Les méthodes de suivi de points d'intérêt estiment les mouvements uniquement à partir d'une sélection de points sur le visage [18][25][26][58]. Ces points sont généralement placés dans des zones de fort contraste pour une meilleure détection (figure 5). L'analyse de mouvement n'est pas réalisée ailleurs que sur ces points, et donc certaines expressions ne peuvent être reconnues par ce moyen. L'initialisation des points d'intérêt peut poser également des problèmes, et est réalisée soit manuellement, soit de manière automatique [27][70]. Une autre solution pour résoudre ce problème est l'utilisation de marqueurs sur le visage, ce qui permet de visualiser des mouvements dans des zones de faible contraste (joues, front) [28][29][30].

fig. 5 : Sélection de régions d'intérêt automatique.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 12/49

Page 13: Analyse dynamique d'expressions faciales dans une vidéo

d) Extraction par l'utilisation de différences d'images

Une dernière méthode pour l'extraction dynamique d'expressions faciales est l'utilisation de différences d'images [31][17][32][33]. Dans cet algorithme, on soustrait l'image à analyser à une image antérieure de la même personne dans les mêmes conditions, supposée d'expression neutre (figure 6). Cette méthode a pour inconvénient de ne pas permettre le calcul de directions de mouvements, mais permet d'en estimer uniquement l'intensité. Cette méthode est également très sensible aux rotations, translations et changements d'échelle du visage, ce qui est résolu dans [34] par l'utilisation d'histogrammes locaux sur des images consécutives.

fig.6 : Utilisation d'Images différences entre des visages expressifs et neutres. [14].

4. Classification des expressionsLa classification des caractéristiques en expressions est la dernière étape du système.

On distingue deux approches de classification, à savoir spatiale ou spatio-temporelle. Dans les approches spatio-temporelles, les modèles de Markov cachés (HMMs, Hidden Markov Models), à la base conçus pour la reconnaissance vocale, sont souvent utilisés en raison de leur efficacité [20][35][54][55].

Des réseaux de neurones récurrents sont également utilisés [36][37] dans ce but. On les retrouve dans des approches spatiales [38][17][39][56], soit directement sur des images de visage, soit combinés avec des techniques d'extraction de caractéristiques, comme l'analyse en composante principale [54], ou les filtres à base d'ondelettes de Gabor [31][40][60]. Ces dernières méthodes permettent une grande réduction dimensionnelle, ce qui simplifie la classification. L'inconvénient majeur des réseaux de neurones est leur apprentissage, qui est très important lorsqu'on tente de reconnaître une expression parmi les milliers de combinaisons que le système FACS offre. Plus récemment, plusieurs méthodes à base de réseaux bayésiens [51][54], de machines à vecteurs de support ( SVM, Support Vector Machine ) [52][53] offrent des résultats appréciables et généralement similaires, comme le montre l'étude [52].

Les résultats sont souvent combinés par une méthode de boosting comme Adaboost, diminutif d'Adaptative Boosting [65], un algorithme d'apprentissage pouvant être utilisé en conjonction avec d'autres algorithmes pour améliorer leurs performances. AdaBoost est adaptatif dans le sens que les classifieurs reconstruits sont modifiés au regard des cas mal classifiés par les précédents. AdaBoost est sensible au bruit et aux données aberrantes. Cependant, dans la majorité des cas, il est moins susceptible au problème de surapprentissage que la plupart des algorithmes d'apprentissage.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 13/49

Page 14: Analyse dynamique d'expressions faciales dans une vidéo

La reconnaissance des expressions faciales est traditionnellement basée sur des règles ou des représentations symboliques créées par les chercheurs au cours de leurs études, par exemple [24]. Une aide d'experts humains est alors nécessaire pour les convertir en émotions. Cependant, les messages faciaux se décomposent en de multiples expressions distinctes, chacune avec des évolutions et intensités distinctes. Certaines expressions varient très subtilement, ce qui rend la tâche de classification manuelle difficile. C'est pourquoi les travaux récents sont majoritairement tournés vers des systèmes de codages d'expressions faciales, tels que MPEG-4 [41][42][56], FACS [17][32][33][54], ou encore FACS+, une extension du système FACS qui permet de décrire la dynamique des expressions faciales [22] de manière exhaustive.

L'interprétation consiste généralement en une assignation directe des expressions faciales en une des 6 expressions basiques, par exemple [22][43]. Certains utilisent cependant des systèmes de règles ou des dictionnaires d'expressions faciales pour retranscrire les actions faciales en catégories d'émotions [24][44]. Cette dernière méthode a l'avantage de décrire précisément les expressions faciales sans recourir à une interprétation, et a donc été retenue dans l'approche proposée.

5. ConclusionDans cet état de l'art, nous avons vu différentes approches pour la reconnaissance

dynamique d'expressions faciales dans une vidéo. Il est à ce jour difficile de comparer les différentes méthodes proposées, en raison des différences de classification des expressions faciales (plus ou moins de classes d'émotions), ou de la disparité des protocoles de tests et bases de données utilisés. On peut citer les bases de données [71] et [72], mais de manière générale, il y a un manque de bases de données de test d'images ou de vidéos d'expressions faciales librement utilisables qui permettraient de tester les approches de manière plus poussée.

À ce jour, la plupart des travaux réalisent une classification des expressions dans une des émotions basiques, et donc ne permettent pas de reconnaître les expressions dues à un effet sans émotion (cillement par exemple) ou un effet physiologique (bâillement). Certaines méthodes se concentrent cependant sur des expressions plus spontanées [51][52]. Le système FACS présenté ici offre une solution à ce problème, en séparant leur décomposition en mouvements et leur interprétation. Un autre problème peu étudié est le fait que les expressions faciales peuvent souvent intervenir dans une conversation [15], car le langage, et les mouvements de la bouche qu'il implique changent la physionomie du visage. Enfin, certains travaux partent vers de toutes autres approches, comme les méthodes multimodales, prenant en compte l'activité sonore ou encore d'autres données physiologiques, telle la fréquence cardiaque.

L'approche proposée dans la suite du rapport utilise plusieurs des techniques de cet état de l'art. En particulier, elle s'inspire des travaux de [16] pour une méthode originale de détection temporelle, et exploite une méthode d'extraction de caractéristiques utilisant l'optical flow. Enfin, la classification a été réalisée à l'aide de dictionnaires de règles et de HMMs.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 14/49

Page 15: Analyse dynamique d'expressions faciales dans une vidéo

III. Approche développée1. Approche globale

L'approche proposée est partiellement basée sur le travail de Fadi Dornaikaa et Bogdan Raducanu dans « Inferring facial expressions from videos : Tool and application » [16], cependant, les algorithmes divergent sur de nombreux points et sont difficilement comparables. Elle se base sur une détection d'unités d'actions (Action Units, AUs) à partir de certaines zones du visage, comme les sourcils et la bouche, afin de reconstituer des expressions faciales à partir du système FACS.

La détection de zones d'intérêt (fig.5) est assurée par des méthodes déjà développées telles que la méthode de Viola-Jones [61]. La détection temporelle des expressions, inspirée de [16], est assurée par la détection d'images-clé (keyframes). La pose et l'éclairage des visages sont estimées par une méthode originale afin de normaliser les images extraites. Les caractéristiques sont ensuite extraites par une technique de flux optique (optical flow) avant d'être classifiées par un dictionnaire de règles, ou par des modèles de Markov cachés (Hidden Markov Models, HMMs) dans une des émotions basiques. L'algorithme est constitué de la manière suivante : (fig. 7)

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 15/49

Figure 7 : Approche utilisée.En trait continu : ma contribution

Initialisations

Acquisition de l'image

Détection du visageTrouvé ?

Détection des yeux/nez/bouche

Détection temporelle et classificationFin d'AU détectée ?

Extraction des caractéristiques et Identification AUs

Classification des AUs

Expression faciale

O

O

N

N

Calcul et correction de la pose de la tête

Page 16: Analyse dynamique d'expressions faciales dans une vidéo

Cette approche présente certains avantages. Du point de vue de la détection spatiale, le fait de décomposer le visage en sous-parties permet une meilleure résistance aux occlusions ainsi qu'aux différences d'éclairage. Cependant, elle limite la détection des AUs aux zones concernées. La détection temporelle proposée permet de réduire la complexité et la mémoire requise pour les calculs par rapport à une approche classique, mais peut échouer à reconnaître des émotions au timing complexe ou lent. Les normalisations par la pose et l'éclairage permettent une précision accrue dans les résultats. Enfin, du côté de l'extraction des caractéristiques, l'approche dynamique permet de retrouver certaines expressions difficilement identifiables sur une image seule, telle que la colère ou la tristesse, tout en augmentant considérablement le temps de calcul, du fait de l'analyse de plusieurs images à chaque AU détectée.

Dans ce qui suit, on détaille pour chaque étape les modélisations effectuées. Les différentes méthodes proposées sont implémentées, testées et évaluées dans la partie IV : Implémentation et Tests.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 16/49

Page 17: Analyse dynamique d'expressions faciales dans une vidéo

2. Détection des zones d'intérêt

Les zones choisies sont les plus représentatives des expressions faciales : les sourcils, principaux indicateurs d'énervement, colère, surprise, et joie authentique, et la bouche, indicatrice des expressions de dégoût, joie authentique ou de politesse, tristesse et mépris [71].

Le front, le philtrum, et les joues ont également été considérés, car l'apparition de lignes sur ces zones est également signe d'une expression faciale. Cependant, les méthodes de détection de ces zones et d'extraction des caractéristiques étaient trop différentes de celles de la bouche. En effet, ces zones sont relativement uniformes, et la détection de lignes, quoique possible à l'aide de la transformée de Hough, serait trop sensible aux changements d'illumination, ou aux occultations (barbes, moustaches, sourcils). Enfin, l'apparition et l'interprétation de ces lignes n'est pas universelle (différences ethniques, ou simplement rides) et auraient été difficiles à intégrer dans la classification. Ces zones n'ont donc pas été retenues.

Le visage, les yeux et la bouche sont détectés par la méthode de Viola-Jones. Cette méthode permet la détection d'objets pour lesquels un apprentissage a été effectué. Elle a été conçue spécifiquement dans le but de la détection de visage, mais peut également être utilisée pour d'autres types d'objets. En tant que procédé d'apprentissage supervisé, la méthode de Viola-Jones nécessite de quelques centaines à plusieurs milliers d'exemples de l'objet à détecter, pour entraîner un classifieur. Le classifieur est ensuite utilisé dans une recherche exhaustive de l'objet pour l'ensemble des positions et tailles possibles dans l'image à traiter. Cette méthode a pour avantage d'être efficace, rapide, et de profiter d'une implémentation sous la librairie graphique OpenCV [73]. Les classifieurs des zones considérées sont également déjà réalisés et disponibles [77].

La méthode de Viola-Jones utilise des représentations synthétiques des valeurs des pixels : les caractéristiques pseudo-Haar. Ces caractéristiques sont calculées par la différence de sommes de pixels de deux ou plusieurs zones rectangulaires adjacentes (fig. 9), pour toutes les positions et à toutes les échelles dans une fenêtre de détection. Ce nombre de caractéristiques peut alors être très élevé. Les meilleures caractéristiques sont alors sélectionnées par une méthode de boosting, ce qui permet d'obtenir un classifieur plus « fort » par une pondération de classifieurs « faibles ». La méthode de Viola-Jones utilise ici l'algorithme Adaboost.

La recherche exhaustive d'un objet au sein d'une image pouvant s'avérer coûteuse en temps de calcul, la méthode organise la détection en une cascade de classifieurs, appliqués séquentiellement. Chaque classifieur détermine la présence ou l'absence de l'objet dans l'image. Les classifieurs plus simples et plus rapides sont placés en premier, ce qui permet d'éliminer très rapidement un grand nombre de résultats négatifs (fig. 10).

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 17/49

Fig. 9 : Exemples de voisinages utilisés

Fig. 8: Zones d'intérêt

Page 18: Analyse dynamique d'expressions faciales dans une vidéo

De manière générale, la méthode de Viola-Jones offre de bons résultats dans la détection de visages ou d'autres objets, avec peu de faux positifs pour un temps calcul assez faible, ce qui permet ici le fonctionnement en temps réel.

3. Estimation de la pose

L'estimation de la pose de la tête à partir d'une vidéo est en soi un sujet de recherche encore ouvert. Ce calcul permet de normaliser certaines mesures, et permet de recalculer certaines images en contrebalançant les rotations. Certaines méthodes plus complexes donnent de meilleurs résultats, mais leur étude aurait demandé trop de temps pour les résultats escomptés.

La solution proposée a consisté en une modélisation simplifiée du visage en une sphère. Les angles utilisés sont définis ci-dessous (fig.11).

Les trois angles sont considérés à 0° quand la tête est de face, sans orientation visible par rapport à la caméra. La position relative des yeux, de la bouche, et des tempes permettent de retrouver les trois angles de manière approximative, mais la précision est suffisante pour être utile.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 18/49

Fig.10 Cascade de classifieurs

fig.11 : Définition des angles de rotation (image d'après [78])

Page 19: Analyse dynamique d'expressions faciales dans une vidéo

Le tangage est défini par l'angle des yeux avec l'horizontale.

Le roulis est repéré par la variation de distance entre la bouche et les yeux.

Le lacet est retrouvé par les longueurs des tempes à gauche et à droite des yeux.

Ces calculs d'angles ne sont pas affectés par les expressions faciales, car les distances utilisées sont constantes sur le visage et ne varient que par rapport à la position de la tête. On peut également évaluer le lacet par la position relative du nez et des yeux, mais le nez est plus difficile à détecter que les bords de la tête, une fois les yeux repérés. Les coefficients α,β,γ,δ sont déterminés à partir de l'échelle du visage et des constantes anatomiques, telles la distance entre les yeux, ou la distance entre le nez et les yeux, qui ne varient qu'en fonction de l'individu. Ces mesures sont toutefois très sensibles aux occultations.

Dans ces calculs, seule l'évaluation du tangage reste correcte pour de grandes variations de poses. Les sous-images extraites peuvent subir une contre-rotation sur le tangage pour permettre une plus grande précision dans les mesures. D'autres mesures de distance ou sous-images extraites peuvent également être réinterprétées en prenant en compte le roulis et le lacet du visage.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 19/49

Lacet=signe TempeGauche−TempeDroite∗∗min TempeGaucheTempeDroite

,TempeDroite

TempeGauche

Roulis=∗DistanceYeuxBouche

Tangage=arctanAbcisseYeux/DistanceYeux

Distance Yeux-Bouche

Tempe gauche

Tangage

Tempe droite

Page 20: Analyse dynamique d'expressions faciales dans une vidéo

4. Détection temporelle

a) Détection d'images clésLa détection temporelle est une étape préliminaire permettant d'identifier les périodes

où une expression faciale est présente, sans chercher à l'identifier, dans le but de gagner du temps de calcul en n'exécutant pas tout les calculs à chaque image de la vidéo. Ici, elle est basée sur la recherche d'images clés (keyframes) au sein de la vidéo, correspondant au pic de mouvement d'une expression faciale. Cette recherche est effectuée pour les sous-régions du visage détectées, afin de repérer de manière séparée les Actions Units. On fait l'hypothèse que les changements d'expressions faciales passent par un pic d'intensité, correspondant à une différence maximale entre deux images consécutives sur la zone considérée. Plusieurs difficultés se posent alors : certains mouvements trop lents ne seront pas détectés, et les erreurs de détections entrainent des variations dans les mesures. Par exemple une sous-image peut trembler car le détecteur échoue à trouver correctement la position d'une caractéristique faciale, ce qui entraine des variations entre deux images consécutives.

La figure 12 montre le calcul de différence entre deux sous-images consécutives. Cette

différence est calculée par : A , B= ∑tt pixels

IA−IB ² ,

où I(A) et I(B) représentent les intensités de pixels des images consécutives A et B.

Selon la qualité du détecteur, cette différence est relativement constante sans mouvement à l'intérieur de la zone, ce qui permet la détection des keyframes. En calculant la moyenne des dernières valeurs, avec une formule permettant d'augmenter la pondération des valeurs les plus récentes, on peut estimer la qualité du détecteur. Les images clés sont alors définies par un rapport à la moyenne supérieur à un certain seuil.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 20/49

At∈Keyframes ssiAt , At1

Moyenne≥Seuil

Fig. 12 : Exemple de calcul de différence entre images consécutives d'une zone du visage.

Page 21: Analyse dynamique d'expressions faciales dans une vidéo

b) Détection des limites des AUs

Les images-clé ainsi définies, il reste alors à déterminer le début et la fin des changements d'expressions faciales, correspondant à une AU. La solution proposée est un seuillage par hystérésis. On définit ainsi des Frame Move (FM), correspondant à un mouvement détecté, mais trop faible pour être considéré comme une KeyFrame (KF). Enfin, on classe en Frame Stop (FS) et Failed Detection (FD) les images dont la différence calculée est soit trop faible pour correspondre à un mouvement, soit trop élevée, indiquant que le cadre de la détection a bougé d'une manière trop forte.

Une AU est alors trouvée si une Frame Move est trouvée, et qu'au moins une KeyFrameest trouvée par la suite. L'Action Unit se termine lorsque le rapport à la moyenne repasse en dessous du seuil des Frame Move ( fig. 13).

Fig. 13 : Exemple de détection temporelle d'AU. Les seuils sont ici arbitraires. Dans le second cas, l'action unit n'est pas déterminée, car aucune KeyFrame n'a été trouvée après le dépassement du seuil des Frame Move.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 21/49

% Moyenne

0%

200%

400%

FS

KF

FM

Action Unit

t

Page 22: Analyse dynamique d'expressions faciales dans une vidéo

5. Extractions des caractéristiques

Les caractéristiques extraites doivent permettre de reconnaître les AUs présentes. La détection temporelle permet de renvoyer une série de sous-images correspondant à un mouvement particulier. Les AUs à la fois utiles et détectables sont toutefois limitées.

Par exemple, les AUs suivantes composent les expressions les plus visibles :

AU 1 : Inner Brow Raiser

Levé sourcils intérieurs

AU 2 : Outer Brow Raiser

Levé sourcils extérieurs

AU 4 : Brow Lowerer

Baisse des sourcils

AU 12 : Lip Corner Puller

Étirement des coins des lèvres

AU 15 : Lip Corner Depressor

Baisse des coins des lèvres

Ainsi, les mouvements possibles pour les sourcils peuvent être reconnus par la direction (haut ou bas) et l'origine (intérieur ou extérieur) du mouvement. Les mouvements de la bouche peuvent être reconnus par l'augmentation de la distance des coins de la bouche, ou par un mouvement vers le bas. Puisque la détection est localisée sur ces parties du visage, différentes méthodes ont été envisagées selon la région.

Pour les sourcils, une méthode d'estimation de mouvement possible est le flux optique (optical flow), vue dans l'état de l'art. Cette méthode retrouve le mouvement apparent des objets, des bordures ou des surfaces au sein d'une image, dû soit au mouvement du capteur, soit au mouvement de l'objet. À partir de deux images, on retrouve les mêmes points pour estimer une direction et une norme. Une des méthodes les plus utilisées pour calculer un flux optique est l'algorithme de Lucas-Kanade [62].

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 22/49

Page 23: Analyse dynamique d'expressions faciales dans une vidéo

Cet algorithme assume un flux constant dans le voisinage des pixels considérés, et permet de résoudre les équations relatives au flux optique par la méthode des moindres carrés. Cette hypothèse de flux constant implique que les différences entre les images successives sont suffisamment faibles, en général entre 0 et 1 pixel, pour que les équations du flux optique puissent être posées. Cependant, des mouvements plus importants peuvent également être analysés, par exemple en interpolant à partir des vecteurs de flux des images précédentes. L'utilisation de la méthode des moindres carrés implique que les erreurs au sein de l'image aient une distribution gaussienne à moyenne nulle, ce qui est vérifié dans le cas considéré.

Le calcul du flux optique demande la sélection de points particuliers. Ces points sont idéalement des coins ou des textures de l'image qui peuvent facilement être suivis. Des algorithmes ont déjà été développés pour résoudre ce problème. On peut par exemple citer l'algorithme de Canny [63], qui calcule le gradient d'une image et retrouve les contours par un seuillage par hystérésis. Les coins peuvent alors être détectés par une sélection des contours les mieux détectés. Pour une application de suivi, on tente généralement de conserver les même points le plus longtemps possible, mais les accumulations d'erreurs au fil du temps entraînent la perte progressive des points suivis. Dans notre cas, la conservation des points n'est pas utile car les mouvements sont simples et ne vont que dans une seule direction au cours d'une AU. Ainsi, on peut rechercher de nouveaux points sur chaque paire d'images, ce qui ne prends pas beaucoup de temps de calcul et évite des erreurs de mesure. La figure 14 montre le calcul du flux optique d'une paire d'images d'une vidéo. Les points sont sélectionnés automatiquement sur la première image et correspondent aux zones de fort gradient.

fig. 14: Exemples de calcul de flux optique sur une vidéo.

En calculant la direction moyenne des vecteurs de flux optiques, et en calculant la norme moyenne des vecteurs projetés sur cette direction, on identifie le mouvement global sur la zone sélectionnée. Sur une vidéo de visage, cela permet de reconnaître l'AU repérée précédemment par la détection temporelle. Par exemple, un mouvement global vers le haut des pixels d'une sous-image d'un sourcil entre le début et la fin d'une AU sera interprété par une AU1 ou 2. En divisant l'image du sourcil en deux et en refaisant le calcul sur chaque partie, on peut retrouver alors s'il s'agit d'un mouvement de levé de sourcils externe (AU2) ou interne (AU1). Les actions ainsi détectées permettent d'établir un timing des AUs, ce qui servira pour une classification en expression.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 23/49

Page 24: Analyse dynamique d'expressions faciales dans une vidéo

6. Classification en expression

Deux approches ont été utilisées pour la classification des AUs en expressions, à savoir une approche par dictionnaire de règles et une approche par les chaînes de Markov (HMMs). Les deux approches ne considèrent que les 6 émotions basiques (colère, joie, tristesse, dégoût, peur, et surprise) mais permettent d'ajouter facilement d'autres émotions à la liste, comme l' énervement, le stress ou la joie simulée, qui est différente de l'authentique.

a) Approche de type dictionnaire de règles

Dans un premier temps, une classification par un dictionnaire de règles simples, élaborées à partir du système FACSAID [09] et de la base de données FEEDTUM [71], a été réalisée. Ces règles se basent en partie sur la logique floue et permettent une conversion rapide des données en résultats. La bouche étant la partie la plus expressive [02], sa pondération dans les règles est de manière générale plus importante que les sourcils.

Les règles suivantes ont été élaborées :

Colère : 0.7 x AU4 (Brow Lowerer)

+ 0.3 x AU15 (Lip Corner Depressor)

Joie : 0.8 x AU12 (Lip Corner Puller)

+ 0.1 x AU1 (Inner Brow Raiser)

+ 0.1 x AU2 (Outer Brow Raiser)

Tristesse : 0.6 x AU15 (Lip Corner Depressor)

+ 0.4 x AU4 (Brow Lowerer)

Dégoût : 0.4 x AU12 (Lip Corner Puller)

+ 0.4 x AU15 (Lip Corner Depressor)

+ 0.2 x AU4 (Brow Lowerer)

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 24/49

Page 25: Analyse dynamique d'expressions faciales dans une vidéo

Surprise : 0.5 x AU1 (Inner Brow Raiser)

+ 0.5 x AU2 (Outer Brow Raiser)

Peur : 0.8 x AU1 (Inner Brow Raiser)

+ 0.2 x AU15 (Lip Corner Depressor)

( Photos de la base de données FEEDTUM [71] )

L'approche par dictionnaire de règles a pour avantage d'être rapide, économe en mémoire et temps de calcul, et simple à tester et à adapter. Cependant, elle est peu précise : par exemple, les coefficients des émotions de dégoût, de tristesse et de colère sont relativement similaires, et donc ne permettent pas de discriminer précisément ces émotions. L'ajout de nouvelles émotions plus subtiles à ce dictionnaire peut également se révéler difficile, car il faudrait adapter l'ensemble des coefficients pour permettre de distinguer correctement la nouvelle émotion de celles déjà présentes dans le dictionnaire. Enfin, le dictionnaire de règles suppose la simultanéité des AUs pour reconnaître une expression. Or certaines expressions faciales ont un timing plus complexe, et relativement différent entre personnes. Par exemple, l'émotion de la colère (0.7 x Brow Lowerer + 0.3 x Lip Corner Depressor) peut figurer aussi bien la baisse des sourcils puis la baisse des coins de la bouche, en passant par une expression neutre, que leurs apparitions simultanées sur le visage.

Afin d'exploiter au mieux l'aspect dynamique des expressions faciales, une seconde approche de classification plus complexe a été élaborée, utilisant une classification spatio-temporelle des chaînes de Markov. Cette dernière approche n'a toutefois pas été implémentée et testée par manque de temps.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 25/49

Page 26: Analyse dynamique d'expressions faciales dans une vidéo

b) Classification par les chaines de Markov

Un modèle de Markov caché (HMM, Hidden Markov Model) [64] est un modèle statistique dans lequel un processus est observé avec des états cachés. Un HMM peut être considéré comme un réseau bayésien dynamique simplifié. Ces modèles sont fréquemment utilisés dans la reconnaissance vocale, d'écriture ou de geste, mais également dans les algorithmes de vision par ordinateur. L'avantage principal des HMMs réside dans leur possibilité de modélisation d'événements ou de signaux non-stationnaires. Des méthodes de programmation dynamique permettent généralement d'aligner deux signaux pour prendre en compte la non-stationnarité, mais ces approches requièrent beaucoup de temps de calcul pour trouver la meilleure concordance entre les séquences. À l'opposé, les HMMs utilisent les probabilités de transition entre des états cachés et apprennent les probabilités conditionnelles, l'état du modèle étant connu.

Dans le cas de la reconnaissance d'émotion, le signal est la mesure des mouvements du visage, c'est-à-dire les AUs. Ces signaux sont non-stationnaires par nature, car une expression peut être représentée avec différents timings, des intensités variables, même sur une même personne. Un HMM est constitué de l'ensemble de paramètres (A, B, π), où A est la matrice des probabilités de transition entre états, B la distribution des probabilités d'observation, et π la distribution initiale des états. Dans ce cas, nous avons :

Avec N le nombre d'états du modèle. Les observations (Ot) peuvent être discrètes ou continues. Il existe alors deux problèmes à résoudre en relation avec les HMMs : comment calculer la séquence d'états correspondant le mieux à une série d'observations et un modèle (reconnaissance), et comment apprendre les paramètres du modèle étant donné une série d'observations (apprentissage). Dans notre cas, puisqu'une expression faciale dans une vidéo est composée de plusieurs actions faciales, on modélise chaque expression en utilisant un HMM différent. On réalise alors plusieurs HMMs, pour la joie, la colère, la peur, le dégoût, la tristesse et la surprise, et d'autres expressions plus complexes ( fig 15).

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 26/49

B=b jOt=P Ot tqqt=S j , 1≤ j≤N

ai , j=P qt1=S j tq qt=Si , 1≤i , j≤N

j=P q1=S j

Fig. 15 : Classifieur pour les HMMs spécifiques aux émotions

Mesure des AUs

Vidéo

HMM (M1)pour « Joie »

Ot HMM (M2)

pour « Colère »

HMM (M3)pour « Surprise »

...

P(O| M1)

P(O| M2)

P(O| M3)

Max Émotion probable

Page 27: Analyse dynamique d'expressions faciales dans une vidéo

Deux structures de HMMs peuvent convenir dans le cas de la reconnaissance d'émotions : la structure gauche-à-droite (left to right) dans laquelle les séquences d'états commencent toujours par un même état initial et finissent toujours dans un même état final (fig. 16) et la structure ergodique dans laquelle tout les états peuvent être au départ ou à l'arrivée (fig 17).

L'avantage de la structure gauche-à-droite est qu'il est plus intuitif de modéliser une séquence d'évènements avec des états initiaux et finaux fixes. Par exemple, une expression faciale pourrait être considérée comme composée de plusieurs actions diverses débutant et finissant toujours par un état neutre. Ainsi, le nombre de paramètres requis est réduit et donc le modèle est plus facile à entrainer. Cependant, cela réduit également le nombre de degrés de liberté que le modèle peut utiliser pour s'accorder avec la séquence d'observation, ce qui est possible avec un modèle ergodique. À ce jour, il n'y a pas encore eu d'étude pour déterminer si une expression faciale peut être correctement modélisée par une structure gauche-à-droite [74].

Les modèles HMMs sont déterminés en utilisant l'algorithme d'estimation de paramètres de Baum-Welch [75] exploitant lui-même l'algorithme forward-backward [76]. L'apprentissage doit être réalisé en utilisant des séquences annotées de chacune des expressions comme vérité de terrain. L'apprentissage des paramètres effectué, on réalise la classification d'une séquence d'observation en calculant sa probabilité au regard de chacun des modèles des émotions considérées. Enfin, cette séquence est classée comme émotion correspondant au modèle qui a engendré la plus forte probabilité, comme montré dans la figure 15.

Par manque de temps, la modélisation de la classification par HMMs n'a pas bénéficié d'une validation expérimentale, et seule la classification par dictionnaire de règles a été effectivement implémentée et testée.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 27/49

Fig. 16 : Structure gauche-à-droite

Fig. 17 : Structure ergodique

1 2

3 4

Page 28: Analyse dynamique d'expressions faciales dans une vidéo

IV. Implémentation et tests1. Détail de l'implémentationL'implémentation des algorithmes décrits dans la partie « Approche développée » a été

réalisée en C++, à l'aide de la librairie graphique OpenCV, version 2.1. En effet, une grande partie des fonctions requises est déjà implémentée, ce qui a permis un avancement rapide dans le codage. Le programme se base en outre sur l'architecture créée par Taner Danışman et Marius Bilaşco, les encadrants de ce stage, dans le cadre de leur recherche sur la reconnaissance statique d'émotions. Cet algorithme exploitait de manière statique les longueurs entre les sourcils et les yeux, ainsi qu'entre les coins de la bouche, pour reconnaître la joie et la surprise.

Des travaux menés au début du stage ont permis l'ajout de la reconnaissance statique de la colère, ainsi que le calcul des angles du lacet et du roulis de la tête pour une correction des mesures. Les fonctions déjà implémentées et réutilisées ici incluent la gestion de la webcam, la détection du visage ainsi que de certains points caractéristiques (yeux, coins de la bouche), et la correction de l'image par le calcul de l'angle du tangage de la tête.

Les fonctions ajoutées à ce programme comptent notamment :- Détection des tempes et du cadre de la bouche,- Évaluation des angles du lacet et du roulis pour la pose de la tête,- Détection temporelle des Action Units,- Extraction des caractéristiques et identification des AUs,- Classification des AUs en expressions faciales.

Cet algorithme de reconnaissance statique servira de référence pour les tests et comparaisons du programme dans la partie IV.4. La figure 27 rappelle les différentes étapes de l'algorithme.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 28/49

Figure 27 : Schéma des différentes étapes de l'algorithme

Vidéo Détection spatiale

Détection temporelle

Extraction des caractéristiques

ClassificationExpression

Algorithme de Viola-Jones

Estimation, correction de la pose de la tête

Détection de keyframes

Segmentationdes AUs

Algorithme d'optical flow

Dictionnaire de règles

Page 29: Analyse dynamique d'expressions faciales dans une vidéo

2. Fonctions de détectiona) Détection spatiale des caractéristiques

Le code des fonctions de détection utilisées est disponible en annexe B1 et B2. Les algorithmes de Viola-Jones sont utilisés pour le visage, les yeux, et la bouche. Les résultats sont satisfaisants (fig. 18) : les yeux et la bouche sont systématiquement détectés à une distance moyenne de l'écran, pour des poses de la tête faiblement inclinées. Les sourcils peuvent être détectés de la même manière, cependant il s'est révélé plus précis de considérer uniquement la zone supérieure des yeux.

Les paramètres des fonctions OpenCV utilisées ont été déterminés manuellement, mais une évaluation plus systématique sur une base de test pourrait donner de meilleurs résultats. Les bords de la tête on été retrouvés par un seuillage simple, en faisant l'hypothèse que l'arrière plan et la tête sont facilement différenciables. Une tentative de détection de la zone du front, zone relativement uniforme, a donné des résultats peu exploitables. Enfin, les angles de la tête ont pu être retrouvés à partir de ces caractéristiques et l'image a pu être recalculée en fonction de l'angle de tangage. Le code de cette évaluation est disponible en annexe B3.

Un problème rencontré est que la détection n'est pas toujours stable. En particulier, l'algorithme de détection des yeux ne distingue pas toujours les yeux des paupières, donnant un cadre de résultats variant régulièrement verticalement de quelques pixels. Le calcul de la détection temporelle exigeant une détection suffisamment stable, les variations de position des résultats ont été moyennés, permettant un résultat plus précis mais moins réactif aux changements de pose ou de position de la tête.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 29/49

Fig. 18 : Détections spatiales

Page 30: Analyse dynamique d'expressions faciales dans une vidéo

b) Estimation de la pose

L'algorithme pour le calcul de la pose de la tête a été codé selon les formules de la partie III.3. Les paramétrages et tests n'ont pas été réalisés sur une base de test de visages normalisée, et donc les mesures des angles, bien que cohérentes, n'étaient que relativement précises. L'angle du tangage est le mieux calculé, car les positions des yeux, facilement retrouvées, donnent directement sa mesure. À l'opposé, le calcul du lacet présentait le plus d'incohérences, car la détection des tempes, basée sur un seuillage par histogramme, échouait fréquemment en cas d'occlusion sur le visage ou d'éclairage asymétrique. La figure 19 montre le calcul de la pose dans une situation favorable ( front dégagé, éclairage peu variable).

c) Détection temporelle

Pour la détection temporelle, dont le code est donné en annexe B4, la notion de différence entre images successives telle qu'elle a été modélisée a été implémentée par l'usage de la fonction cvNorm, qui réalise un calcul de la différence entre images. Les sous-images successives ont été remise à la même taille pour la comparaison ( fonction cvResize ). Un outil basique de visualisation a permis d'évaluer la détection temporelle et de déterminer les seuils nécessaires à la détection des AUs. La figure 20 montre le calcul des différences d'images de la bouche et leur classification.

Diff

Moyenne Mesure

t KF FM FS

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 30/49

Fig. 20 : Visualisation de la détection temporelle.

Fig. 19 : Estimation de la pose de la tête

Page 31: Analyse dynamique d'expressions faciales dans une vidéo

La ligne du bas indique la classification du programme. La moyenne calculée correspondait à celle des 50 dernières valeurs, sans pondération sur les plus récentes. Les seuils utilisés étaient de 1.20 x la moyenne pour la détection des frames Move et de 2 x la moyenne pour les keyframes. On constate qu'à deux reprises, la différence est largement supérieure à la moyenne, ce qui correspondait dans le test à une ouverture puis fermeture de la bouche. La détection temporelle donne ainsi des résultats satisfaisants.

La figure 21 montre la détection temporelle pour un sourcil. Les gestes effectués ici étaient un levé puis un baissé de sourcils.

Les résultats sont ici moins bons, ce qui est directement lié à la qualité du détecteur. Ces résultats sont toutefois toujours exploitables dans l'application. La figure 22 montre enfin le résultat pour une partie du front.

Ici, les résultats sont peu exploitables : la zone du front n'est pas correctement suivie due à son uniformité et la détection échoue à donner un résultat stable. La détection temporelle est donc efficace sur les zones facilement détectables et pour des résultats de détection stables.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 31/49

Fig. 22 : Détection temporelle pour le front.

Fig. 21 : Détection temporelle des sourcils

Levé Baissé

Page 32: Analyse dynamique d'expressions faciales dans une vidéo

3. Fonctions d'extraction et de classificationa) Extraction des caractéristiques

L'extraction des caractéristiques pour l'identification des AUs a été réalisée à l'aide de fonctions OpenCV. En particulier, la sélection des points de référence a été obtenue par la fonction cvGoodFeaturesToTrack, qui exploite l'algorithme de Canny ainsi qu'un seuillage par hystérésis pour repérer des points d'intérêt sur les sous-images. Le flux optique sur ces points a été calculé par la fonction cvCalcOpticalFlowPyrLK, qui utilise l'algorithme de Lucas-Kanade. Le résultat est montré sur la figure 23, montrant le calcul du flux optique pour trois points de deux sous-images consécutives de sourcil.

fig. 23 : Exemple de calcul de flux optique sur un sourcil pour 3 points.

Ces vecteurs de flux optique permettent d'identifier l'AU repérée précédemment par la détection temporelle. Concrètement, on calcule la direction moyenne des vecteurs, ainsi que la norme des vecteurs projetés sur cette direction. Le vecteur moyen résultant est enfin normalisé en taille : Faible, Modéré, Fort, et en direction : Haut, Bas, Gauche, Droite. Ici, le mouvement moyen sur la figure 16 est un levé du sourcil par l'extérieur, ce qui correspond à l'AU 2 : Outer Brow Raiser.

Plusieurs AUs ont pu être identifiées par ce moyen. Les sourcils et la bouche ont été divisés en deux parties, gauche et droite, pour permettre de distinguer des AUs comme l'AU2 : Outer Brow Raiser de l'AU1 : Inner Brow Raiser. Au final, les 5 AUs reconnues sont : AU1, Levé sourcils intérieurs, AU2, Levé sourcils extérieurs, AU4, Baisse des sourcils, AU12, Étirement des coins des lèvres, et AU 15, Baisse des coins des lèvres. Les actions ainsi détectées permettent d'établir un timing des AUs, ce qui permet une classification en expression.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 32/49

t

t+1

AU2

Page 33: Analyse dynamique d'expressions faciales dans une vidéo

b) Classification en émotions

Une classification par un dictionnaire de règles a été implémentée suivant les paramètres définis dans la partie III.6. Les AUs qui composent une expression faciale devaient être comprises dans une fenêtre temporelle de 3 à 10 secondes. Ainsi, l'expression de la « joie » est détectée si une AU12 (Lip Corner Puller) sur la bouche est détectée, et qu'une AU1 (Inner Brow Raiser) ou une AU2 (Outer Brow Raiser) est présente, même de manière faible, sur au moins un des sourcils dans un délai de plus ou moins 5 secondes.

Dans le cas de la joie, l'AU12 (Lip Corner Puller) ayant une très forte pondération sur cette émotion - la joie est visible surtout par le sourire -, même la détection d'un mouvement faible ou lent sur les sourcils permet de conclure à l'émotion de la joie. Dans le cas d'émotions plus contrastées, comme la tristesse : AU15 (Lip Corner Depressor) et AU4 (Brow Lowerer) ou la surprise : AU1 (Inner Brow Raiser) et AU2 (Outer Brow Raiser) dans lesquelles les AUs ont une pondération égale, les AUs détectées doivent avoir une intensité similaire.

Les tests de l'approche par dictionnaire de règles ont confirmé les résultats prévus dans la partie III.6 a). Bien que rapide, économe en mémoire et temps de calcul, elle s'est avérée peu précise : les émotions dont les coefficients sont similaires ne sont pas correctement discriminées. D'un point de vue temporel, la classification échoue encore pour des expressions trop lentes, trop rapides, ou aux AUs trop asynchrones. Cependant, l'algorithme permet de reconnaître de manière fiable quelques émotions sur une même personne, moyennant un paramètrage manuel préalable du programme.

L'implémentation d'une classification par HMMs comme décrit dans la partie III.6 b) pourrait résoudre ces problèmes par une meilleure exploitation de la composante temporelle, cependant, par manque de temps, cette option n'a pas été implémentée et testée.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 33/49

Page 34: Analyse dynamique d'expressions faciales dans une vidéo

5. Tests et comparaisons de l'algorithmea) Base de données FEEDTUM

La base de données FEEDTUM [71] a été utilisée afin de tester l'algorithme de reconnaissance d'émotions. Cette base de données contient les vidéos d'une vingtaine de sujets exprimant les 6 émotions basiques définies par Ekman et Friesen, ainsi qu'une expression neutre. Un des principes de base respecté lors de sa création est que les émotions spontanées diffèrent des émotions jouées. C'est pourquoi ses créateurs ont tenté de laisser les sujets exprimer leurs émotions aussi naturellement que possible. En conséquence, les sujets étaient soumis à des vidéos ou images susceptibles d'engendrer des émotions sans instructions préalables, au lieu de leur demander de jouer un rôle, comme le montre la figure 24. De la même manière, aucune instruction concernant les mouvements et orientations de la tête n'était posée.

L'environnement consistait simplement en une caméra placée sur un écran 19'. Un déclenchement synchronisé de la capture et de la vidéo a permis l'enregistrement précis du timing des émotions. Les résultats ont également été segmentés et organisés en séquences, comme montré dans la figure 25.

Fig. 25 : Séquence « Joie » du sujet 18 de la base de données

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 34/49

Fig. 24 : Sujet filmé et vidéo provoquant la "surprise"

Page 35: Analyse dynamique d'expressions faciales dans une vidéo

b) Résultats de l'algorithme et comparaisons

L'algorithme a été testé sur une sélection de 60 des 400 vidéos de FEEDTUM. La tolérance temporelle pour juger de la détection effective des émotions était de 2 secondes. Les tests ont également été réalisés sur l'algorithme de reconnaissance statique créé par Taner Danışman et Marius Bilaşco, les encadrants de ce stage, dans le cadre de leur recherche sur la reconnaissance statique d'émotions, et amélioré au cours de ce stage comme décrit dans la partie IV.1. Les vidéos de FEEDTUM n'apportant que le nom de l'émotion comme information annexe, l'évaluation de la synchronisation de la détection par annotation des vidéos a du être réalisée au préalable de manière manuelle.

Approche dynamique

Approche statique

ÉmotionsDétection

Temporelle(1)Identification

des AUs(2)Identification des

expressions(3)Identification des

expressions(3)

Joie 75 % 67 % 55% 77 %

Colère 52 % 50% 47 % 73 %

Tristesse 24 % 14 % 9 % NC(4)

Dégoût 26 % 13 % 10 % NC(4)

Surprise 78 % 70 % 63 % 85 %

Peur 46 % 25 % 18 % NC(4)

(1) Pourcentage du total des vidéos pour lesquelles les AUs ont été correctement détectées.(2) Pourcentage du total des vidéos dont les AUs ont été correctement reconnues.(3) Pourcentage du total des vidéos dont l'expression a été correctement identifiée.(4) Cet algorithme ne prenait pas en compte ces expressions.

Afin d'évaluer l'intérêt de la reconnaissance dynamique par rapport au statique, on détaille la proportion de tests qui ont réussit exclusivement dans l'approche dynamique ou dans l'approche statique, comme montré dans la figure 26.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 35/49

Fig 26 : Comparaison des résultats des approches statique et dynamique.

27 %5 % 58 %

Surprise

10 %

StatDyn

28 %6 % 49 %

Joie

17 %

StatDyn

41 %15 % 32 %

Colère

12 %

StatDyn

Page 36: Analyse dynamique d'expressions faciales dans une vidéo

c) Discussion

On constate notamment des résultats médiocres dans le cas des expressions de tristesse, dégoût, et peur, et relativement faibles par rapport à d'autres techniques de l'état de l'art dans les autres cas. L'algorithme de reconnaissance statique donne de meilleurs résultats sur la plus grande partie des vidéos de la base de test. Cependant, on remarque de bons résultats sur l'identification des AUs ainsi que pour la classification en expressions. De plus, on remarque que certaines expressions ne sont reconnues que par l'algorithme de reconnaissance dynamique. Les causes les plus communes d'échec de l'algorithme, ainsi qu'une comparaison des approches statiques et dynamique, sont détaillées dans la suite.

Détection temporelle :

> Les visages sont parfois trop peu expressifs et les changements ne sont pas détectés.

> Les mouvements sont parfois trop lents et l'algorithme ne détermine pas correctement les images-clés de la séquence.

> Certaines AUs sont parfois détectées en double et perturbent la classification.

Bien que ces problèmes liés à la détection temporelle puissent être résolus par un meilleur paramétrage et une meilleure classification, on constate de manière générale que l'algorithme de reconnaissance statique réussit mieux dans les cas où les expressions ont un timing lent, tandis que l'approche dynamique réussit mieux dans le cas d'un timing rapide ou atypique.

Détection spatiale, extraction et identification des AUs :

> Les variations de pose de la tête, notamment de tangage (AU55, Head Tilt Left et AU56, Head Tilt Right) ou de position de la tête, sont parfois trop importantes et font échouer la détection spatiale des zones d'intérêt.

> L'ouverture de la bouche (AU26, Jaw Drop) fait généralement échouer la reconnaissance des AUs sur la bouche, en raison du mauvais placement des points de suivi, notamment dans le cas de la joie, où de larges sourires sont mal reconnus.

> Les mouvements des sourcils sont parfois mal détectés, par exemple lors de cas de sujets blonds, ou de femmes aux sourcils épilés.

> La détection des yeux échoue parfois dans le cas de plissements ou fermetures lors de la séquence, ce qui fait échouer les identifications par la suite.

Ces problèmes sont liés à la détection spatiale et à la nature spontanée des émotions. Un meilleur suivi des zones d'intérêt, ainsi qu'une meilleure paramétrisation des fonctions de détection permettraient de résoudre ces problèmes. Cependant, on constate que l'algorithme est relativement résistant aux occlusions, notamment dans le cas où un œil est couvert.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 36/49

"Colère" peu expressive

Ouverture de la bouche, Yeux fermés, sourcils épilés

Inclinaison de la tête et occlusion de la bouche.

Page 37: Analyse dynamique d'expressions faciales dans une vidéo

Classification :

> Les expressions sont parfois trop longues, et le début et la fin des AUs ne sont pas correctement reliés par la classification.

> Les sujets ont parfois des expressions spontanées non prévues par la classification, comme la combinaison de surprise et joie, ou la colère au lieu de la peur ou le dégoût, émotions par ailleurs mal reconnues par l'algorithme.

Ces problèmes sont principalement dus à la nature variable et spontanée des émotions. Les émotions sont toujours différentes en timings et intensités d'une personne à l'autre, ce qui rend la généralisation de règles de classification hasardeuse. Des comportements rares, aléatoires et imprévisibles sont toujours problématiques dans le cadre de la reconnaissance d'émotions.

De manière générale, on remarque que la reconnaissance dynamique rencontre des problèmes spécifiques que n'a pas la reconnaissance statique. La détection temporelle, l'interprétation du timing des émotions, l'extraction et la reconnaissance des mouvements, la classification en expressions sont des défis à relever pour profiter d'une reconnaissance dynamique. Cependant, la figure 26 montre que dans certaines émotions, l'approche dynamique réussit à identifier correctement des cas pour lesquels l'algorithme statique échoue (6% des cas pour la joie, 15% pour la colère, 5% pour la surprise). En particulier, cette reconnaissance dynamique montre son intérêt dans le cas d'expressions au timing asynchrone, par exemple dans le cas d'un mouvement séparé dans le temps des sourcils et de la bouche, ou dans le cas de mouvements rapides, peu interprétables dans le cadre d'une reconnaissance statique.

Cette étude montre donc que les reconnaissances statiques et dynamiques peuvent être combinées pour donner de meilleurs résultats. En effet, certaines émotions plus complexes, comme la nervosité, font à la fois appel à des expressions lentes et régulières, telles que le pincement des lèvres, qu'à des expressions rapides et abruptes, comme des froncements de sourcils. Ce type d'émotions bénéficierait largement d'une approche combinée pour être reconnu.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 37/49

Sourire de dépit dans une "colère"

Page 38: Analyse dynamique d'expressions faciales dans une vidéo

V. Conclusion et perspectivesa) Conclusion

Le sujet du stage était de concevoir un algorithme exploitant les informations dynamiques apportées par une vidéo pour reconnaître les expressions faciales d'un utilisateur. Cet objectif est atteint. L'approche développée durant ce stage utilise la composante dynamique de la vidéo pour extraire et identifier des actions faciales sur le visage et ainsi reconnaître quelques émotions basiques.

Les expressions sont repérées et segmentées dans les vidéos par un algorithme de détection d'images-clés au sein de la vidéo. Les principales zones du visages (yeux, bouche, sourcils) sont ensuite extraites par l'utilisation d'un algorithme de Viola-Jones et normalisées par les angles de la pose de la tête, angles calculés par des calculs géométriques sur les distances entre points caractéristiques du visage.

L'application d'un algorithme de flux optique permet alors d'extraire et d'identifier les unités d'actions faciales utilisées. L'implémentation permet ainsi la reconnaissance de 5 unités d'actions faciales distinctes (AUs), à savoir : AU1, Levé sourcils intérieurs, AU2, Levé sourcils extérieurs, AU4, Baisse des sourcils, AU12, Étirement des coins des lèvres, et AU 15, Baisse des coins des lèvres. Enfin, le programme réalise une classification des actions par un dictionnaire de règles en 6 émotions basiques : la joie, la peur, le dégoût, la surprise, la colère et la tristesse. Ces règles sont basée sur le sytème FACS.

L'expérimentation sur une base de données de vidéos d'expressions montre que bien que moins efficace que l'approche statique dans la plupart des cas, la reconnaissance d'émotions bénéficie de l'utilisation de la composante dynamique pour une meilleure détection de certaines expressions au timing asynchrone ou rapide.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 38/49

Page 39: Analyse dynamique d'expressions faciales dans une vidéo

b) Améliorations possibles et perspectives

Pour améliorer cette reconnaissance d'émotions, plusieurs solutions ont été proposées. À court terme, la stabilisation des procédures de détection spatiale, ainsi qu'une étude plus poussée du timing des émotions, par apprentissage ou manuellement, permettrait également d'améliorer la reconnaissance des expressions, en mettant mieux en rapport des AUs non synchronisées, lentes ou répétitives. L'implémentation de la classification par modèles de Markov cachés permettrait également d'améliorer la reconnaissance d'émotions.

À long terme, on pourrait par exemple coupler les résultats d'une approche de reconnaissance statique avec ceux d'une reconnaissance dynamique, en combinant les deux types de données avec une méthode de boosting, ce qui permettrait de mieux repérer les cas problématiques, et de bénéficier des deux types d'approches. De la même manière, il pourrait être intéressant d'ajouter des AUs à la détection, par exemple le suivi des clignements des yeux, les mouvements des épaules, l'apparition de lignes sur le front ou les joues, qui peuvent être révélateurs d'émotions plus complexes. Enfin, on pourrait ajouter à la reconnaissance au sein de la vidéo une analyse du fond sonore, ou encore l'analyse de paramètres physiologiques comme la fréquence cardiaque, comme vu dans certaines études de l'état de l'art.

Parmi les applications directes du programme, il a été suggéré un couplage avec un système de suivi du regard comme le « Tobii X120 Eye Tracker », dont un exemplaire est actuellement utilisé par l'équipe FOX-MIIRE pour d'autres projets. Ainsi, on pourrait analyser les expressions faciales de l'utilisateur en fonction de ce qu'il regarde sur son écran. D'autres évoquent la possibilité de la création d'un programme d'apprentissage à distance intégrant la reconnaissance d'émotions, ce qui permettrait d'évaluer l'intérêt de la détection pour des émotions complexes telles que la frustration, l'intérêt ou l'ennui. Enfin, le programme pourrait être testé sur un robot jouet doté d'une caméra, tel le chien-robot AIBO de Sony, pour tester les applications de la reconnaissance d'émotions dans un cadre ludique.

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 39/49

Page 40: Analyse dynamique d'expressions faciales dans une vidéo

Bibliographie[01] C. Darwin, The Expression of the Emotions in Man and Animals, J. Murray (1872).[02] P. Ekman, W.V. Friesen, Constants across cultures in the face and emotion, Personality Social Psychol (1971).[03] P. Dulguerov, F. Marchal, D. Wang, C. Gysin, P. Gidley, B. Gantz, J. Rubinstein, S. Seiff, L. Poon, K. Lun, Y. Ng, Review of objective topographic facial nerve evaluation methods, Am. J. Otol. 20 (5) (1999).

[04] R. Koenen, Mpeg-4 Project Overview, International Organisation for Standardisation, ISO/IEC JTC1/SC29/WG11 (2000).[05] P. Ekman, W.V. Friesen, Facial Action Coding System : A Technique for the Measurement of Facial Movement, Consulting Psychologists Press, Palo Alto (1978).[06] W. Friesen, P. Ekman, Emotional facial action coding system, unpublished manual (1984).[07] C. Izard, The maximally descriminative facial movement coding system (MAX), Available from Instructional ressource Center, University of Delaware, Newark, Delaware (1979).[08] C. Izard, L. Dougherty, E. Hembree, A system for indentifying affect expressions by holistic judgments, unpublished manuscript (1983).[09] W. Friesen, P. Ekman, Dictionary, interpretation of FACS scoring, unpublished manuscript (1987).[10] I. Essa, A. Pentland, Coding, analysis, interpretation andrecognition offacial expressions, IEEE Trans. Pattern Anal.Mach. Intell. 19 (7) (1997).[11] H. Rowley, S. Baluja, T. Kanade, Neural network-based face detection, IEEE Trans. Pattern Anal. Mach. Intell. 20 (1) (1998).[12] W. Fellenz, J. Taylor, N. Tsapatsoulis, S. Kollias, Comparing template-based, feature-based and supervised classification offacial expressions from static images, Communications and Computers (CSCC’99),Nugata, Japan (1999).[13] P. Belhumeur, J. Hespanha, D. Kriegman, Eigenfaces vs.Fisherfaces: recognition using class specific linear projection, IEEE Trans. Pattern Anal. Mach. Intell. 19 (7) (1997).[14] B. Fasela, Juergen Luettin, Automatic facial expression analysis: a survey, Pattern Recognition 36 (2003).[15] P. Ekman, About brows: emotional and conversational signals, in : J. Ascho7, M. Con Carnach, K. Foppa, W. Lepenies, D.Plog (Eds.), Human Ethology, Cambridge University Press,Cambridge (1979).[16] Fadi Dornaikaa, Bogdan Raducanu, Inferring facial expressions from videos: Tool and application, Signal Processing: Image Communication 22 (2007).[17] M. Bartlett, Face image analysis by unsupervised learning and redundancy reduction, Ph.D. Thesis, University ofCalif ornia,San Diego (1998).[18] J. Lien, Automatic recognition of facial expression using hidden Markov models and estimation of expression intensity, Ph.D. Thesis, The Robotics Institute, CMU (1998).[19] K. Mase, A. Pentland, Recognition of facial expression from optical flow, IEICE Trans. E 74 (10) (1991).[20] T. Otsuka, J. Ohya, Spotting segments displaying facial expression from image sequences using HMM, IEEE Proceedings of the Second International Conference on Automatic Face and Gesture Recognition (FG’98), Nara,Japan (1998).[21] D. Terzopoulos, K. Waters, Analysis of facial images using physical and anatomical models, Proceeding of the Third International Conference on Computer Vision (1990).[22] I. Essa, A. Pentland, Coding, analysis, interpretation andrecognition off acial expressions, IEEE Trans. Pattern Anal.Mach. Intell. 19 (7) (1997).[23] Y. Yacoob, L.S. Davis, Recognizing human facial expression from long image sequences using optical flow, IEEE Trans.Pattern Anal. Mach. Intell. 18 (6) (1996).[24] M. Black, Y. Yacoob, Recognizing facial expressions in image sequences using local parameterized models of image motion, Internat. J. Comput. Vision 25 (1) (1997).[25] Y. Tian, T. Kanade, J.Cohn, Recognizing action units for facial expression analysis, IEEE Trans. Pattern Anal. Mach.Intell. 23 (2) (2001).[26] M. Wang, Y. Iwai, M. Yachida, Expression recognition from time-sequential facial images by use of expression change model, IEEE Proceedings of the Second International Conference on Automatic Face and Gesture Recognition (FG’98), Nara, Japan (1998).[27] T. Otsuka, J. Ohya, Extracting facial motion parameters by tracking feature points, Proceedings of First International Conference on Advanced Multimedia Content Processing,Osaka, Japan (1998).[28] B. Bascle, A. Blake, Separability of pose and expression in facial tracking and animation, Proceedings of the International Conference on Computer Vision, Bombay, India (1998).[29] M. Suwa, N. Sugie, K. Fujimora, A preliminary note on pattern recognition of human emotional expression, Proceedings of the Fourth International Joint Conference on Pattern Recognition, Kyoto, Japan (1978).

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 40/49

Page 41: Analyse dynamique d'expressions faciales dans une vidéo

[30] S. Kaiser, T. Wehrle, Automated coding of facial behavior in human–computer interactions with FACS, J. Nonverbal Behavior 16 (2) (1992).[31] W. Fellenz, J. Taylor, N. Tsapatsoulis, S. Kollias, Comparing template-based, feature-based and supervised classification of facial expressions from static images, Proceedings of Circuits,Systems, Communications and Computers (CSCC’99) (1999).[32] G. Donato, S. Bartlett C. Hager, P. Ekman, J. Sejnowski, Classifying facial actions, IEEE Trans. Pattern Anal. Mach.Intell. 21 (10) (1999).[33] B. Fasel, J. Luettin, Recognition of asymmetric facial action unit activities and intensities, Proceedings of the International Conference on Pattern Recognition (ICPR 2000), Barcelona,Spain, 2000 (2000).[34] B. Schiele, J. Crowley, Probabilistic object recognition using multidimensional receptive field histograms, Proceedings ofthe International Conference on Pattern Recognition (ICPR1996), Vienna, Austria (1996).[35] J. Cohn, A. Zlochower, J. Lien, Y. Wu, T. Kanade, Automated face coding: a computer-vision based method of facial expression analysis, Seventh European Conference on FacialExpression Measurement and Meaning, Salzburg, Austria (1997).[36] M. Rosenblum, Y. Yacoob, L. Davis, Human expression recognition from motion using a radial basis function network architecture, IEEE Trans. Neural Networks 7 (5) (1996).[37] H. Kobayashi, F. Hara, Dynamic recognition of basic facial expressions by discrete-time recurrent neural network, Proceedings of the International Joint Conference on Neural Networks (1993).[38] C. Lisetti, D. Rumelhart, Facial expression recognition using a neural network, Proceedings of the 11th International Flairs Conference, AAAI Press, New York (1998).[39] Z. Zhang, M. Lyons, M. Schuster, S. Akamatsu, Comparison between geometry-based and Gabor-wavelets-based facial expression recognition using multi-layer perceptron, IEEE Proceedings of the Second International Conference on Automatic Face and Gesture Recognition (FG’98), Nara,Japan (1998).[40] M. Dailey, G. Cottrell, PCA Gabor for expression recognition, Institution UCSD, Number CS-629 (1999).[41] P. Eisert, B. Girod, Facial expression analysis for model-based coding ofvideo sequences, Picture Coding Symposium,Berlin, Germany (1997).[42] K. Karpouzis, G. Votsis, G. Moschovitis, S. Kollias, Emotion recognition using feature extraction and 3-D models, Proceedings of IMACS International Multiconference on Circuits and Systems Communications and Computers (CSCC’99), Athens, Greece (1999).[43] M. Lyons, J. Budynek, S. Akamatsu, IEEE Trans. Pattern Anal. Mach.Intell. 21 (12), Automatic classi0cationofsingle facial images (1999).[44] M. Pantic, L. Rothkrantz, Expert system for automatic analysis of facial expression, Image Vision Comput. J. 18 (11) (2000).[45] E. Leon, G. Clarke, V. Callaghan, F. Doctor, Affect-aware behaviour modelling and control inside an intelligent environment, Pervasive and Mobile Computing (2010).[46] K. Kurihara, D. Sugiyama, S. Matsumoto, N. Nishiuchi, K. Masuda, Facial emotion and gesture reproduction method for substitute robot of remote person, Computers & Industrial Engineering 56 (2009).[47] A.Sarrafzadeh, S. Alexander, F. Dadgostar, C. Fan, A. Bigdeli, ‘‘How do you know that I don’t understand ?’’ A look at the future of intelligent tutoring systems, Computers in Human Behavior 24(2008).[48] J. Martinez-Miranda, A. Aldea, Emotions in human and artificial intelligence, Computers in Human Behavior 21 (2005).[49] J. Bassili, Emotion recognition: The role of facial movement and the relative importance of upper and lower areas of the face, J. Personality Social Psychol.37 (1979).[50] R. W. Picard, J. Klein, Computer that recognise and respond to user emotion theoretical and practical , Interacting with Computers 14 (2002).[51] Y. Zhang, Q. Ji, Active and Dynamic Information Fusion for Facial Expression Understanding from Image Sequences, IEEE Transactions on pattern analysis and machine intelligence, Vol. 27 (2005).[52] N. Sebe, M.S. Lew, Y. Sun, I. Cohen, T. Gevers, T.S. Huang, Authentic facial expression analysis, Image and Vision Computing 25 (2007).[53] G. Zhao, M. Pietikäinen, Boosted multi-resolution spatiotemporal descriptors for facial expression recognition, Pattern Recognition Letters 30 (2009).[54] H. Gu, Y. Zhang, Q. Ji, Task oriented facial behavior recognition with selective sensing, Computer Vision and Image Understanding 100 (2005).[55] I. Cohen, A. Garg, T.S. Huang, Emotion Recognition from Facial Expressions using Multilevel HMM, (2000).[56] S. V. Ioannou, A. T. Raouzaiou, V. A. Tzouvaras,T. P. Mailis, K. C. Karpouzis, S. D. Kollias, Emotion recognition through facial expression analysis based on a neurofuzzy network, Neural Networks 18 (2005).[57] C.Huang, Y. Huang, Facial Expression Recognition Using Model-Based Feature Extraction and Action

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 41/49

Page 42: Analyse dynamique d'expressions faciales dans une vidéo

Parameters Classification, Journal of visual communication and image representation Vol. 8 (1997).[58] A. Besinger, T. Sztynda, S. Lal, C. Duthoit, J. Agbinya, B. Jap, D. Eager, G. Dissanayake, Optical flow based analyses to detect emotion from human facial image data, Expert Systems with Applications (2010).[59] CH Hjortsjö Människans ansikte och mimiska språke (1969). [60] S. Bashyal, G. K. Venayagamoorthy, Recognition of facial expressions using Gabor wavelets and learning vector quantization, Engineering Applications of Artificial Intelligence 21 (2008).[61] P. Viola, M. Jones, Robust Real-time Object Detection, IJCV, (2001).[62] B. D. Lucas and T. Kanade, An iterative image registration technique with an application to stereo vision. Proceedings of Imaging Understanding Workshop (1981) .[63] J. Canny, A Computational Approach To Edge Detection, IEEE Trans. Pattern Analysis and Machine Intelligence (1986) [64] D. Ria, Lovell BC, Comparing and evaluating HMM ensemble training algorithms using train and test and condition number criteria. Journal of Pattern Analysis and Applications (2000).[65] Y. Freund et R. E.Schapir, A decision-theoretic generalization of on-line learning and an application to boosting , Journal of Computer and System Sciences, no. 55. (1997).[66] P. Ekman, Methods for measuring facial actions, in: K.Scherer, Handbook of Methods in Nonverbal Behaviour Research, Cambridge University Press, Cambridge (1982).[67] D. Matsumoto, Ethnic dfferences in affect intensity, emotion judgments, display rules, and self-reported emotional expression, Motivation Emotion 17 (1993).[68] D. Matsumoto, Cultural similarities and di7erences in display rules, Motivation Emotion 14 (3) (1990).[69] M. Pantic, L. Rothkrantz, Expert system for automatic analysis of facial expression, Image Vision Comput. J. 18 (11) (2000).[70] P. Dulguerov, F. Marchal, D. Wang, C. Gysin, P. Gidley, B.Gantz, J. Rubinstein, S. Sei7, L. Poon, K. Lun, Y. Ng, Review of objective topographic facial nerve evaluation methods, Am.J. Otol. 20 (5) (1999).[71] F. Wallhoff Facial Expressions and Emotion Database http://www.mmk.ei.tum.de/~waf/fgnet/feedtum.html, Technische Universität München (2006). [72] Cohn, Kanade AU Coded Facial Expression Database, see Lucey, P., Cohn, J. F., Kanade, T., Saragih, J., Ambadar, Z., & Matthews. The Extended Cohn-Kande Dataset (CK+) : A complete facial expression dataset for action unit and emotion-specified expression. (2010) [73] OpenCV, http://opencv.willowgarage.com/wiki/ [74] I. Cohen, A. Garg, T. S. Huang Emotion Recognition from Facial Expressions using Multilevel HMM (2000)[75] L. E. Baum, T. Petrie, G. Soules, N. Weiss A maximization technique occurring in the statistical analysis of probabilistic functions of Markov chains, (1970)[76] L. R. Rabiner, A Tutorial on Hidden Markov Models and Selected Applications in Speech Recognition (1989) [77] M. Castrillon-Santana, O. Deniz-Suarez, L. Anton-Canalıs and J. Lorenzo-Navarro, Face and facial features evaluation, Performance Evaluation of Public Domain Haar Detectors for Face and Facial Feature Detection. [78] Image d'après http://www.icg.tu-graz.ac.at/opportunities/head_pose_estimation

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 42/49

Page 43: Analyse dynamique d'expressions faciales dans une vidéo

AnnexesA. Liste des Unités d'Action

Actions principales

N° Nom FACS0 Neutral Face1 Inner Brow Raiser 24 Lip Pressor2 Outer Brow Raiser 25 Lips Part4 Brow Lowerer 26 Jaw Drop5 Upper Lid Raiser 27 Mouth Stretch6 Cheek Raiser 28 Lip Suck7 Lid Tightener 29 Jaw Thrust8 Lips Toward Each Other 30 Jaw Sideways9 Nose Wrinkler 31 Jaw Clencher10 Upper Lip Raiser 32 [Lip] Bite11 Nasolabial Deepener 33 [Cheek] Blow12 Lip Corner Puller 34 [Cheek] Puff13 Sharp Lip Puller 35 [Cheek] Suck14 Dimpler 36 [Tongue] Bulge15 Lip Corner Depressor 37 Lip Wipe16 Lower Lip Depressor 38 Nostril Dilator17 Chin Raiser 39 Nostril Compressor18 Lip Pucker 41 Glabella Lowerer19 Tongue Show 42 Inner Eyebrow Lowerer20 Lip Stretcher 43 Eyes Closed21 Neck Tightener 44 Eyebrow Gatherer22 Lip Funneler 45 Blink23 Lip Tightener 46 Wink

Codes des mouvements de la têteN° Nom FACS

51 Head Turn Left M56 Head Tilt Right52 Head Turn Right 57 Head Forward53 Head Up M57 Head Thrust Forward54 Head Down 58 Head Back55 Head Tilt Left M59 Head Shake Up and DownM55 Head Tilt Left M60 Head Shake Side to Side56 Head Tilt Right M83 Head Upward and to the Side

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 43/49

Page 44: Analyse dynamique d'expressions faciales dans une vidéo

Codes des mouvements des yeux

N° Nom FACS61 Eyes Turn LeftM61 Eyes Left62 Eyes Turn RightM62 Eyes Right63 Eyes Up64 Eyes Down65 Walleye66 Cross-eyeM68 Upward Rolling of Eyes69 Eyes Positioned to Look at Other PersonM69 Head and/or Eyes Look at Other Person

Codes de visibilité

N° Nom FACS70 Brows and forehead not visible71 Eyes not visible72 Lower face not visible73 Entire face not visible74 Unscorable

Codes des actions grossières

N° Nom FACS40 Sniff50 Speech80 Swallow81 Chewing82 Shoulder shrug84 Head shake back and forth85 Head nod up and down91 Flash92 Partial flash97 Shiver/Tremble98 Fast up-down look

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 44/49

Page 45: Analyse dynamique d'expressions faciales dans une vidéo

B. Code des fonctions( Les codes sont en C++, utilisant principalement la librairie OpenCV version 2.1 )

B. 1) Détection du visagestatic CvMemStorage* storage;

static CvHaarClassifierCascade *cascadeFace;const char* cascade_face_name ="C:\\OpenCV2.2\\data\\haarcascades\\haarcascade_frontalface_alt.xml";storage = cvCreateMemStorage(0);

cascadeFace = (CvHaarClassifierCascade*)cvLoad( cascade_face_name, 0, 0, 0 );

bool faceDetection ( IplImage* img,CvRect* face )

{IplImage* temp = cvCreateImage( cvSize(img->width,img->height), 8, 3 );cvClearMemStorage( storage ); if( cascadeFace ) // Cascade successfully loaded

{ CvSeq* faces = cvHaarDetectObjects( img, cascadeFace, storage,1.1, 2,

CV_HAAR_FIND_BIGGEST_OBJECT, cvSize((int)(img->width/12) , (int)(img->width/10) ) ); for( int i = 0; i < (faces ? faces->total : 0); i++ )

{ CvRect* r = (CvRect*)cvGetSeqElem( faces, i ); face->x = r->x; face->y = r->y; face->width =r->width; face->height=r->height;

} }

else printf("\n...Cascade Face not loaded, no face detection available...\n");cvReleaseImage( &temp );return true;

}

B. 2) Détection de la bouche

static CvMemStorage* storage;

static CvHaarClassifierCascade *cascadeMouth;const char* cascade_mouth_name="C:\\OpenCV2.2\\data\\haarcascades\\Mouth.xml";storage = cvCreateMemStorage(0);cascadeMouth= (CvHaarClassifierCascade*)cvLoad( cascade_mouth_name, 0, 0, 0 );

bool mouthDetection( IplImage* img,CvRect* face,CvRect* mouth){

IplImage* temp = cvCreateImage( cvSize(img->width,img->height), 8, 3 ); cvClearMemStorage( storage );

cvSetImageROI(img,cvRect(face->x,face->y+face->height/2,face->width,face->height/2)); if( cascadeMouth ) // Cascade successfully loaded {

CvSeq* mouths = cvHaarDetectObjects( img, cascadeMouth, storage,2.9, 2, CV_HAAR_DO_CANNY_PRUNING, cvSize(25, 15));

for( int i = 0; i < (mouths ? mouths->total : 0); i++ ) { CvRect* r = (CvRect*)cvGetSeqElem( mouths, i );

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 45/49

Page 46: Analyse dynamique d'expressions faciales dans une vidéo

mouth->x = r->x+face->x;mouth->y = r->y+face->y+face->height/2;mouth->width =r->width;

mouth->height=r->height; } }

else printf("\n...Cascade Mouth not loaded, no mouth detection available...\n");cvResetImageROI(img);

cvReleaseImage( &temp );return true;

}

B. 3) Calcul de la pose de la tête

// Angle : (PITCH)float distEyesNose = (double)sqrt((double)((Nose.x-foreheadCenter.x) * (Nose.x-foreheadCenter.x)+(Nose.y-foreheadCenter.y)*(Nose.y-foreheadCenter.y)))/eyeDist;pitch=(72*distEyesNose-44)*3.14/180;

// Angle : (ROLL)double midx=(eyeL.x+eyeR.x)/2;double midy=(eyeL.y+eyeR.y)/2;double mL1=(eyeL.y-eyeR.y)/(eyeL.x-eyeR.x);double mL2=(mL1==0)?0:-1/mL1;double n=midy-mL2*midx;double angle=atan2((double) (mL1==0)? (int)midx:(int)((facer.y-n)/mL2) -

(mL1==0)? (int)midx:(int)((facer.y+facer.height-n)/mL2), (double)facer.y-facer.y+facer.height);

if (angle>=0) angle-=180;else angle+=180;roll=angle*3.14/180;

// Angle : (YAW)float yawL=(eyeL.x-tempL.x);float yawR=(tempR.x-eyeR.x);if (yawL == 0 || yawR == 0 ) yaw=0;else if (yawL > yawR) yaw=(-45+(yawR/yawL)*45)*3.14/180;else if (yawR > yawL) yaw=( 45-(yawL/yawR)*45)*3.14/180;

B. 4) Détection temporelle et graphiques

int diffFrame(IplImage* img1 ,IplImage* img2, int area){

double diff;float mean=0;int meanWindowSize= 50;

if(img1==NULL || img2==NULL) diff=-1;else // Mise à l'échelle et calcul de la différence{

IplImage* imgTest=cvCreateImage(cvSize(img2->width,img2->height), img2->depth,img2->nChannels);

cvResize(img1,imgTest, CV_INTER_AREA);

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 46/49

Page 47: Analyse dynamique d'expressions faciales dans une vidéo

diff=cvNorm( img2, imgTest );cvReleaseImage(&imgTest);diffTab[area][compteur[area]] = diff; diffSum[area] += diff;if(compteur[area]>=meanWindowSize) diffSum[area] -= diffTab[area][compteur[area]-meanWindowSize];compteur[area]++;

mean=diffSum[area]/((compteur[area]<meanWindowSize)? compteur[area] : meanWindowSize);

}

CvFont myFont2;cvInitFont(&myFont2,CV_FONT_HERSHEY_PLAIN,1.0f,1.0f,0,1,8);

// Remise à zéro du graphique si au bout de la fenêtreif(oldDiff[area]==0 || diff==-1 ) oldDiff[area]=100*(1+area);if(graphTime==0){

for(int x=0; x<graphDiff->width; x++){ for(int y=0; y<graphDiff->height; y++){ cvSet2D(graphDiff, y,x,cvScalar(255,255,255));

}}

cvPutText( graphDiff, "Mouth : ", cvPoint(15,40) , &myFont2, CV_RGB(0,0,0)); cvPutText( graphDiff, "EyeL : ", cvPoint(15,140) , &myFont2, CV_RGB(0,0,0)); cvPutText( graphDiff, "EyeR : ", cvPoint(15,240) , &myFont2, CV_RGB(0,0,0));

cvPutText( graphDiff, "EyeBL : ", cvPoint(15,340) , &myFont2, CV_RGB(0,0,0));cvPutText( graphDiff, "EyeBR : ", cvPoint(15,440) , &myFont2, CV_RGB(0,0,0));cvPutText( graphDiff, "FHead : ", cvPoint(15,540) , &myFont2, CV_RGB(0,0,0));}

CvScalar color,color2;int y;switch(area){

case 0/*Mouth*/: color=cvScalar(0,0,255) ; color2=cvScalar(0,0,150) ; y=100-(int)diff/10; break;case 1/*EyeL */: color=cvScalar(0,255,0) ; color2=cvScalar(0,150,0) ; y=200-(int)diff/10; break;case 2/*EyeR */: color=cvScalar(0,255,0) ; color2=cvScalar(0,150,0) ; y=300-(int)diff/10; break;case 3/*EyeBL*/: color=cvScalar(0,200,200);color2=cvScalar(0,120,120); y=400-(int)diff/10; break;case 4/*EyeBR*/: color=cvScalar(0,200,200);color2=cvScalar(0,120,120); y=500-(int)diff/10; break;case 5/*FHead*/: color=cvScalar(200,0,200);color2=cvScalar(120,0,120); y=600-(int)diff/10; break;default : break;

}if (diff!=-1) // Dessin du graph{

cvCircle(graphDiff,cvPoint(2*graphTime,y),2,color,1,8,0);cvCircle(graphDiff,cvPoint(2*graphTime,100*(1+area)-(int)mean/10),1,color2,1,8,0);cvLine( graphDiff, cvPoint(2*graphTime-2,oldDiff[area]), cvPoint(2*graphTime,y), color,1,8 );oldDiff[area]=y;

}// Décisionint decision=3;if (diff>= mean*0 && diff < mean*1.2) /* Frame Stop */decision=0;if (diff>= mean*1.2 && diff < mean*2 ) /* Frame Move */decision=1;if (diff>= mean*2 && diff < mean*10 ) /* Key Frame */decision=2;if (diff<=0 || mean==0 || diff>mean*10 ) /* Detect Fail*/decision=3;cvShowImage("GraphDiff",graphDiff); return decision;

}

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 47/49

Page 48: Analyse dynamique d'expressions faciales dans une vidéo

B. 5) Extraction des caratéristiques

int opticalFlow(int mode,IplImage *frame1,IplImage *frame2){

CvCapture *Cap;CvSize frame_size;if ( mode != 2) /* Webcam 0 / Video 1*/{

Cap = (mode == 0)? cvCaptureFromCAM(0) : cvCaptureFromAVI("C:\\optical_flow_input.avi");if (Cap == NULL) { fprintf(stderr, "Error: Can't open video or read webcam flow.\n"); return -1;}frame_size = cvSize((int) cvGetCaptureProperty( Cap, CV_CAP_PROP_FRAME_WIDTH ),

cvGetCaptureProperty( Cap, CV_CAP_PROP_FRAME_HEIGHT ));frame2 = cvQueryFrame( Cap );frame1 = cvCloneImage( frame2 );

}else /* Comparaison 2*/{

if (frame1 == NULL || frame2 == NULL){

//fprintf(stderr, "Error: One frame or more is empty.\n");return -2;

}// Resizing frame_size = cvSize(frame1->width,frame1->height);

IplImage* frameTest=cvCreateImage(frame_size,frame1->depth,frame1->nChannels);cvResize(frame2,frameTest, CV_INTER_AREA);cvCopy(frameTest,frame2);cvReleaseImage(&frameTest);

}do{

if ( mode == 0 || mode ==1){

if(!cvGrabFrame(Cap)) return -1;cvCopy( frame2, frame1 );frame2 = cvRetrieveFrame( Cap );

}

IplImage *frame1_1C = NULL, *frame2_1C = NULL, *eig_image = NULL, *temp_image = NULL, *pyramid1 = NULL, *pyramid2 = NULL;frame1_1C = cvCreateImage( frame_size, IPL_DEPTH_8U, 1 );frame2_1C = cvCreateImage( frame_size, IPL_DEPTH_8U, 1 );

cvConvertImage(frame1, frame1_1C);cvConvertImage(frame2, frame2_1C);eig_image = cvCreateImage(frame_size, IPL_DEPTH_32F, 1 );temp_image= cvCreateImage(frame_size, IPL_DEPTH_32F, 1 );

const int G = 20; // Nombre de features à trouver sur l'imageCvPoint2D32f frame1_features[G];int number_of_features = G;cvGoodFeaturesToTrack(frame1_1C, eig_image, temp_image, frame1_features,

&number_of_features, .01, .01, NULL);CvPoint2D32f frame2_features[G];char optical_flow_found_feature[G];float optical_flow_feature_error[G];

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 48/49

Page 49: Analyse dynamique d'expressions faciales dans une vidéo

CvSize optical_flow_window = cvSize(3,3);CvTermCriteria optical_flow_termination_criteria = cvTermCriteria( CV_TERMCRIT_ITER |

CV_TERMCRIT_EPS, 20, .3 );pyramid1 = cvCreateImage(frame_size, IPL_DEPTH_8U, 1 );pyramid2 = cvCreateImage(frame_size, IPL_DEPTH_8U, 1 );cvCalcOpticalFlowPyrLK(frame1_1C, frame2_1C, pyramid1, pyramid2, frame1_features, frame2_features, number_of_features, optical_flow_window, 5, optical_flow_found_feature, optical_flow_feature_error, optical_flow_termination_criteria, 0 );float tailleSum=0,cosinusSum=0,sinusSum=0,sum=0;

// Affichage du champs de vecteursfor(int i = 0; i < number_of_features; i++){

if ( optical_flow_found_feature[i] == 0 ) continue;CvPoint p = cvPoint((int) frame1_features[i].x,(int) frame1_features[i].y);CvPoint q = cvPoint((int) frame2_features[i].x,(int) frame2_features[i].y);float angle = atan2( (float) p.y - q.y, (float) p.x - q.x );float taille = sqrt( (float)((p.y - q.y)*(p.y - q.y)) + (float)((p.x - q.x)*(p.x - q.x)) );if ( taille > 30 || taille < 2 || angle ==0 ) continue;

tailleSum +=taille;cosinusSum+=cos(angle);sinusSum +=sin(angle);sum++;//Dessin des flèchesq = cvPoint((int) (p.x - 3 * taille * cos(angle)),(int) (p.y - 3 * taille * sin(angle)));cvLine( frame1, p, q, CV_RGB(255,255,255), 1, CV_AA, 0 );cvLine( frame1, cvPoint((int)(q.x+9*cos(angle+3.14/4)),(int)(q.y+9*sin(angle+3.14/4))),q, CV_RGB(255,255,255), 1, CV_AA, 0 );cvLine( frame1, cvPoint((int)(q.x+9*cos(angle-3.14/4)),(int)(q.y+9*sin(angle-3.14/4))),q, CV_RGB(255,255,255), 1, CV_AA, 0 );

}// Affichage du vecteur moyenneif(sum !=0){

tailleMean = tailleSum/sum;angleMean = atan2(sinusSum/sum,cosinusSum/sum);

}

cvShowImage("Optical Flow", frame1);

int key_pressed = cvWaitKey(10);

cvReleaseImage(&frame1_1C);cvReleaseImage(&frame2_1C);cvReleaseImage(&eig_image);cvReleaseImage(&temp_image);cvReleaseImage(&pyramid1);cvReleaseImage(&pyramid2);

}while(mode == 0 || mode == 1);return 0;

}

16/05/11 Rapport de stage : Analyse dynamique d'expressions faciales dans une vidéo 49/49