L'une des tâches de l'ICP dans le projet Artus est la construction d'un synthétiseur multi-modal (audio et animation d'un clone 3D réaliste) du LPC (Langage Parlé Complété), et sa mise en uvre dans un système complet. Chez le téléspectateur sourd ou malentendant, un terminal spécifique doit permettre de remplacer les informations textuelles du sous-titrage classique en activant un clone animé (visage + main en 3D). Le message initialement disponible sous forme textuelle devient donc accessible aux jeunes enfants ou aux personnes ne maîtrisant pas assez bien la lecture.
Ce projet a retenu le principe du pilotage du clone par le biais de paramètres de contrôle cachés (par des techniques de tatouage) dans l'image et le son. Cela permettra à l'émission originale, une fois transmise ou enregistrée, de conserver sa capacité à piloter le clone LPC, malgré les codages et média très hétérogènes d'aujourd'hui.
Dans un souci de réalisme, on a aussi choisi d'enregistrer une vraie locutrice, habituée à coder le LPC. Ce sont ces signaux qui servent à analyser les mouvements spécifiques du LPC et leurs synchronisations relatives dans le temps, ainsi qu'à construire les dictionnaires de la synthèse de parole LPC et les modèles graphiques pour le rendu final. À différentes étapes, cette approche a l'avantage de permettre de quantifier et d'évaluer la précision numérique du travail de modélisation ou de re-synthèse par rapport aux signaux de référence.
La bande passante disponible avec un tatouage robuste sera relativement faible. Elle impose un principe de réduction des données : les très nombreuses coordonnées des points du visage et de la main ne pourront pas être transmises telles quelles, une par une, cachées dans le signal audio-visuel. On va profiter de ce que les mouvements de tous ces points sont fortement corrélés, par l'anatomie mais aussi par la tâche, pour compiler ces connaissances a priori dans un modèle.
Le paradigme de la modélisation articulatoire proposé par l'ICP sera utilisé pour la synthèse automatique à partir du (télé)texte et l'animation du clone. Au final, un faible nombre de paramètres (une trentaine pour l'ensemble visage+main, quelle que soit la résolution en points ou triangles des modèles qui seront incrustés à l'écran) permettra au récepteur de reconstituer fidèlement l'animation originale et de préserver sa sémantique. Le décodeur possède en effet une copie du modèle de (dé)codage, qui exprime les coordonnées des points et leurs relations avec les paramètres articulatoires.
Le rapport T1.1 a décrit précisément la stratégie choisie pour l'acquisition des données d'apprentissage, réalisée chez Attitude Studio (pour tout ce qui concerne la main et pour les données dynamiques relatives au visage) ainsi qu'à l'ICP (pour la version haute-définition du visage).
La nature de la main et celle des gestes impliqués dans le LPC font qu'une approche linéaire (utilisée pour le clone parlant du projet RNRT TempoValse) ne suffisait pas à les modéliser : les articulations des doigts et les mouvements de torsion du cou lorsque la main et le visage se rapprochent dans un mouvement de constriction nous ont amené à définir des modèles à deux étages, pas toujours linéaires. On fait émerger ces modèles des données qui ont été récoltées, rectifiées puis augmentées spatialement.
En pratique, cela signifie aussi que la technique, classique en animation, de KeyFraming où l'on interpole entre un petit nombre de formes de référence (ou shape) ne pourra pas suffire à restituer une animation réaliste à partir des paramètres articulatoires qui auront été extraits des images tatouées.
Que ce soit pour la main ou le visage, les
paramètres articulatoires
en entrée seront tout d'abord
recombinés, pas forcément linéairement, pour
produire un plus grand nombre de
paramètres qu'on peut qualifier
de secondaires ou de cachés. Ces
sont une
combinaison linéaire des différents
, de leur
cosinus ou de leur sinus. C'est à partir des
que
seront calculées (par combinaison linéaire ou application
pondérée d'une rotation) les coordonnées de tous
les points qui animent le modèle 3D.
Fig. 1: Animation des points du clone par un petit nombre de paramètres articulatoires
Chaque modèle (que ce soit pour la main ou le visage) peut être lu dans un fichier. L'exemple fictif qui suit illustre le codage type d'un de ces fichiers. Les numéros de ligne et certaines tabulations ont été rajoutés pour la lisibilité. On retrouve les étages de la modélisation, sous forme de deux matrices successives : l'une pour la recombinaison fonctionnelle des paramètres, la suivante pour le calcul des coordonnées.
01: 5 transformations 02: 3 par1 par2 ang1 03: lpar1 LIN 0 1 2 3 04: lpar2 LIN 1 0 0 1 05: apar1 SIN 1 1 0 0 06: apar2 COS 0 0 .3 .4 07: ROTVz1.0_2.0_3.0 LIN .1 0 0 .3 08: 2 points 09: 1 10: 2.0 .1 .2 .3 .4 0 11: 0.0 .6 .7 .8 .9 0 12: -1 2 3 4 5 0 13: 2 14: 1.0 1 0 1 0 0 15: 1.0 0 1 1 0 0 16: 0.0 0 0 0 0 0.3
On va maintenant détailler les généricités
sous-jacentes à chaque ligne de l'exemple.
01: 5 transformations
La première ligne annonce le nombre de
transformations, c'est à dire le nombre de paramètres
secondaires qui seront générés.
02: 3 par1 par2 ang1
La seconde ligne donne le nombre de paramètres du premier
niveau, ainsi que leurs noms (repris dans les fichiers de
modélisation). Il y aura ensuite
lignes
qui expliciteront le mode de calcul de chaque paramètre de
second niveau, comme combinaison (pas forcément linéaire)
d'une constante et des
paramètres du premier niveau. Chacune de ces
lignes aura
colonnes.
03: lpar1 LIN 0 1 2 3
04: lpar2 LIN 1 0 0 1
Ces deux premières lignes correspondent au cas d'une combinaison linéaire simple (LIN est spécifié en deuxième colonne, après le nom du paramètre de second niveau).
Ici, on a soit :
et de la même façon, soit :
Le type de combinaison à opérer pour le paramètre n'est pas toujours LIN. Cela peut aussi être COS ou SIN, comme c'est justement le cas pour les lignes suivantes :
05: apar1 SIN 1 1 0 0
06: apar2 COS 0 0 .3 .4
Dans ces cas là, le calcul de la combinaison linéaire entre la constante et les paramètres du premier niveau doit être suivi par l'évaluation de la fonction trigonométrique demandée.
Pour l'exemple donné, on aura donc :
et
.
07: ROTVz1.0_2.0_3.0 LIN 0.1 0 0 .3
Le nom du paramètre, en première colonne, sert aussi
à activer la fonction de rotation, s'il est du type
ROT<caractère><caractère><flottant>_<
flottant>_<flottant> : la combi-naison linéaire
(constante + paramètres du premier niveau) calculera l'angle
d'une rotation. Dans l'exemple, la valeur de base de l'angle de la
future rotation vaut donc . Celle-ci sera appliquée au
moment du calcul des points, après une translation
spécifiée dans le nom
et avant la translation inverse. Cela
équivaut à une rotation centrée sur le point de
coordonnées opposées, soit
ici.
À ce stade, tous les paramètres secondaires ont été calculés. Ce sont eux qui vont servir pour la génération des coordonnées des points 3D du modèle à animer.
08: 2 points
La ligne qui suit la dernière transformation annonce le nombre
de points qui seront générés pour l'animation.
Pour chaque point, on a 4 lignes dont les 3 dernières (avec
colonnes) décrivent la transformation. Celle-ci est une
succession de contributions additives (la constante et la plupart des
paramètres de second niveau) et de contributions rotatives
(à chacun des paramètres de second niveau
déclaré comme un angle de rotation).
09: 1
10: 2.0 .1 .2 .3 .4 0
11: 0.0 .6 .7 .8 .9 0
12: -1 2 3 4 5 0
Le premier point (numéroté 1) ne fait pas intervenir de
rotation (les coefficients du paramètre sont
toutes nulles). Ses coordonnées seront :
13: 2
14: 1.0 1 0 1 0 0
15: 1.0 0 1 1 0 0
16: 0.0 0 0 0 0 0.3
Le calcul du point suivant (numéroté 2) fait intervenir
le paramètre qui est lié à une rotation,
déclarée en ligne 7, et dont on a mémorisé
que le centre était
. Avant l'application de cette
rotation, les coordonnées calculées sont :
Les angles pour la rotation valent . Il n'y aura donc pas de rotation
(effet nul) autour de l'axe X, ni autour de l'axe Y. La
troisième rotation s'effectue autour de l'axe Z passant par le
point
et d'angle
. Les coordonnées finales seront donc
modifiées de cette façon :
Lorsque plusieurs angles sont non nuls, on calcule d'abord la rotation autour de l'axe X, puis autour de l'axe Y, et enfin autour de l'axe Z. S'il y avait des paramètres secondaires supplémentaires, les transformations associées (rotations ou combinaison linéaires) s'effectueraient successivement, après cette première rotation.
Le source en C qui est proposé implémente le chargement de modèles articulatoires et le calcul des coordonnées 3D des points à partir des paramètres articulatoires.
Une fois compilé (par gcc artmdl2trc.c -o artmdl2trc -lm sous Unix par exemple), il accepte en entrée le nom d'une séquence de paramètres articulatoires, et d'un ou deux fichiers de modèles (l'ordre est important, il doit correspondre à l'ordre des paramètres dans la séquence). L'utilitaire génèrera en sortie un (ou deux) fichier(s) .trc, susceptibles d'être utilisés sous MotionBuilder :
artmdl2trc fichier_articulatoire.seq modele_visage.txt modele_main.txt
L'archive Modeles.zip (100 ko) inclut le source en C de cet utilitaire, les modèles de la main et du visage de la locutrice clonée pour le projet Artus, ainsi qu'une version PDF de ce document. Un exécutable pour Windows a déja été précompilé.
Une seconde archive, Exemples_sequences.zip (570 ko), comporte quelques séquences de paramètres articulatoires (capturés ou synthétisés) et les pistes audio associées.