Glaubwürdige automatische Gesichtsanimation auf Basis

Transcrição

Glaubwürdige automatische Gesichtsanimation auf Basis
Fachbereich 4: Informatik
takomat GmbH
Glaubwürdige automatische
Gesichtsanimation auf Basis
aufgenommener Sprache
Bachelorarbeit
zur Erlangung des Grades eines Bachelor of Science (B.Sc.)
im Studiengang Computervisualistik
vorgelegt von
Philipp Mungenast
Erstgutachter:
Dipl. Inf. Martin Stöcker
takomat GmbH
Zweitgutachter:
Prof. Dr. Stefan Müller
Institut für Computervisualistik, Universität Koblenz-Landau
Koblenz, im April 2010
Erklärung
Ich versichere, dass ich die vorliegende Arbeit selbständig verfasst und keine
anderen als die angegebenen Quellen und Hilfsmittel benutzt habe.
Ja
Nein
Mit der Einstellung der Arbeit in die Bibliothek bin ich einverstanden.
Der Veröffentlichung dieser Arbeit im Internet stimme ich zu.
.................................................................................
(Ort, Datum)
(Unterschrift)
1
Zusammenfassung
Virtuelle Charaktere sind heute in vielen Bereichen anzutreffen. Computerspiele, Filme oder Assistenten für Programme sind nur einige Beispiele. Für
alle diese Charaktere ist eine glaubwürdige Gesichtsanimation von großer Bedeutung. Die Erstellung dieser Animationen erfolgt allerdings immer noch
von Hand und ist sehr zeitaufwendig.
Diese Arbeit befasst sich mit der automatischen Erzeugung glaubwürdiger
Gesichtsanimationen aus einem Sprachsignal. Dazu werden zwei prosodische
Merkmale des Signals verwendet, die Grundfrequenz und die Leistung. Diese
prosodischen Merkmale beschreiben Betonung und Aussprache des Sprachsignals.
Aus diesen Merkmalen werden, nach einer Vorverarbeitung, Animationen für
den Kopf, die Augenbrauen und die Augenlider eines virtuellen Charakters
erzeugt. Im Mittelpunkt dieser Arbeit steht die Konzipierung und Implementierung eines Systems, das diese Aufgaben übernimmt.
Abstract
Today, virtual characters are part of many aspects of media. Computer games, movies or guides in computer programs are only a few examples. Believable facial animations are essential for all these characters. Yet, these facial
animations are still created manually in a time consuming process.
This thesis addresses the automatic creation of believable facial animations
from a speech signal. The creation relies on the analysis of two prosodic features of the signal, the fundamental frequency and the signal power. These
prosodic features describe accentuation and articulation of the speech signal.
After a pre-processing, the features are used to create animations for the
head, the eyebrows und the eyelids of a virtual character. The focus of the
thesis lies on the design and implementation of a system that executes this
task.
2
Danksagung
Ich möchte mich bei allen bedanken, die mir bei der Anfertigung dieser Arbeit geholfen und mit Rat und Tat zur Seite gestanden haben.
Ein besonderer Dank geht an meine Betreuer Martin Stöcker und Herrn Prof.
Müller, für ihre Vorschläge und Anregungen. Besonders bedanken möchte ich
mich auch bei der takomat GmbH, die mir ihre Animations-Engine Phenome für diese Arbeit zur Verfügung gestellt hat.
3
Inhaltsverzeichnis
1 Einleitung
1.1 Motivation . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.2 Ziele der Arbeit . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3 Aufbau der Arbeit . . . . . . . . . . . . . . . . . . . . . . . .
1
1
1
2
2 Grundlagen der Gesichtsanimation
2.1 Animationsmodelle und -techniken . . . . .
2.1.1 Interpolationstechnik . . . . . . . . .
2.1.2 Parametrische Modelle . . . . . . . .
2.1.3 Physikalische muskelbasierte Modelle
2.1.4 Facial Action Coding System . . . .
2.2 Gesichtsanimationen von Hand . . . . . . .
2.2.1 Mund und Lippen . . . . . . . . . .
2.2.2 Kopfbewegungen . . . . . . . . . . .
2.2.3 Augenbewegungen . . . . . . . . . .
2.2.4 Augenlider . . . . . . . . . . . . . .
2.2.5 Augenbrauen . . . . . . . . . . . . .
2.2.6 Abschließende Ergänzungen . . . . .
2.3 Zusammenfassung . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
3
3
3
4
5
5
6
7
7
7
8
8
8
8
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
3 Grundlagen der Sprachsignalverarbeitung und -analyse
3.1 Sprachentstehung und Eigenschaften des Sprachsignals . .
3.2 Grundfrequenz . . . . . . . . . . . . . . . . . . . . . . . .
3.3 Signalleistung . . . . . . . . . . . . . . . . . . . . . . . . .
3.4 Phoneme . . . . . . . . . . . . . . . . . . . . . . . . . . .
3.5 Zusammenhänge zwischen Prosodie und Mimik . . . . . .
3.6 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
9
9
9
11
13
13
13
4 Konzept des Systems SpeechToAnimation
4.1 Ziele und Anforderungen . . . . . . . . . .
4.2 Bestehende Ansätze . . . . . . . . . . . .
4.3 Grundlegende Vorgehensweise . . . . . . .
4.4 Aufbau und Struktur . . . . . . . . . . . .
4.5 Aufbau des SpeechAnalyser . . . . . . . .
4.5.1 F0-Kurve . . . . . . . . . . . . . .
4.5.2 Signalleistung . . . . . . . . . . . .
4.5.3 Phoneme . . . . . . . . . . . . . .
4.6 Aufbau des AnimationGenerator . . . . .
4.6.1 Markierung von Pausen . . . . . .
4.6.2 Augenbrauen . . . . . . . . . . . .
4.6.3 Kopfbewegungen . . . . . . . . . .
4.6.4 Animationen in Pausen . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
15
15
15
18
19
20
20
21
21
21
22
22
22
23
i
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
4.7
4.8
4.6.5 Phoneme . . . . . . . . . .
4.6.6 Skalierung . . . . . . . . . .
Meta Animation Language . . . . .
PluginManager und Export-Plugins
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
5 Implementierung
5.1 Verwendete Bibliotheken . . . . . . . . . .
5.2 SpeechAnalyser . . . . . . . . . . . . . . .
5.2.1 Zusammenfassung der Aufgaben .
5.2.2 Hilfsklassen . . . . . . . . . . . . .
5.2.3 Die Klasse SpeechAnalyser . . . . .
5.3 Meta Animation Language . . . . . . . . .
5.3.1 Zusammenfassung der Aufgaben .
5.3.2 Klassenübersicht . . . . . . . . . .
5.3.3 Die Klasse MALXWriter . . . . . .
5.4 AnimationGenerator . . . . . . . . . . . .
5.4.1 Zusammenfassung der Aufgaben .
5.4.2 Die Klasse AnimationGenerator . .
5.5 PluginManager . . . . . . . . . . . . . . .
5.5.1 Zusammenfassung der Aufgaben .
5.5.2 Aufbau der Klasse und Einbindung
5.6 GUI . . . . . . . . . . . . . . . . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
. . . . . . .
der Plugins
. . . . . . .
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
23
23
23
25
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
.
26
26
26
26
27
30
32
32
33
33
34
34
34
38
38
39
39
6 Bewertung
6.1 Vergleich mit dem Referenzsystem . . . . . . . . . . . . . . .
6.1.1 Vorgehensweise . . . . . . . . . . . . . . . . . . . . . .
6.1.2 Allgemeiner Vergleich . . . . . . . . . . . . . . . . . .
6.1.3 Näherer Vergleich an zwei Abschnitten . . . . . . . . .
6.1.4 Beispielabbildungen . . . . . . . . . . . . . . . . . . .
6.2 Animationen zu „Enter it and I will help you to fly the spaceship“
6.3 Animationen zu „The cockpit is over there“ . . . . . . . . . .
6.4 Zusammenfassung . . . . . . . . . . . . . . . . . . . . . . . .
7 Zusammenfassung, Fazit
7.1 Zusammenfassung . .
7.2 Fazit . . . . . . . . . .
7.3 Ausblick . . . . . . . .
41
41
41
42
44
47
49
51
55
und Ausblick
56
. . . . . . . . . . . . . . . . . . . . . . 56
. . . . . . . . . . . . . . . . . . . . . . 56
. . . . . . . . . . . . . . . . . . . . . . 57
ii
1
1.1
Einleitung
Motivation
Computergenerierte Charaktere sind heute in vielen Bereichen anzutreffen:
Computerspiele, Assistenten für Programme oder Filme sind nur die prominentesten Beispiele. Für alle diese Charaktere ist eine glaubwürdige Gesichtsanimation unabdingbar. Das Gesicht ist für uns Menschen das primäre
Erkennungsmerkmal, in dem wir auch noch kleinste Bewegungen und Veränderungen wahrnehmen.
Ein hoch detailliertes Gesicht, das beim Sprechen nur den Kiefer auf
und ab bewegt, wirkt auf uns trotz seines Detailgrades hölzern, leblos und
unglaubwürdig. Eine gute und glaubwürdige Gesichtsanimation hingegen
haucht auch einem sehr einfachen Gesicht aus nur wenigen Polygonen Leben
ein. Wichtig dabei ist besonders, dass die Animationen zum gesprochenen
passen und nicht übertrieben wirken. Lippen, die sich etwa nicht synchron
zum Gesprochenen bewegen, zerstören die Glaubwürdigkeit ebenso, wie ständig zuckende Augenbrauen.
(Gesichts-)Animationen werden immer noch von Hand erstellt, was große
Projekte mit vielen virtuellen Charakteren, wie z.B. ein Computerspiel, sehr
aufwendig macht. Systeme zur automatischen Erzeugung von Animationen
oder Editoren, die diese Arbeit unterstützen, sind daher wünschenswert.
Abbildung 1: Vergleich: der Charakter bewegt ausschließlich die Lippen (links),
der Charakter bewegt neben den Lippen auch Kopf und Augenbrauen (rechts)
c
takomat
GmbH 2010
1.2
Ziele der Arbeit
Diese Arbeit soll sich mit der automatischen Erstellung von passenden und
glaubwürdigen Gesichtsanimationen zu einem gesprochenen Satz oder Text
1
auseinandersetzen.
Dabei beschränkt sich die Arbeit auf die direkten Eigenschaften und Parameter des Sprachsignals, wie etwa seine Grundfrequenz. Eine komplexere
Analyse des Signals, die etwa durch Spracherkennung Inhalt und Kontext
des Gesprochenen zu ermitteln versucht, kommt nicht zum Einsatz.
Ziel ist die Konzipierung und Implementierung des Systems SpeechToAnimation, das aus einem Sprachsignal Gesichtsanimationen für die AnimationsEngine Phenome [9] erzeugt.
1.3
Aufbau der Arbeit
Die Arbeit gliedert sich in insgesamt 7 Kapitel. Auf das erste einleitende Kapitel folgen zwei Kapitel, die in die Grundlagen der Gesichtsanimation sowie
der Sprachsignalverarbeitung und -analyse einführen.
Das vierte Kapitel stellt Ansatz und Konzept des Systems SpeechToAnimation vor. Danach folgen das fünfte Kapitel über die Implementierung des
Systems, sowie seine Bewertung im sechsten Kapitel.
Das siebte und letzte Kapitel fasst die Arbeit noch einmal zusammen und
enthält das abschließende Fazit. Es schließt mit einem Ausblick auf die zukünftige Entwicklung von SpeechToAnimation.
2
2
Grundlagen der Gesichtsanimation
Dieses Kapitel soll einen Überblick über den aktuellen Stand der Gesichtsanimation verschaffen. Dazu werden im ersten Abschnitt zunächst die wichtigsten Animationsmodelle und -techniken vorgestellt.
Der darauf folgende Abschnitt befasst sich mit der „klassischen“ Animationserstellung von Hand und führt in die Vorgehensweise eines Animators
ein.
2.1
Animationsmodelle und -techniken
Die verschiedenen Animationsmodelle und -techniken lassen sich in drei Kategorien aufteilen: die Interpolationstechnik - auch Morphing genannt -, parametrische Modelle und physikalische Modelle.
2.1.1
Interpolationstechnik
Die Interpolationstechnik nutzt zwei oder mehr sogenannter Key Expression
Poses - auch Blendshapes oder Morphtargets -, zwischen denen interpoliert
wird. Diese Key Expression Poses zeigen das Gesichtsmodell in einem bestimmten Ausdruck, z.B. mit weit geöffneten Mund. Zwischen diesem Ausdruck (P ose1 ) und einer anderen Position (P ose2 ), etwa dem Gesicht mit
geschlossenen Mund, kann nun mit der Interpolationsformel
P oseneu = α · P ose1 + (1.0 − α) · P ose2 , mit 0.0 < α < 1.0
interpoliert werden.
Dabei wird zwischen den Eckpunkten des Gesichtsmodells interpoliert.
Die Topologie des Modells muss daher für jeden Ausdruck gleich sein. Alternativ können auch andere mathematische Funktion zur Interpolation genutzt werden. Eine Kosinusfunktion etwa simuliert die Beschleunigung und
Verlangsamung der Muskeln zu Beginn und Ende einer Gesichtsbewegungen.
Die Interpolation ist damit eine sehr intuitive und einfach anzuwendende
Technik. Ihr großer Nachteil ist aber die beschränkte Anzahl von Gesichtsausdrücken: kann ein Gesichtsausdruck nicht aus bestehenden Key Expression
Poses erzeugt werden, muss entweder ein neuer Ausdruck zur Datenbank hinzugefügt oder ein anderer Ausdruck verwendet werden. Für ausdrucksstarke
Gesichter muss die Datenbank daher sehr viele Expression Poses enthalten.
Eine Erweiterung der Technik ist durch bilineare, trilineare und theoretisch auch n-dimensionale Interpolation möglich, um nicht nur zwischen
zwei, sondern auch drei, vier oder n+1 vielen Gesichtsausdrücken interpolieren zu können. Ein anderes Konzept zur Erweiterung ist die Facial Region
3
Abbildung 2: Interpolationstechnik: Aus den beiden Key Expression Poses links
und rechts wird durch Interpolation der neue Ausdruck in der Mitte
erzeugt (aus [16])
Interpolation. Dabei wird das Gesicht in verschiedene Regionen eingeteilt,
die separat interpoliert werden.
2.1.2
Parametrische Modelle
Im Bereich der parametrischen Modelle lassen sich zwei Arten der Parametrisierung unterscheiden: zum einen die Parametrisierung des Gesichtsmodells,
also der Topologie der Eckpunkte, die die Erzeugung und Veränderung einer
großen Anzahl von Gesichtern erlaubt. Bei diesen Gesichtsmodellen werden
Form und Aussehen durch verschiedene Parameter, wie etwa die Größe der
Nase oder des Kiefers festgelegt.
Zum anderen lassen sich Gesichtsanimationen parametrisieren. Sogenannte Direct Parameterized Models wurden von Parke als Alternative zur Interpolationstechnik entwickelt [16, S.127]. Ziel war ein System, das eine Vielzahl
von Gesichtsausdrücken aus einer minimalen Anzahl von Kontrollparametern
erzeugen kann. Die Kontrollparameter dieses ersten Modells umfassen unter
anderem: Öffnung der Augenlider, Form und Position der Augenbrauen, die
Blickrichtung sowie die Öffnung des Mundes. Diese Bewegung werden durch
direkte Manipulation der Eckpunkte im Gesichtsmodell umgesetzt.
Ein weitere Variante parametrischer Modelle sind Pseudomuskel-basierte
Modelle. Da eine vollständige Simulation des Gesichts mit seinem komplexen
Zusammenspiel von Haut, Muskeln und Knochen sehr aufwendig ist, simulieren diese Modelle nur die sichtbaren Bewegungen einzelner Muskeln oder
auch Muskelgruppen. Die einzelnen Muskeln können über Kontrollparameter
4
angesprochen werden.
Abbildung 3: Pseudomuskel-basierte Modelle: Die roten Linien im Gitternetzmodell (a) zeigen die Pseudomuskeln, die die Gesichtsbewegungen
steuern (b-d) (aus [16])
2.1.3
Physikalische muskelbasierte Modelle
Mit zunehmender Leistungsfähigkeit der Computer wurde die physikalische
Simulation von Teilen der Gesichtsanatomie möglich. Eine vollständige Simulation der Anatomie wird auch aktuelle Computer noch überfordern, aber
vereinfachte Modelle, die das Zusammenspiel der Gesichtsknochen, -muskeln
und -haut simulieren, existieren bereits. Schon Anfang der 1980er Jahren entwickelten Platt und Badler ein frühes physikalisch basiertes Modell, bei dem
die Eckpunkte der Hautpolygone mit simulierten Federn versehen waren, um
das Verhalten der Haut bei Bewegungen zu simulieren. Die Eckpunkte waren zusätzlich über simulierte Muskeln mit einer Knochenstruktur unter der
Haut verbunden. Die simulierten Muskeln hatten elastische Eigenschaften
und konnten Kraft ausüben. Gesichtsausdrücke wurden über verschiedene
Muskelkontraktion und -relaxationen erzeugt.
Waters entwickelte Ende der 1980er ein weiteres Modell, dass bereits zwei
unterschiedliche Muskeltypen simulieren konnte: Lineare Muskeln, die in eine bestimmte Richtung ziehen, und Ringmuskeln, die sich in einem Punkt
zusammenziehen. Zusätzliche Erweiterungen zu diesem Modell führten außerdem eine neue Simulation der Haut ein. Diese simulierte das Verhalten
von drei unterschiedlichen Hautschichten.
2.1.4
Facial Action Coding System
Das Facial Action Coding System - kurz FACS - ist selbst keine Animationstechnik, hat aber die Entwicklung der Techniken entscheidend beeinflusst.
Ursprünglich gar nicht für diesen Bereich gedacht, hat es weite Verbreitung
5
Abbildung 4: Physikalische muskelbasierte Modelle: Zusätzlich zu den Muskeln
wird auch das Verhalten der Haut simuliert (zu erkennen besonders
an den Falten zwischen den Augenbrauen) (aus [16])
als Basis für die Gesichtsanimation gefunden.
FACS wurde als Beschreibungssprache für Gesichtsausdrücke entwickelt. Es
beschreibt die grundlegenden Muskelbewegungen im Gesicht und ihre Auswirkungen auf den Gesichtsausdruck.
Die Grundeinheit des Systems bilden so genannten Action Units - kurz AU
-, die z.B. das Anheben der Oberlippe beschreiben. Eine AU kann sich dabei
aus den Bewegungen verschiedener Muskeln zusammensetzen. Ein Muskel
kann zudem an mehr als einer AU beteiligt sein. Insgesamt umfasst FACS
46 dieser Action Units. Theoretisch können 20 AUs an einem einzigen Ausdruck beteiligt sein.
FACS beschränkt sich auf solche Muskeln, die vom Menschen willentlich
bewegt werden können. Es werden außerdem nur solche Muskelbewegungen
beschreiben, die auch tatsächlich sichtbar sind. Zusätzlich zu den Muskelbewegungen umfasst das System auch Beschreibungen für die Kopf- und
Augenposition.
Das System arbeitet sehr zuverlässig für die Stirn, die Augenbrauen und
die Augenlider. Die verschiedenen Positionen des Unterkiefers und vor allem
die Lippenbewegungen sind aber aufgrund ihrer Komplexität nicht vollständig beschrieben.
Viele Animationssysteme nutzen FACS als Grundlage, bilden aber oft
nicht alle der 46 AUs ab.
2.2
Gesichtsanimationen von Hand
Da sich Animatoren bei ihrer Arbeit vorwiegend auf Intuition und eigene Erfahrung verlassen, fällt eine streng wissenschaftliche Betrachtung des eigentlichen Animationsvorgangs schwer. Zudem kann dieser Vorgang von Person
zu Person unterschiedlich aussehen. Dieser Abschnitt konzentriert sich daher
auf das Vorgehen, das der Animator Jason Osipa in [8] beschreibt.
6
Er teilt den Animationsvorgang in sechs Schritte ein:
1. Animation des Mundes bzw. der Lippen
2. Kopfbewegungen
3. Augenbewegungen
4. Augenlider
5. Augenbrauen
6. Abschließende Ergänzungen (im Buch als „Finesse“ bezeichnet)
2.2.1
Mund und Lippen
Damit der Charakter glaubwürdig wirkt, müssen sich die Lippen synchron
zum Gesprochenen bewegen. Dazu müssen zunächst eine Reihe von Lippenbewegungen oder Mundformen erstellt werden, die sogenannten Viseme.
Diese Viseme entsprechen z. B. den zusammengezogenen Lippen bei der
Artikulation eines „O“. Im nächsten Schritt werden diese Viseme jedem einzelnen Laut innerhalb der gesprochenen Sequenz zugeordnet.
Dies kann entweder manuell durch den Animator oder auch automatisch zur
Laufzeit im Animationssystem geschehen.
2.2.2
Kopfbewegungen
Osipa legt seinen Kopfbewegungen sowohl die Lautstärke als auch die Tonhöhe des Gesprochenen zugrunde (er bezeichnet dies auch als „music of the
dialogue“ [8, S. 156]). Stellen, an denen Lautstärke und Tonhöhe plötzlich
und deutlich ansteigen, werden mit einer Aufwärtsbewegung des Kopfes versehen. Fallen Lautstärke und Tonhöhe wieder, so bewegt sich der Kopf in die
Neutralstellung zurück. Soll etwas betont werden, kann sich der Kopf auch
nach unten bewegen.
2.2.3
Augenbewegungen
Die Augenbewegungen hängen stark vom Kontext des Gesprochenen ab. Befindet sich der Charakter in einem Dialog, so sind die Augen die meiste Zeit
auf den Dialogpartner gerichtet. Ergibt der Kontext, dass der Charakter gerade nachdenkt oder nach einem Wort sucht, so kann das betont werden, in
dem er nach oben oder nach unten schaut.
Spricht der Charakter zu einer Gruppe, so wandern die Augen zwischen den
verschiedenen Gruppenmitgliedern hin und her. Wichtig ist dabei, dass sich
der Blick immer wieder fokussiert (also kurz stehen bleibt) und sich dann
erst wieder weiterbewegt. Dieser „wandernde Blick“ kann auch für Monologe
verwendet werden.
7
2.2.4
Augenlider
Augenlider werden von Osipa vorrangig verwendet um Emotionen auszudrücken. Besonders wichtig ist das Zusammenspiel mit den Augen, da die
Lider immer in Relation zu Pupille und Iris des Auges wahrgenommen werden. Sind etwa die oberen Augenlider geweitet bzw. nach oben gezogen und
der Blick auf ein bestimmtes Ziel gerichtet, so wirkt Charakter alarmiert.
Sind bei der selben Position der Augenlider die Augen weit nach oben gerollt, so erscheint der Charakter schläfrig.
2.2.5
Augenbrauen
Augenbrauen dienen hauptsächlich zur Unterstützung oder Verstärkung bestimmter Sequenzen und sollten, nach Osipa, daher sparsam eingesetzt werden. Sie können, wie die Augenlider, Stimmung und Emotionen des Charakters ausdrücken. Dabei ist ebenfalls das Zusammenspiel mit den anderen
Bereichen des Gesichts wichtig.
Die Wirkung eines Lächelns wird durch gehobene Augenbrauen ebenso verstärkt (der Charakter wirkt noch fröhlicher), wie der bereits beschriebene,
alarmierte Gesichtsausdruck (der Charakter wirkt nicht nur alarmiert sondern erschrocken).
2.2.6
Abschließende Ergänzungen
In diesem letzten Arbeitschritt werden alle Elemente noch einmal kontrolliert
und ihr Zusammenspiel abgerundet. Zusätzlich können Feinheiten, wie etwa
Seitwärtsneigung oder Drehungen des Kopfes hinzugefügt werden.
2.3
Zusammenfassung
Die wichtigsten Animationstechniken stellen die Interpolation zwischen Key
Expression Poses, parametrische und pseudomuskel-basierte, sowie physikalische Modelle dar. Zudem existiert eine große Anzahl an Mischformen dieser
Modelle, etwa die Interpolation zwischen mit Pseudomuskeln erstellten Gesichtsausdrücken.
Durch Beschreibungen der Gesichtsbewegungen, wie sie etwa das Facial
Action Coding System liefert, ist es aber möglich, Befehlssprachen für die Gesichtsanimation zu erstellen, die von der eigentlich Implementierung der Animationen abstrahieren. Diese Befehlssprachen gleichen dann einer höheren
Programmiersprache und sind - im Idealfall - mit jeder Animationstechnik
kompatibel.
8
3
Grundlagen der Sprachsignalverarbeitung und analyse
Dieses Kapitel befasst sich mit den Grundlagen der Sprachsignalverarbeitung
und -analyse. Der Schwerpunkt liegt dabei auf den prosodischen Eigenschaften eines Sprachsignals.
Der erste Abschnitt des Kapitels skizziert die Entstehung von Sprache und
definiert die Eigenschaften des Sprachsignals. Die beiden folgenden Abschnitte befassen sich mit der Grundfrequenz und der Leistung eines Signals. Der
vierte Abschnitt erläutert die Grundeinheit der Sprache, die Phoneme, bevor
der fünfte Abschnitt auf die Zusammenhänge zwischen Prosodie und Mimik
eingeht.
3.1
Sprachentstehung und Eigenschaften des Sprachsignals
Sprache, oder besser Sprachlaute, entstehen, wenn Luft aus der Lunge zum
Mund strömt. Der Luftstrom passiert dabei den Raum zwischen den Stimmbändern, Glottis oder auch Stimmritze genannt. Sind die Stimmbänder geweitet, so kann der Luftstrom fast ungehindert passieren. Ziehen sie sich
hingegen zusammen und verengen die Glottis, so versetzt der Luftstrom die
Bänder in Schwingung. Durch diese Schwingungen der Stimmbänder entstehen stimmhafte Laute, die meisten dieser Laute sind Vokale.
Schwingen die Stimmbänder nicht, so können nur stimmlose Laute entstehen
(Konsonanten).
Das Sprachsignal enthält mindestens drei Arten von Informationen (vgl.
[18]):
1. Linguistische Informationen, die Aussage des Gesprochenen
2. Soziolinguistische Informationen, die etwa die Herkunft des Sprechers
deutlich machen (z. B. durch Dialekt)
3. die Prosodie, die unter anderem Aussprache und Betonung beschreibt
Die soziolinguistischen Informationen und die Prosodie werden als paralinguistische Informationen bezeichnet. Für diese Arbeit ist besonders die
Prosodie wichtig. Sie beschreibt, „wie“ ein Satz oder ein Wort gesprochen
werden, also wie der Sprecher die einzelnen Wörter ausspricht und betont.
Im Sprachsignal sind diese Informationen vorrangig über die Grundfrequenz
repräsentiert.
3.2
Grundfrequenz
Die Frequenz, in der die Stimmbänder während der Erzeugung von stimmhaften Lauten schwingen, wird als die Grundfrequenz - kurz F0 - des Sprach9
signals bezeichnet.
Diese wird vom Hörer als Tonhöhe wahrgenommen. In [17] findet sich dazu
auch folgende Definition:
„F0 ist definiert als die Frequenz des Tones, die die gleiche Tonhöhenempfindung hervorruft wie das Sprachsignal.“ [17, S. 200]
Da die Stimmbänder nur bei der Erzeugung stimmhafter Laute schwingen, kann auch nur während dieser Laute eine Grundfrequenz wahrgenommen bzw. analysiert werden.
Für die Analyse und Extraktion der Grundfrequenz existiert eine Reihe von Algorithmen. In dieser Arbeit wird der „Robust Algorithm for Pitch
Tracking“, abgekürzt RAPT, von David Talkin verwendet (vgl. [10]).
RAPT basiert im Wesentlichen auf der normalisierten Kreuzkorrelationsfunktion (Normalised Cross-correlation Function, kurz NCCF ). Die normalisierte Kreuzkorrelation zweier Signale beschreibt die Ähnlichkeit dieser
Signale; für identische Signale nimmt die NCCF den Wert 1.0 an.
Um die NCCF zu berechnen, wird das Sprachsignal zunächst in einzelne Frames mit einer festen Anzahl von Signalwerten bzw. Samples zerlegt. Über die
einzelnen Frames wird nun ein Analysefenster gelegt. Für den Signalabschnitt
in diesem Fenster wird die normalisierte Kreuzkorrelation zu verschiedenen
Fenstern in der Zukunft berechnet. „In der Zukunft“ meint dabei Fenster,
die auf der Zeitachse um einen bestimmten Abstand zum Ausgangsfenster
in die Zukunft verschoben sind. Im Englischen wird dieser Abstand als Lag
bezeichnet.
Sei s das Sprachsignal und si der Wert des Signals an Stelle i. Jeder
Frame des Signals enthält z Samples, das Analysefenster umfasst n Samples.
Die normalisierte Kreuzkorrelation Φi,k für den Frame i und den Lag k ist
wie folgt definiert:
Pm+n−1
Φi,k =
sj ·sj+k
;
em ·em+k
j=m
m = i · z; ej =
Pj+n−1
l=j
s2l
Der RAPT -Algorithmus arbeitet mit zwei Versionen des Sprachsignals:
dem unveränderten Original und einer Version mit stark reduzierter Abtastrate.
Zunächst wird die NCCF des reduzierten Signals berechnet. Dies geschieht
für alle Abstände/Lags, die für die F0-Kurve interessant sein könnten. Alle
Maxima dieser ersten NCCF werden gespeichert. Im nächsten Schritt wird
die zweite NCCF berechnet, allerdings nur in den Nachbarschaft der zuvor
gespeicherten Maxima. Anhand der lokalen Maxima dieser zweiten NCCF
errechnet der Algorithmus Positions- und Amplitudeneinschätzungen für die
10
F0-Kurve an verschiedenen Stellen. Zudem wird eine Hypothese aufgestellt,
ob der jeweilige Abschnitt überhaupt stimmhaft ist - ob die F0-Kurve also
überhaupt einen Wert größer Null annehmen kann.
Abschließend wird mit Hilfe dynamischer Programmierung aus den verschiedenen Einschätzungen eine vollständige F0-Kurve errechnet.
3.3
Signalleistung
Die momentane Signalleistung P (t) für ein analoges Signal x(t) ist nach [4]
(Abschnitt 2.3.1) definiert als:
P (t) = x2 (t)
Die mittlere Signalleistung für den Zeitintervall T ist definiert als:
P̄ =
1
T
R T /2
−T /2 x
2 (t)dt.
Für ein diskretes Signal x(k) ist die momentane Signalleistung ebenfalls
als P (k) = x2 (k) definiert. Die mittlere Signalleistung für die k Samples N1
bis Nk ist definiert als die Summe:
P̄ =
1
k
PN1 +k−1
n=N1
x2 (n)
Diese Signalleistung wird pro Frame des Signals berechnet. Ein hoher
Wert der Signalleistung korreliert mit einer höheren Lautstärke des gesprochenen.
11
Abbildung 5: Im Vergleich: Waveform (oben), Grundfrequenz (Mitte) und Leistung (unten) eines Sprachsignals
12
3.4
Phoneme
Phoneme bilden die kleinste Einheit einer Sprache. Alle Äußerungen der
Sprache können mit Hilfe der einzelnen Phoneme eindeutig dargestellt werden.
Ein Phonem ist allerdings nicht ein einzelner Laut, sondern vielmehr eine
Gruppe sehr ähnlicher Laute, die nur aufgrund ihres Kontextes, also der anderen Phoneme in einer Äußerung nicht völlig übereinstimmen. (vgl. [18, S.
4]: „[...] a phoneme is a group of similar, but not identical, sounds that differ
from one another in accordance with the context in which each occurs.").
Ein Beispiel ist der Laut „/p/“, der in den englischen Wörtern „pit“ und
„spit“ zu finden ist und in beiden ähnlich klingt, aber - aufgrund der umgebenden Laute - nicht exakt gleich erzeugt wird.
3.5
Zusammenhänge zwischen Prosodie und Mimik
Die paralinguistsche Forschung legt einige Zusammenhänge zwischen der
Prosodie und Gesichtsbewegungen während des Sprechens nahe.
Ekman erforschte als einer der ersten die Zusammenhänge zwischen den Bewegungen der Augenbrauen und der Sprache. Er stellte dabei fest, dass gehobene Augenbrauen oft zur Akzentuierung einzelner oder auch mehrerer
Wörter dienen. Das Senken der Augenbrauen fällt hingegen oft mit Zweifel,
Bestimmtheit oder Sprechpausen zusammen.
Cavé et al. stellen in einer Studie mit zehn Testpersonen [14] einen Zusammenhang zwischen der F0-Kurve und den Bewegungen der Augenbrauen
fest. In 72 % der Fälle fallen die Bewegungen der Augenbrauen mit der Kontur der F0-Kurve zusammen.
Graf et al. kommen in ihrer Studie [?, 9]u einem ähnlichen Ergebnis.
Sie stellen zwar heraus, dass die Bewegungen von Augenbrauen und Kopf
sowie andere Gesichtsausdrücke sehr stark von der Persönlichkeit des Sprechers und seiner Situation abhängig sind. Dennoch stellen sie einen hohen
Zusammenhang zwischen der Prosodie des Gesprochenen und den Gesichtsbewegungen fest.
3.6
Zusammenfassung
Das Sprachsignal wird in dieser Arbeit ausschließlich auf seine Prosodie untersucht. Relevant ist, „wie“ und nicht „was“ gesprochen wird. Die paralinguistische Forschung legt einige Zusammenhänge zwischen der Prosodie und
Gesichtsbewegungen nahe.
13
Als Merkmale für die Prosodie dienen die Grundfrequenz und die Signalleistung, die Tonhöhe und Lautstärke des Gesprochenen wiedergeben. Zusätzlich
wird das Sprachsignal in seine Grundeinheiten, die Phoneme, zerlegt.
14
4
Konzept des Systems SpeechToAnimation
In diesem Kapitel werden Konzept und Aufbau des Systems SpeechToAnimation erarbeitet. Dazu werden im ersten Abschnitt zunächst die Ziele des
Systems definiert. Der zweite Abschnitte stellt verschiedene Ansätze zur automatischen Erzeugung von Gesichtsanimationen vor, bevor Abschnitt drei
die grundlegende Vorgehensweise des Systems erläutert.
Die nachfolgenden Abschnitte erläutern den allgemeinen Aufbau von SpeechToAnimation, sowie den genaueren Aufbau der einzelnen Module des Systems.
4.1
Ziele und Anforderungen
Vor der Konzipierung von SpeechToAnimation sollen hier die konkreten Ziele
und Anforderungen an das System zusammengefasst werden.
1. Das System erhält als Eingabe eine Audiodatei, die ein Sprachsignal
enthält. Es handelt sich bei diesem um einen gesprochenen Satz oder
Text
2. Aus dem Sprachsignal werden prosodische Merkmale extrahiert
3. Aus diesen Merkmalen erstellt SpeechToAnimation verschiedene Gesichtsanimationen
4. Diese Animationen sollen das Gesprochene unterstreichen, in dem etwa
einzelne Wörter durch eine Animation hervorgehoben werden
5. Die erzeugten Animationen sind von der Animations-Engine und der
verwendeten Animationstechnik unabhängig
Als Testsystem dient in dieser Arbeit die Phenome-Engine von takomat [9].
4.2
Bestehende Ansätze
Zur automatischen Erzeugung von Gesichtsanimationen existieren bereits
verschiedene Ansätze. Diese stützen sich auf die bereits im vorangegangenen
Kapitel erwähnten Ergebnisse der paralinguistischen Forschung.
Busso et al. stellen in [19] einen auf Prosodie, Motion Capturing und
Hidden Markov Models (kurz HMM ) basierenden Ansatz zur Erstellung von
Kopfbewegungen vor.
Dieser teilt sich in eine Trainings- und eine Ausführungsphase. Für die Trainingsphase wird zunächst eine Datenbank mit Video- und Audiodateien angelegt. Diese enthält Aufnahmen einer Schauspielerin, die verschiedene Texte
vorliest.
15
Aus den Videoaufnahmen wird, mit Hilfe von Markern im Gesicht der Schauspielerin, die Position des Kopfes bestimmt. Die entsprechende Audioaufnahmen werden hinsichtlich ihrer Grundfrequenz und Lautstärke analysiert.
Aus diesen Merkmalen (Kopfposition und prosodische Eigenschaften) werden
Hidden Markov Models generiert, die die Zusammenhänge zwischen Prosodie
und Kopfbewegungen repräsentieren.
Mit Hilfe der Informationen der HMM s können in der Ausführungsphase zu
einem Sprachsignal Kopfbewegungen erzeugt werden. Busso et al. stellen in
ihrem Fazit fest, dass natürliche Kopfbewegungen nur mit Hilfe der Sprache
und ihrer prosodischen Merkmale erstellt werden können.
Einen sehr ähnlichen Ansatz verfolgen Hofer und Shimodaira in [12]. Ihr
System basiert ebenfalls ebenfalls auf HMM s, die mit den Motion CaptureDaten eines Schauspielers und den prosodischen Merkmalen des Sprachsignals trainiert werden. Neben der Grundfrequenz und der Lautstärke des Signals werden hier noch zusätzlich die sogenannten Mel-Frequenz-CepstrumKoeffizienten errechnet, die Auskunft über das Frequenzspektrum des Sprachsignals geben.
Nach der Trainingsphase ist das System ebenfalls in der Lage, Gesichtsanimationen zu einem gesprochenen Text zu erzeugen.
Albrecht et al. stellen in [15] einen Ansatz ohne Verwendung von Motion
Capturing und Hidden Markov Models vor. Sie nutzen eine direkte Analyse
des Signals und seiner Prosodie um, neben Kopfbewegungen, auch Animationen für die Augen, Augenbrauen und -lider zu erstellen. Dabei liegt die
Annahme zugrunde, dass sich bei Anheben der Tonhöhe auch die Augenbrauen und/oder der Kopf des Sprechers heben.
Das Sprachsignal wird bei diesem Ansatz hinsichtlich seiner Grundfrequenz
und seiner Lautstärke analysiert. Danach werden alle Extremstellen der Grundfrequenz bestimmt. Bei einem Maximum, das einen besonders starken Anstieg der Tonhöhe zeigt, werden Kopf und/oder Augenbrauen des Charakters
angehoben. Fällt die Tonhöhe bei einem Minimum wieder, so bewegen sich
Kopf und Augenbrauen in die Ausgangsposition zurück.
Zusätzlich zu den Animationen aus der Grundfrequenz werden auch in Sprechpausen Animationen erzeugt. Der virtuelle Charakter schaut dann etwa zum
Boden und erweckt den Eindruck, als Suche er gerade nach einem passenden
Wort um mit seinem Satz fortzufahren. Des Weiteren erzeugt das System in
regelmäßigen Abständen Augenblinzeln des Charakters.
Alle Animationen werden zudem anhand der Lautstärke des Signals skaliert
um die Dynamik des Satzes auch im Gesicht des virtuellen Charakters auszudrücken.
Das HUGE (HUman GEsturing) System, das Zoric und Pandzic in [13],
nutzt ebenfalls die von Albrecht et al. genannten Ansätze. Das System basiert
16
hier allerdings auf einem statistischen Modell, das im Vorfeld mit annotierten
Audio- und Videodaten trainiert wird. Dieses Modell repräsentiert die Korrelationen zwischen den prosodischen Merkmalen und Gesichtsbewegungen.
Auf den genauen Aufbau dieses Modells gehen Zoric und Pandzic allerdings
nicht ein.
Das in dieser Arbeit entwickelte System SpeechToAnimation folgt dem
Ansatz von Albrecht et al., da dieser keine aufwendig zu erstellenden Motion
Capture-Datensätze und keine Trainingsphase erfordert und neben den Kopfbewegungen auch zusätzliche Animationen erzeugt, die für ein ausdrucksstarkes Gesicht notwendig sind.
Die Erweiterungen von Zoric und Pandzic fließen, aufgrund der spärlichen
Angaben in [13], nur sehr eingeschränkt in das System ein.
17
4.3
Grundlegende Vorgehensweise
Die grundlegende Vorgehensweise von von SpeechToAnimation orientiert sich
an der von Albrecht et al.:
Das System erhält als Eingabe eine Audiodatei mit einem gesprochenen
Text. Das Sprachsignal wird hinsichtlich der beiden prosodischen Merkmale
Grundfrequenz und Signalleistung analysiert.
In einem zweiten Schritt erzeugt SpeechToAnimation aus diesen Merkmalen
Animationsbefehle für die Augen, Augenbrauen und -lider sowie die Bewegung des Kopfes. Um von der letztlich verwendeten Animations-Engine und
-technik zur abstrahieren, werden diese Animationsbefehle zunächst in einem
Metaformat gespeichert.
Wenn notwendig, wird dieses Metaformat dann, in einem dritten und letzten
Schritt, in ein für die jeweilige Animations-Engine geeignetes Format exportiert.
Abbildung 6 zeigt diesen Vorgang als Flussdiagramm.
Abbildung 6: Flussdiagramm des Analyse- und Generierungssystems
18
4.4
Aufbau und Struktur
SpeechToAnimation besteht aus insgesamt drei Hauptmodulen: dem SpeechAnalyser zur Analyse des Sprachsignals und der Merkmalsextraktion, dem
AnimationGenerator zur Erzeugung der Animationen, der auch die Speicherung im Metaformat übernimmt, sowie dem PluginManager, der verschiedene
Export-Plugins verwaltet. Mit diesen kann das Metaformat in beliebige andere Formate übertragen werden.
Abbildung 7 zeigt eine Übersicht dieser Module.
Abbildung 7: Übersicht über die Hauptmodule von SpeechToAnimation
Zur Übergabe der extrahierten Merkmale vom SpeechAnalyser and den
AnimationGenerator dient der Datenbehälter SpeechFeatures (siehe Abb. 8).
Dieser enthält die Länge des Signals, die F0-Kurve und ihre Extremstellen,
sowie die Leistungskurve des Signals.
Abbildung 8: Funktion des Datenbehälters SpeechFeatures
Die Animationsbefehle werden im XML-Format als Meta Animation Language-Datei (abgekürzt MALX ) gespeichert. Dieses Format ist im Rahmen
dieser Arbeit entstanden und wird in diesem Kapitel an späterer Stelle ge19
nauer beschrieben.
Abbildung 9: Funktion der Meta-Animation-Language
Im letzten Schritt erzeugt das Exporter Modul aus der MALX -Beschreibung
eine, auf die jeweilige Animations-Engine zugeschnittene, Datei mit Animationsbefehlen. Der PluginManager steuert verschiedene Plugins für die
jeweilige konkrete Anwendung. Im Rahmen dieser Arbeit ist dies die Phenome-Engine.
Abbildung 10: PluginManager und Export-Plugins
Theoretisch wäre es ebenso möglich, dass eine Animations-Engine das
MALX -Format direkt einliest und umsetzt.
4.5
Aufbau des SpeechAnalyser
Der SpeechAnalyser analysiert eine Audiodatei hinsichtlich der Länge, der
Grundfrequenz und der Leistung des enthaltenen Sprachsignals.
Bevor die Parameter an den AnimationGenerator weitergeleitet werden, sind
zudem noch einige Vorverarbeitungsschritte notwendig (vgl. dazu [15]).
4.5.1
F0-Kurve
Die F0-Kurve wird zunächst mit Hilfe des RAPT-Algorithmus aus dem
Sprachsignal extrahiert. Da die Stimmbänder bei der Erzeugung stimmloser Laute wie „p“ oder „f“ nicht schwingen, wird bei diesen keine Tonhöhe
wahrgenommen. Der Wert der F0-Kurve ist an diesen Stellen Null und die
Kurve damit insgesamt sehr unregelmäßig.
Um dem entgegen zu wirken, wird die Kurve, nach dem Ansatz von Albrecht
et al., in drei Schritten für die weitere Verwendung vorbereitet: Zunächst
20
wird die extrahierte Kurve (diskret) abgeleitet. Im zweiten Schritt werden
alle Nullstellen der Kurve entfernt und die verbleibenden Werte mit einem
B-Spline approximiert. Die entstehende Kurve wird anschließend ebenfalls
abgeleitet.
Die so angenäherte Kurve hat nun keine Nullstellen mehr, durch die Approximation werden aber die eigentlichen Werte der Kurve verfälscht. Im dritten
Schritt wird zu jedem der in der angenäherten Kurve gefunden Extremum
das nächste Extremum in der ursprünglichen Kurve (bezüglich der Zeit) gesucht. Diese aus der ursprünglichen Kurve herausgesuchten Extrema bilden
die finalen Extremstellen, aus denen Animationen erzeugt werden.
4.5.2
Signalleistung
Die Kurve, die die Leistung des Signals beschreibt, wird ebenfalls vorverarbeitet. Sie wird zunächst mit einem B-Spline approximiert. Dieser wird
anschließend abgeleitet. Die Maxima des Splines werden mit einem zweiten
Spline angenähert und die daraus resultierende Kurve auf das Interval [0..1]
normiert.
Diese Kurve gibt die relative Lautstärke des Signals wieder (vgl. [15]).
4.5.3
Phoneme
Die Phoneme des Sprachsignals werden entweder von Hand oder mit einem
externen Programm erstellt, um die aufwendige Implementierung einer automatischen Phonemesegmentierung zu vermeiden. Der SpeechAnalyser liest
diese Phoneme dann aus einer XML-Datei ein.
4.6
Aufbau des AnimationGenerator
Das Modul AnimationGenerator erhält die in den SpeechFeatures gesammelten Merkmale des Sprachsignals und erzeugt daraus verschiedene Animationen. Diese Animationen umfassen:
• Augenbrauen- und Kopfbewegungen anhand der Grundfrequenz
• Blinzeln und Blickänderung bei Pausen
• Skalierung der Animationen anhand der relativen Lautstärke des Signals
Sie werden in insgesamt fünf Schritten erzeugt:
21
4.6.1
Markierung von Pausen
Der AnimationGenerator sucht zunächst nach Sprechpausen im Sprachsignal. Da das System keine Spracherkennung beherrscht, können nur Sprechpausen gefunden werden, in denen tatsächlich nichts gesprochen werden Pausen, die mit einem „Äh“ gefüllt sind, können mit dieser Einschränkung
nicht erkannt werden.
Für die Pausenerkennung stellt das System zwei Methoden zur Verfügung.
Die erste ist phonembasiert und sucht nach Pausen zwischen den Phonemen bzw. den einzelnen Wörtern des Satzes. Liegt eine Pause oberhalb eines
Schwellwertes, so wird sie markiert und gespeichert.
Die zweite Methode basiert auf der Leistungskurve des Signals und führt
einen zusätzlichen Schwellwert für den maximalen Ausschlag, den die Leistungskurve innerhalb einer Pause haben darf, ein. Diese zweite Methode
kommt zum Einsatz, wenn für eine Sprachdatei keine Phoneme vorhanden
sind.
4.6.2
Augenbrauen
Die Bewegungen der Augenbrauen werden aus den Extremstellen der F0Kurve erzeugt. Dazu iteriert der AnimationGenerator über alle Extremstellen.
Findet er dabei ein Maximum, bei dem die Differenz zwischen dem eigenen
Wert und dem Wert des vorangegangen, sowie die Differenz zum nachfolgenden Minimum einen bestimmten Schwellwert überschreitet, so wird eine
neue Augenbrauenanimation erzeugt; die Augenbrauen werden angehoben.
Die Startzeit der Animation entspricht dem Zeitwert des Maximums, die Intensität ergibt sich aus seiner normalisierten Amplitude.
Trifft der AnimationGenerator auf ein Minimum, so wird die Differenz zum
Wert des vorangegangenen und dem des nachfolgenden Maximum errechnet.
Liegt diese über dem Schwellwert, so wird ein begonnene Augenbrauenanimation abgeschlossen, die Augenbrauen bewegen sich wieder in die Neutralstellung zurück.
Während einer Sprechpause werden keine Animationen generiert. Eine bereits begonnene Augenbrauenbewegungen wird vor einer Pause beendet.
Der Schwellwert ist dabei vom Sprachsignal bzw. dem Sprecher abhängig.
Das Programm erlaubt daher die Anpassung des Schwellwertes durch den
Nutzer.
4.6.3
Kopfbewegungen
Die Kopfbewegungen werden ebenfalls aus den Extremstellen der F0-Kurve
erzeugt. Das Vorgehen folgt der Erzeugung der Augenbrauenanimationen:
Der AnimationGenerator iteriert über alle Extremstellen.
22
Für ein Maximum wird die Differenz zum vorangegangenen und nachfolgenden Minimum bestimmt. Liegt diese über einem Schwellwert, so wird der
Kopf nach oben rotiert. Die Stärke der Rotation ergibt sich ebenfalls aus der
normalisierten Amplitude. Um Monotonie der Bewegung zu vermeiden, wird
der Kopf zusätzlich anhand von Zufallswerten gedreht und zur Seite geneigt.
Der Kopf bewegt sich wieder in die neutrale Position zurück, wenn der AnimationGenerator ein Minimum findet, dass das Schwellwertkriterium erfüllt.
Auch Kopfbewegungen werden nicht in Sprechpausen erzeugt, begonnene Bewegungen werden vor der Pause beendet.
Der Schwellwert für Kopfbewegungen kann, wie der Schwellwert für die
Augenbrauen, vom Nutzer angepasst werden.Es handelt sich bei diesen beiden Schwellwerten um zwei voneinander unabhängige Werte.
4.6.4
Animationen in Pausen
Zu jeder der markierten Pausen wird eine Animation erzeugt. Diese verändert den Blick des Charakters. Das System wählt dabei zufällig aus, ob der
Charakter nach oben, in die Ferne oder zum Boden schaut. Schaut der Charakter in die Ferne, bleibt das Gesicht ausdruckslos. Beim Blick nach oben
heben sich auch die Augenbrauen (siehe [15]). Der Blick zum Boden wird
durch Senken der Augenbrauen unterstrichen.
Zusätzlich wird nach Albrecht et al. zu Beginn der Pause ein Blinzeln erzeugt.
4.6.5
Phoneme
Phoneme und Wörter werden unverändert in das MALX -Format übernommen. Die letztendliche Animation der Lippen anhand dieser Phoneme erfolgt
durch die Animations-Engine.
Innerhalb von SpeechToAnimation werden die Phoneme verwendet, um die
erzeugten Animationen genau mit den einzelnen Lauten des Sprachsignals zu
synchronisieren. Dazu werden die Animationen so angepasst, dass sie immer
mit dem zeitlich nächsten Phonem beginnen.
4.6.6
Skalierung
Alle erzeugten Animationen werden anhand der relativen Lautstärke skaliert.
Ausgenommen von dieser Skalierung sind alle Animationen, die für Pausen
erzeugt wurden.
4.7
Meta Animation Language
Der Meta Animation Language kommt die Aufgabe eines Zwischenformats
zu. Das Format basiert auf XML und enthält Knoten für die verschiedenen
Animationen. In diesen sind Parameter wie Startzeit und Ende gespeichert.
23
Der Umfang der Parameter ist bewusst gering gehalten; die eigentliche Implementierung und Ausführung der Animationen in der Engine ist nicht vorgegeben und bleibt den jeweiligen Programmierern überlassen.
Die Dateiendung des Formats ist „.malx“.
MALX umfasst folgende Animationen:
• Einen Grund- oder Basisausdruck, der während der gesamten Sequenz auf dem Gesicht liegt. Parameter sind eine ID, die den Ausdruck
festlegt und die Intensität des Ausdrucks
• Phoneme, die zur Erzeugung der Mundbewegungen im Zielsystem
genutzt werden. Die Phoneme werden einzeln für jedes Wort der Sequenz gespeichert. Jedes Wort besitzt eines oder mehrere Phoneme,
jedes Phonem besitzt eine ID für die Art des Phonems, eine Start- und
eine Endzeit sowie einen Intensitätsparameter
• Augenbrauenbewegungen mit den Parametern Start- und Endzeit
sowie Intensitätsparametern für die linke und die rechte Augenbraue
• Kopfbewegungen, ebenfalls mit Start- und Endzeit sowie drei Parametern für den Roll-, Nick- und Gierwinkel (im Englischen Yaw-PitchRoll )
• Änderungen des Blicks, die ab einem bestimmten Zeitpunkt eintreten.
Dazu besitzt die Animation einen einzelnen Zeitparameter und einen
Parameter, der den Fokus des Blicks festlegt. Der virtuelle Charakter
kann auf den Betrachter, in die Ferne, auf den Boden oder nach oben
schauen
• Öffnen und Schließen der Augen: dieses Element besitzt eine Startund eine Endzeit sowie zwei Parameter, die bestimmen wie weit das
linke bzw. das rechte Auge geschlossen ist
Zusätzlich werden in der Datei der Name der Sequenz, der gesprochene
Satz und Länge und Name der Audiodatei gespeichert.
Wurzelknoten des Formats ist der Knoten „Sequence“, der die genannten allgemeinen Parameter enthält. „Sequence“ besitzt als Kind den Knoten
„Face“, der als Wurzel der Gesichtsanimationen dient. „Face“ besitzt die drei
Kinder „BasicExpression“, „Mouth“ und „Mimic“. „BasicExpression“ speichert
den bereits erwähnten Grundausdruck mit seinen Parametern.
„Mouth“ speichert (als Kinder) alle Wörter und Phoneme der Sequenz mit
den beschriebenen Parametern. Die Kindknoten von „Mimic“ sind alle restlichen Gesichtsanimationen. Abbildung 11) zeigt eine Übersicht des Formats
und seiner Komponenten.
24
Die Knoten „BasicExpression“ und „Expression“ werden in dieser Arbeit
nicht genutzt, sollen aber weitere Verwendung und die Erweiterung des Formats ermöglichen.
Abbildung 11: Aufbau der Meta Animation Language. Die als blaue Kästen dargestellten Knoten dürfen beliebig oft vorhanden sein, alle anderen
sind nur einmal pro Sequenz erlaubt enthalten.
4.8
PluginManager und Export-Plugins
Die einzelnen Exporter, die MALX in verschiedene andere Format konvertieren, sollen so organisiert sein, dass sie von den jeweiligen Nutzern des
Systems geschrieben und in das System eingebunden werden können.
Die Exporter sind daher als Plugins organisiert, die vom PluginManager
verwaltet werden. Für die einzelnen Export-Plugins sind lediglich zwei Bedingungen vorgegeben:
1. Das Plugin ist eine ausführbare Datei
2. Es nimmt zwei Parameter entgegen: den Namen der MALX -Datei, die
exportiert werden soll und den Namen, unter dem die exportierte Datei
gespeichert werden soll
25
5
Implementierung
5.1
Verwendete Bibliotheken
Zur Analyse des Sprachsignals wird in dieser Arbeit das „Snack Sound Toolkit“ verwendet, das auch im System von Albrecht et al. zum Einsatz kommt.
Snack ermöglicht die Analyse von Audiodateien in verschiedenen Formaten
(u.a. MP3 und WAV) hinsichtlich der Grundfrequenz und Signalleistung.
Snack basiert ursprünglich auf der Skriptsprache TCL [2], es ist aber auch
eine Python-Version mit etwas geringerem Umfang verfügbar. In dieser Arbeit wird die TCL-Version von Snack eingesetzt.
Weitere verwendete Bibliotheken sind das GUI-Framework Qt [7], die XMLBibliothek tinyxml [3], sowie interp [5] zur Splineannäherung und -interpolation.
5.2
5.2.1
SpeechAnalyser
Zusammenfassung der Aufgaben
Wie bereits im vorangegangenen Kapitel beschrieben, kommen dem SpeechAnalyser folgende Aufgaben zu:
1. Analyse und Vorverarbeitung der Grundfrequenz
• Repräsentation der Audiodatei
• Aufruf von TCL-Skripten um SNACK verwenden zu können
• Repräsentation von Kurven, Ableitung der Kurven sowie ihre Annäherung mit einem Spline
• Repräsentation und Vergleich der Extremstellen
• Auswahl der finalen Extremstellen
2. Analyse und Vorverarbeitung der Signalleistung
• Interpolation der Extremstellen einer Kurve mit einem Spline
• Normierung einer Kurve
3. Einlesen der Phonem-Datei
• Einlesen der Datei
• Interne Darstellung der Phoneme
Um den Umfang der Klasse SpeechAnalyser zu reduzieren, werden die
Kommunikation mit SNACK sowie das Einlesen der Phoneme in zusätzliche
Klassen ausgelagert. Außerdem werden für die Repräsentation von Audiodatei, Kurven, Extrema und Phonemen Hilfsklassen angelegt.
26
5.2.2
Hilfsklassen
SpeechFile SpeechToAnimation repräsentiert Audiodateien als einfache
C++-Klassen mit zwei Variablen: jeweils einem std::string für den absoluten Dateinamen der Audiodateien und einem weiteren für den absoluten
Dateinamen der Phonemdatei.
Curve und CurveExtrema Die einzelnen Werte bzw. die Extremstellen einer Kurve werden als C++-struct CurveValue bzw. CurveExtremum
repräsentiert (Abb. 12).
Abbildung 12: Klassendiagramme zu CurveValue und CurveExtremum
Beide enthalten jeweils einen float-Wert für den Wert der x-Achse bzw.
den Zeitwert des Elements (die Zeitwerte haben einen Abstand von 10 ms)
und den Wert auf der y-Achse. CurveExtremum besitzt zusätzlich die Variable type, die den Typ des Extremums - Minimum oder Maximum - angibt.
Die Klassen Curve und CurveExtrema sind beide nach dem gleichen Schema aufgebaut. Sie basieren auf einem std::vector, der Elemente des Typs
CurveValue bzw. CurveExtremum besitzt. Zusätzlich besitzen beide Klassen
Methoden zum Zugriff auf die Elemente (direkt und über Iteratoren), zum
Hinzufügen und Entfernen, sowie zum Abrufen des kleinsten bzw. größten
Wertes.
Wichtig für die Klasse Curve ist außerdem die Methode normalise(), mit
der die Kurvenwerte auf das Interval [0..1] normiert werden.
CurveExtrema gibt über getMaxima() bzw. getMinima() die Maxima bzw.
Minima unter den Extremstellen zurück.
Die Methode applyThreshold(float threshold) wendet das bereits beschriebene Schwellwertkritierum auf die Extremstellen an: es werden nur Maxima zurückgegeben, bei denen die Differenz zum Wert des vorangegangenen
und des nachfolgenden Extremums unterhalb des Schwellwerts threshold
liegt; für alle Minima wird die Differenz zum vorangegangenen und nachfolgenden Maximum berechnet.
27
Abbildung 13: Klassendiagramme zu Curve und CurveExtrema
SNACKInterface Die Klasse SNACKInterface übernimmt die Kommunikation mit dem SNACK Toolkit. Diese beschränkt sich auf drei Aufgaben:
den Namen der Audiodatei an SNACK zu übergeben, die Funktionen zur
Analyse des Sprachsignals aufzurufen und die Ergebnisse der Analyse an
den SpeechAnalyser zu übergeben.
Um zwischen der Verwendung des SNACK Toolkits und der eigentlichen Verwendung von TCL zu abstrahieren, werden alle Befehle, die direkt
den TCL-Interpreter betreffen, in die Klasse TCLInterpreter ausgelagert.
TCL stellt eine eigene C++-Bibliothek zur Verfügung, mit der es möglich
ist, den TCL-Skripte direkt aus einem C++-Programm heraus zu starten.
Der TCLInterpreter nutzt diese Bibliothek und kann so über die Methode
executeFile() TCL-Skripte ausführen.
Abbildung 14: Klassendiagramme zu SNACKInterface und TCLInterpreter
Das SNACKInterface besitzt eine Instanz des TCLInterpreters und die
Methode extractFeatures(const std::string &signalFilename, float &length,
std::vector<float*> &pitch, std::vector<float*> &logPower).
signalFilename enthält den Namen der Audiodatei, über die Referenzen
length, pitch, und logPower werden die Ergebnisse der Analyse zurückgegeben.
28
Die Methode ruft das TCL-Skript „extract_features.tcl“ auf, das die
SNACK-Funktionen zur Analyse der Signallänge, der Grundfrequenz und
der Signalleistung startet.
Die Übergabe der Ein- und Ausgabeparameter an das Skript erfolgt über
einfache Textdateien. Die Textdatei mit dem Eingabeparameter liegt im gleichen Verzeichnis wie das Skript und enthält den vollständigen Dateinamen
(inklusive Dateipfad) der Audiodatei, die analysiert werden soll. Die Ausgabe der Analysen wird vom Skript in einer zweiten Datei mit der Endung
„.features“ gespeichert.
Diese Datei wird, nachdem das TCL-Skript ausgeführt wurde, innerhalb
der Methode extractFeatures() eingelesen. Der Ergebnisse werden an den
SpeechAnalyser zurückgegeben
Phonemes Die Klasse Phonemes ist im Wesentlichen wie die Klassen Curve und CurveExtrema aufgebaut. Sie besitzt einen std::vector, der Elemente
vom Type Phoneme enthält. Diese besitzen jeweils eine Start- und Endzeit,
sowie die ID des Phonemes (z. B. „ah“).
Weitere Variablen von Phonemes sind der std::string mSentence, der den
vollständigen Satz enthält, zu dem die Phoneme gehören. Um die Phoneme
zusätzlich auch den einzelnen Wörtern zuordnen zu können, besitzt die Klasse zusätzlich den std::vector mWords mit Elementen vom Type Word. Diese
Elemente enthalten ein einzelnes Wort als std::string sowie die Phoneme dieses Wortes.
Abbildung 15: Klassendiagramme zu Phonemes, Word und Phoneme
PhonemeAnalyser Dem PhonemeAnalyser kommt derzeit nur die Aufgabe zu, die Phoneme aus einer Klartext- oder XML-Datei einzulesen und
29
daraus eine Instanz der Klasse Phonemes zu erstellen.
SpeechFeatures Die Klasse SpeechFeatures dient als reiner Datenbehälter
um die Merkmale des Sprachsignals vom SpeechAnalyser an den AnimationGenerator zu übergeben.
Sie enthält die Länge des Sprachsignals in Sekunden, den Namen der Audiodatei, die Tonhöhe, deren Annäherung und die Extrema. Außerdem werden die Signalleistung, die normalisierte Lautstärke und die Phoneme in der
Klasse gespeichert.
Abbildung 16: Klassendiagramm zu SpeechFeatures
5.2.3
Die Klasse SpeechAnalyser
Die Klasse setzt sich aus folgenden Variablen und Methoden zusammen (siehe Abb. 17):
Abbildung 17: Klassendiagramm zu SpeechAnalyser
30
Variablen Der SpeechAnalyser besitzt als Variablen jeweils eine Instanz
des PhonemeAnalyser und des SnackInterface. Diese Instanzen sind, wie bereits beschrieben, für das Laden der Phoneme bzw. die Analyse der Sprachmerkmale verantwortlich.
Methoden
void approxWithSpline(const Curve &curve, Curve &approxCurve)
Diese Methode dient zur Annäherung einer Kurve mit einem Spline. Die
Ursprungskurve ist in der Variable curve gespeichert, das Ergebnis wird über
die Referenz approxCurve zurückgegeben.
void extractExtrema(const Curve &curve, CurveExtrema &curveExtrema)
extractExtrema leitet die Kurve curve ab und gibt die Ergebnisse über
curveExtrema zurück.
void compareExtrema(const CurveExtrema &origExtrema,
const CurveExtrema &approxExtrema, CurveExtrema &finalExtrema)
compareExtrema vergleicht die Extrema der ursprünglichen Kurve (origExtrema)
mit denen der approximierten Kurve (approxExtrema) nach dem Prinzip aus
[15]: Für jedes Extremum in approxExtrema sucht die Methode das Extremum in origExtrema mit dem geringsten Zeitabstand. Dieses wird dann in
finalExtrema gespeichert. Nur diese finalen Extrema werden zur Animationserstellung verwendet.
void interpolateMaxima(const CurveExtrema &curveExtrema,
Curve &interpolatedCurve, unsigned int curveSize)
Interpoliert die Maxima einer Kurve mit einem Spline. Die resultierende
Kurve hat die Länge curveSize.
bool extractSpeechFeatures(const SpeechFile &speechFile, SpeechFeatures &speechFeatur
Diese Methode ist das Herzstück des SpeechAnalysers. Der Vorgang innerhalb der Methode lässt sich in vier Schritte aufteilen.
1. Extrahiere die Merkmale des Signals mit Hilfe des SNACKInterfaces;
lade die zugehörigen Phoneme mit Hilfe des PhonemeAnalysers
31
2. Nähere die Tonhöhe mit einem Spline an und leite beide Kurven ab.
Vergleiche die Extrema beider Kurven miteinander und wähle die finalen Extrema aus
3. Nähere die Signalleistungs-Kurve mit einem Spline an, leite diesen ab
und interpoliere die Maxima mit einem zweiten Spline. Normalisiere
diesen zweiten Spline um die normalisierte Lautstärke zu erhalten
4. Speichere alle Merkmale in der Referenz speechFeatures
Die in SpeechFeatures gespeicherten Merkmalen umfassen neben den, für
die Animationen verwendeten, Extremstellen der Tonhöhe und der normalisierten Lautstärke auch die ursprüngliche Tonhöhe und ihre angenäherte
Variante, sowie die ursprüngliche Leistungskurve des Signals. Diese dienen
aber nur zur Visualisierung in der GUI.
5.3
5.3.1
Meta Animation Language
Zusammenfassung der Aufgaben
Die Meta Animation Language dient zur Repräsentation der Gesichtsanimationen in einem möglichst programmunabhängigen Format.
MALX umfasst folgende Animationen:
• Heben und Senken der Augenbrauen
• Rotation des Kopfes
• Änderungen des Blicks
• Öffnen und Schließen der Augen
• Einen Basisausdruck für eine Sequenz
• Beliebige andere Gesichtsausdrücke (sofern sie im Zielsystem zur Verfügung stehen)
Die beiden letzten Punkte (Basisausdruck und beliebige andere Gesichtsausdrücke) finden in dieser Arbeit noch keine Verwendung.
Zusätzlich zu den Animationen speichert MALX auch die Wörter und Phoneme der Sprachsequenz. Aus diesen können dann im Zielsystem entsprechende Viseme erstellt werden.
Die Aufgaben können also wie folgt zusammengefasst werden:
1. Repräsentation der Metasprache innerhalb des Programms
2. Schreiben und Speichern von MALX
32
5.3.2
Klassenübersicht
Um MALX innerhalb von SpeechToAnimation zu repräsentieren, wird für
jeden Knotentyp innerhalb der XML-Struktur eine eigene Klasse erstellt.
Die vollständige MALX -Sequenz bzw. Datei wird durch die Klasse MALXSequence dargestellt. Diese enthält die Klasse MALXFace. Diese wiederum
enthält MALXMimic und MALXMouth, die die einzelnen Animationen bzw.
die Phoneme zur Sprachsequenz enthalten (siehe 18).
Abbildung 18: Übersicht aller MALX -Klassen
Die Klassen für die einzelnen Gesichtsanimationen sind von der abstrakten Klasse MALXMimicTag abgeleitet.
5.3.3
Die Klasse MALXWriter
Der Klasse MALXWriter kommt die Aufgabe zu, aus einer Instanz von
MALXSequence eine MALX-Datei zu erstellen. MALXWriter geht dabei
nach dem Visitor -Pattern vor: alle Klassen, die Knotentypen von MALX repräsentieren, besitzen die Methode accept(MALXWriter &writer); MALXWriter selbst besitzt eine visit(...)-Methode für jede der Klassen. Beginnend bei MALXSequence durchwandert MALXWriter so rekursiv die gesamte Struktur mit allen weiteren Klassen und erstellt mit Hilfe von tinyxml
daraus eine MALX -Datei.
33
Abbildung 19: Klassendiagramm zu MALXWriter
5.4
5.4.1
AnimationGenerator
Zusammenfassung der Aufgaben
Der AnimationGenerator erstellt aus den extrahierten Merkmalen des Sprachsignals eine vollständige MALX -Sequenz mit passenden Gesichtsanimationen.
Die Aufgaben des Generators gliedern sich wie folgt:
1. Erzeugung von Animationen für die Augenbrauen
2. Erzeugung von Kopfbewegungen bzw -rotationen
3. Erkennung von Pausen und Erstellung passender Animationen innerhalb dieser Pausen
4. Synchronisierung der Animationen und Phoneme
5. Skalierung aller Animationen anhand der relativen Lautstärke
Um eine flexiblere Nutzung zu ermöglichen, lassen sich die einzelnen
Funktionen von Nutzer an- und abschalten. So können etwa nur Augenbrauenund Kopfbewegungen für eine Sequenz erstellt werden.
5.4.2
Die Klasse AnimationGenerator
Der AnimationGenerator nutzt die Hilfsklassen des SpeechAnalyser, sowie
alle MALX -Klassen.
Variablen Der AnimationGenerator besitzt eine Instanz der C+-Struct+
AnimationGeneratorSettings (Abb. 20). Diese enthält die vier Schwellwerte
für die Animationserzeugung, sowie vier bool-Werte, über die sich verschiedene Funktionen des Generators an- und abschalten lassen. So kann jeweils
die Erzeugung von Augenbrauenanimationen, Kopfbewegungen, Pausenanimationen, sowie die Erzeugung von Augenbrauenbewegungen innerhalb einer
Pausenanimation aktiviert oder deaktiviert werden.
34
Abbildung 20: Klassendiagramme des AnimationGenerators und der AnimationGeneratorSettings
Methoden
void findPauses(const SpeechFeatures &features, SpeechPauses &pauses)
Diese Methode hat die Aufgabe, alle Pausen innerhalb des Sprachsignals
zu finden. Dabei muss die Länge der Pause überhalb eines vom Nutzer festgelegten Schwellwertes liegen.
Sind für das Sprachsignal Phoneme vorhanden (dies sollte der Regelfall sein),
so erfolgt die Pausenerkennung anhand der Phoneme. Dazu werden die Endzeit eines Phonemes und Startzeit seines Nachfolgers miteinander verglichen.
Innerhalb eines Wortes oder einer direkten Wortfolge sind diese beiden identisch. Bei einem Zeitabstand liegt eine Pause vor.
Liegt die Länge der Pause oberhalb des Schwellwertes, so wird diese Pause innerhalb der Klasse SpeechPauses abgelegt. Bei SpeechPauses handelt
es sich um einen std::vector, der std::pair-Elemente mit jeweils zwei floatWerten enthält. Diese float-Werte enthalten den Beginn und das Ende der
Pause in Sekunden.
Sind keine Phoneme vorhanden, so stützt sich die Pausenerkennung auf
die Kurve der Signalleistung. Da diese mit der Lautstärke korreliert, ist ihr
Ausschlag an Stellen, an denen nicht gesprochen wird, geringer - vorausgesetzt die Audiodatei enthält keine starken Hintergrundgeräusche.
Ein zusätzlicher zweiter Schwellwert definiert dabei die Grenze, ab der die
Signalleistung auf Pausen hinweist. Liegt der Wert der Signalleistung für eine
Zeitdauer überhalb des ersten Schwellwertes (für die Pausenlänge) unterhalb
35
des zusätzlichen Schwellwertes, so wird dieses Segment als Pause gespeichert.
bool generateEyebrows(const SpeechFeatures &speechFeatures,
MALXSequence &sequence)
Innerhalb dieser Methode werden die Bewegungen der Augenbrauen erzeugt. Die Methode geht wie folgt vor:
Zunächst wird auf die Extrema der Grundfrequenz der Schwellwert für die
Augenbrauen angewendet. Es werden nur die Extrema für die Animationen
verwendet, bei denen die Differenzen zum Wert des vorangegangenen und
zum Wert des nachfolgenden Extremums überhalb des Schwellwertes liegen.
Danach iteriert eine Schleife über alle ausgewählten Extrema. Bei einem Maximum wird zunächst überprüft, ob bereits eine Animation begonnen wurde
und ob das Maximum innerhalb einer Sprechpause liegt. In diesen Fällen
wird keine Animation erstellt.
Andernfalls wird eine neue Animation begonnen. Die Startzeit der Animation
entspricht dem Zeitpunkt des Extremums, die Intensität der Augenbrauenbewegung ergibt sich aus
Wert des aktuellen Extremums / Maximaler Wert aller Extrema. Anschließend wird das nächste Minimum gesucht. Das Ende der Animation
entspricht dem Zeitpunkt dieses Minimums. Ein Sonderfall tritt ein, wenn
sich innerhalb der Animation eine Sprechpause befindet. In diesem Fall wird
die Animation schon bei Beginn der Pause beendet.
bool generateHeadMovement(const SpeechFeatures &speechFeatures,
MALXSequence &sequence)
Die Erzeugung der Kopfbewegungen verläuft analog zur Erzeugung der
Augenbrauenbewegungen in der vorangegangenen Methode.
Auf die Extrema der Grundfrequenz wird der Schwellwert für die Kopfbewegung angewendet. Danach iteriert die Methode über alle verbleibenden Extrema. Liegt ein Maximum nicht innerhalb einer Pause und ist nicht schon
ein Animation begonnen, so wird für diesen Zeitpunkt eine neue Kopfbewegung erzeugt. Die Stärke, mit der sich der Kopf nach oben bewegt, errechnet
sich dabei ebenfalls aus
Wert des aktuellen Extremums / Maximaler Wert aller Extrema.
Um Monotonie der Bewegungen zu vermeiden, wird der Kopf über die Methode randomHeadRotation zusätzlich zufällig zur Seite gedreht und geneigt.
Die Animation endet am nächsten Minimum oder, wenn sich eine Pause innerhalb der Animation befindet, am Beginn dieser Pause.
36
void randomHeadRotation(MALXMoveHead *headAnimation)
Diese Methode dient als Hilfe für die vorangegangene Methode und erzeugt zusätzlich zu der Nick-Bewegung des Kopfes (im Englischen pitch)
(also dem Anheben oder Senken) zufällige Rotations- und Neigungswerte
(yaw und roll ). Dadurch wird eine Monotonie der Kopfbewegungen vermieden.
bool generatePauseAnimations(MALXSequence &sequence)
Erzeugt Animationen innerhalb von Pausen nach der Vorgehensweise aus
[15]. Dazu iteriert eine Schleife über alle gefundenen Sprechpausen. Zu Beginn jeder Pause wird ein Blinzeln generiert, Es folgt eine Änderung des
Blicks. Dabei wird zufällig entschieden, ob der Charakter in die Ferne, zur
Decke oder zum Boden blickt.
Blickt der Charakter zum Boden, werden zusätzlich die Augenbrauen zusammengezogen bzw. nach unten bewegt, um den Eindruck eines Stirnrunzelns
zu vermitteln. Beim Blick zur Decke bewegen sich auch die Augenbrauen
nach oben um das Blickfeld freizugeben.
Die zusätzlichen Augenbrauenanimationen können auch vom Nutzer abgeschaltet werden, für den Fall, dass das Zielsystem selbstständig solche Pausenanimationen erzeugt und nur die Blickänderung als Markierung für die
Pause benötigt.
bool scaleAnimations(const SpeechFeatures &speechFeatures,
MALXSequence &sequence)
In dieser Methode werden alle Animationen (mit Ausnahme von Pausenanimationen) anhand der relativen Lautstärke skaliert. Die Intensität einer
Animation wird mit der relativen Lautstärke an der Startzeit der Animation
multipliziert.
bool copyPhonemes(const Phonemes &phonemes, MALXSequence &sequence)
Diese Methode überträgt die Phoneme und Wörter des Sprachsignals in
die MALX -Sequenz.
37
bool alignToPhonemes(const Phonemes &phonemes,
MALXSequence &sequence)
Die einzelnen Animationen werden in dieser Methode mit den Phonemen
synchronisiert. Dazu wird für jede Animation das Phonem mit dem geringsten zeitlichen Abstand zwischen den Startzeiten gesucht. Ist dieses gefunden,
wird die Startzeit der Animation mit der des Phonems gleichgesetzt.
bool generateFacialAnimations(const SpeechFeatures &speechFeatures,
MALXSequence &sequence)
Die Hauptmethode des AnimationGenerator. Sie nimmt die vom SpeechAnalyser erzeugten SpeechFeatures entgegen und erzeugt daraus eine MALXSequence:
1. Schreibe allgemeine Parameter der MALX -Sequenz (Länge, Name der
Audiodatei, etc.)
2. Erzeuge Augenbrauenanimationen (generateEyebrows) (wenn aktiv)
3. Erzeuge Kopfbewegungen (generateHeadMovement) (wenn aktiv)
4. Kopiere Phoneme (generatePhonemes)
5. Erzeuge Animationen für Pausen (generatePauseAnimations) (wenn
aktiv)
6. Skaliere Animationen (scaleAnimations)
7. Synchronisiere Animationen mit den Phonemen (alignToPhonemes)
8. Sortiere die Animationen nach ihrer Startzeit
5.5
5.5.1
PluginManager
Zusammenfassung der Aufgaben
Der PluginManager dient zur Verwaltung und Ausführung der Export-Plugins,
die MALX in verschiedene andere Formate übertragen. Diese einzelnen Plugins werden dabei von den Nutzern bzw. Entwicklern des Zielsystems geschrieben.
38
Abbildung 21: Klassendiagramm des PluginManagers
5.5.2
Aufbau der Klasse und Einbindung der Plugins
Den Aufbau der Klasse verdeutlicht Abbildung 21.
Für Implementierung der Plugins gibt es keine Vorgaben, es müssen lediglich zwei Anforderungen erfüllt werden:
1. Das Plugin ist eine ausführbare Datei (z.B. EXE unter Windows)
2. Das Plugin besitzt zwei Eingabeparameter: den Namen der MALX Datei, die umgewandelt werden soll sowie den Namen der Zieldatei
Alle Plugins werden in die Datei „ExportPlugins.xml“ eingetragen. Diese
besitzt folgende Struktur:
<ExportPlugins>
<Exporter name="BeispielExporter" filename="BeispielExporter.exe" />
...
</ExportPlugins>
Die Methode initialise() lädt und verarbeitet diese Datei. Nach ihrem
Aufruf kann in diesem Beispiel nun über die Methode
exportMALX(string &exporterName, string &malxFilename, string &outFilename)
der „BeispielExporter“ gestartet werden.
5.6
GUI
SpeechToAnimation besitzt eine einfache, auf der Bibliothek Qt basierend,
grafische Benutzeroberfläche. Über diese können Audio- und Phonemdateien
in das System geladen und die Animationserstellung gestartet werden. Die
zur Animation verwendeten Eigenschaften werden in der GUI als Kurven
dargestellt, außerdem werden die erzeugten Animationen visualisiert.
Zudem erlaubt die Oberfläche Ein- und Ausschalten der verschiedenen Animationen, sowie Auswahl und Start der Export-Plugins.
39
Abbildung 22: Die grafische Oberfläche von SpeechToAnimation
40
6
Bewertung
Zur Bewertung von SpeechToAnimation erfolgt zunächst ein Vergleich mit
dem System von Albrecht et al.. Danach werden die Animationen zu zwei
Sätzen aus dem Spiel „Eighty Days“ [1] von takomat vorgestellt.
6.1
6.1.1
Vergleich mit dem Referenzsystem
Vorgehensweise
Zum Vergleich mit dem Referenzsystem aus [15] steht nur ein Video zur Verfügung (zu finden unter [6]). Im ersten Teil des Videos spricht ein virtueller
Charakter einen Satz, dabei bewegen sich ausschließlich die Lippen synchron
zum Gesprochenen.
Im zweiten Teil des Videos spricht der Charakter denselben Satz, diesmal
allerdings mit zusätzlichen Gesichtsanimationen, die vom System erzeugt
wurden.
Verwendet wird der etwa 28 Sekunden lange Text:
„Hello! I’m a talking head, and all my movements have been generated
fully automatically from the speech signal. What could I tell you? - Oh yes,
I’m a source of wisdom and I’ll let you share my knowledge:
How happy is the little stone,
that rambles in the road alone,
and never cares about careers,
and exigencies never fears.
I CAN ALSO SHOUT! Could you hear me?“
Zum Vergleich der Systeme wird der zweite Teil des Videos herausgeschnitten und daraus ein neues Video erstellt. Auf einer Zeitleiste werden
Start und Ende der einzelnen Animationen eingetragen. Dabei beschränkt
sich der Vergleich auf Augenbrauen- und Kopfbewegungen, sowie die Pausen. Das Raster der Zeitleiste besitzt Abstände von einer halben Sekunde.
Genauer können die Zeiten der Animationen bei der reinen Betrachtung des
Videos nicht eingetragen werden.
Aus dem Video wird zudem eine Audiodatei erstellt, zu der SpeechToAnimation Gesichtsanimationen erzeugt. Die Zeiten der so erzeugten Animationen
werden ebenfalls auf der Zeitleiste eingetragen, um beide Systeme zu vergleichen. Da die verwendeten Schwellwerte in [15] nicht genannt werden,
erzeugt SpeechToAnimation Animationen in zwei verschiedenen Konfigurationen. Diese sind:
41
1. Schwellwert für Augenbrauen: 100, Schwellwert für Kopfbewegungen:
80, Schwellwert für Pausenlänge: 0,8 Sekunden
2. Schwellwert für Augenbrauen: 70, Schwellwert für Kopfbewegungen:
60, Schwellwert für Pausenlänge: 0,8 Sekunden
6.1.2
Allgemeiner Vergleich
Der Vergleich der Zeitleisten zeigt eine überwiegende zeitliche Übereinstimmung der Animationen von Referenzsystem und SpeechToAnimation in beiden Konfigurationen. Die insgesamt genauere Übereinstimmung liefert die
zweite Konfiguration mit den etwas niedrigeren Schwellwerten. An manchen
Stellen generiert SpeechToAnimation allerdings mehrere kleine Animationen,
während das Referenzsystem nur eine längere Animation für den gesamten
Zeitraum erzeugt.
Teilweise stimmt auch die Art der Animation nicht exakt überein (statt
Augenbrauen- und Kopfbewegung wird dann etwa nur eine Kopfbewegung
generiert).
Diese Abweichungen lassen sich zum einen auf die unbekannten Schwellwerte
des Referenzsystems zurückführen. Zum anderen spielt die Genauigkeit bzw.
Ungenauigkeit der Spline-Annäherung in den Systemen eine große Rolle.
An wenigen Stellen treten bei SpeechToAnimation zudem zu ruckartige Kopfbewegungen auf. Dies geschieht an Stellen, bei denen zwei oder mehr kleine
Kopfbewegungen unmittelbar hintereinander erzeugt werden. Da die Zufallswerte für die Kopfdrehung und -neigung unabhängig voneinander generiert
werden, zuckt der Kopf des Charakters an diesen Stellen unpassend.
Die erkannten Pausen stimmen mit einer Ausnahme überein. Bei einem niedrigeren Schwellwert für die Pausenlänge (0,5 Sekunden) findet auch
SpeechToAnimation diese Pause. Dann wird allerdings auch noch eine weitere Pause markiert, die im Referenzsystem nicht auftaucht.
Da die Art der Pausenerkennung in [15] aber gänzlich ungenannt bleibt, lassen sich die Ursachen hierfür nicht weiter erforschen.
Die Skalierung der Animationen anhand der relativen Lautstärke zeigt,
sowohl im Referenzvideo, als auch in den Ergebnissen von SpeechToAnimation, nur wenige bis gar keine Auswirkungen. Der letzte Teil des verwendeten
Textes, der lauter gesprochen wird („I CAN ALSO SHOUT“), zeigt insgesamt
eine etwas höhere Signalleistung als der Rest des Sprachsignals. Die relative
Lautstärke hat damit an dieser Stelle ebenfalls etwas höhere Werte. Dieser
kleine Unterschied reicht allerdings nicht aus, um signifikante Unterschiede
zwischen den Animationen sichtbar werden zu lassen (siehe dazu Abb. 23).
42
Abbildung 23: Vergleich der Signalleistung (Kurve in Cyan) und der relativen
Lautstärke (Kurve in blau). Die obere Abbildung zeigt den etwas
lauteren Abschnitt am Ende des Textes, das untere einen Abschnitt mit normaler Lautstärke aus dem mittleren Teil
43
6.1.3
Näherer Vergleich an zwei Abschnitten
Beispiel 1 - Sekunde 1 bis 9 Dieser Abschnitt enthält den Satz „’Hello!
I’m a talking head, and all my movements have been generated fully automatically from the speech signal.“. Der Vergleich der Zeitleisten (Abb. 24)
zeigt vor allem für Konfiguration zwei eine fast exakte Übereinstimmung der
Startzeiten für die Animationen.
Die erste Augenbrauen- und Kopfbewegung bei Sekunde 1,5 (sie fällt mit
dem Wort „Hello“ zusammen) wird von beiden Systemen gleich erzeugt.
Bei Sekunde 4,5 und 5,0 erzeugt das Referenzsystem zwei Paar Animationen für die Wörter „all“ und „movements“, SpeechToAnimation eine durchgängige, die beide Wörter umfasst. Ein Blick auf die Grundfrequenz und
ihre Annäherung an dieser Stelle (Abb. 25) zeigt, dass ein Maximum und ein
Minimum etwa bei Sekunde 5 die Erfüllung der Schwellwertkriterien verhindern. Mit niedrigeren Schwellwerten oder einer geringeren Genauigkeit des
Splines werden hier ebenfalls zwei Paar Animationen erzeugt.
Abbildung 24: Zeitleiste zu Beispiel 1 (Sekunde 1 bis 9)
Die letzte Animation dieses Abschnitts wird von SpeechToAnimation mit
den Schwellwerten von Konfiguration 1 gar nicht mehr erzeugt, mit Konfiguration 2 wird eine Kopfbewegung generiert. Das Referenzsystem erstellt
hier eine Augenbrauen- und eine Kopfbewegung mit derselben Startzeit, die
allerdings etwas kürzer dauert.
44
Abbildung 25: Betonung des Teilsatzes „all my movements“: SpeechToAnimation in Konfiguration 2, Grundfrequenz (schwarze Kurve) und ihre
Annäherung (grüne Kurve). Die beiden Kästen oben zeigen die
Dauer der Kopfbewegung (grün) und der Augenbrauenanimation
(rot)
Beispiel 2 - Sekunde 12 bis 20 In diesem Abschnitt wird der Satz „Oh
yes, I’m a source of wisdom and I’ll let you share my knowledge: How happy
is the little stone, that rambles in the road alone.“ gesprochen.
Der Vergleich der Zeitleisten zeigt bei diesem Abschnitt eine geringere
Übereinstimmung der Animationen. Besonders auffällig ist zu lange Augenbrauenanimation ab Sekunde 15 bei Konfiguration 1, der gewählte Schwellwert von 100 ist hier zu hoch. Konfiguration 2 beendet diese Animation
bereits bei Sekunde 17. Das Referenzsystem erkennt allerdings bei Sekunde
16 eine Pause, die bei Sekunde 15 erzeugte Animation endet fast augenblicklich wieder.
Das Referenzsystem erzeugt in diesem Abschnitt Animationen zur Betonung
folgender Wörter: „source“ (Sekunde 13), „share“ (Sekunde 15), „happy“ (Sekunde 16) und „rambles“ (Sekunde 19).
SpeechToAnimation erzeugt in Konfiguration 2, mit Ausnahmen von „rambles“, ebenfalls Animationen an diesen Stellen, fügt aber zusätzlich noch Bewegungen bei „yesän Sekunde 12 und „let“ bei Sekunde 15,5 ein.
Konfiguration 1 fügt eine zusätzliche Betonung für „yes“ und „let“ ein, überspringt dafür aber „happy“. Zudem wird die bereits erwähnte übermäßig
lange Augenbrauenanimation erzeugt.
45
Abbildung 26: Zeitleiste zu Beispiel 2 (Sekunde 12 bis 20)
46
6.1.4
Beispielabbildungen
Die nachfolgenden Abbildungen zeigen Beispiele der automatisch erzeugten
Animationen.
Abbildung 27: Beispiel einer Kopfbewegung
c
takomat
GmbH 2010
47
Abbildung 28: Beispiel einer Kopf- und Augenbrauenanimation
c
takomat
GmbH 2010
Abbildung 29: Beispiel einer Pausenanimation.
Anmerkung: da die Phenome-Engine bei Abwenden des Blicks
die Blickrichtung zufällig bestimmt, wurden die Augenbrauenanimationen in Pausen für dieses Beispiel entfernt, um falsche Animationen zu verhindern.
c
takomat
GmbH 2010
48
6.2
Animationen zu „Enter it and I will help you to fly the
spaceship“
Für diesen Satz werden zunächst die Schwellwerte 40 für Augenbrauenanimationen und 50 für Kopfbewegungen gewählt. Schwellwert für die Pausenlänge
sind 0,8 Sekunden, der Satz enthält allerdings keine Pause.
SpeechToAnimation erzeugt mit dieser Einstellung Animationen während
der Wörter „Enter“, „help“, „fly“ und „spaceship“. „Enter“ und „fly“ werden
jeweils mit einer Augenbrauen- und Kopfbewegung unterlegt, für „fly“ und
„spaceship“ wird eine längeren Kopf- und jeweils eine Augenbrauenanimation
erzeugt.
Damit werden die Wörter, die die zentrale Aussage des Satzes enthalten, betont. Sie werden bereits vom Sprecher des Satzes hervorgehoben, besonders
bei „Enter“ und „fly“ zeigt die Grundfrequenz starke Ausschläge (vgl. Abb.
30). Durch die erzeugten Animationen werden diese Wörter auch non-verbal
hervorgehoben.
Bei diesem Beispiel lässt sich zudem die Skalierung der Animationen gut
erkennen. Aufgrund der großen Grundfrequenzausschläge bei „Enter“ und
„help“ werden hier auch größere Bewegungen generiert - die Intensitäten
betragen 0,9 und 0,75. Bei den kleineren Ausschläge am Ende des Satzes
werden werden auch kleinere Bewegungen erzeugt (Intensität beträgt etwa
0,45).
Die Skalierung anhand der Signalleistung zeigt hingegen keine sichtbaren
Auswirkung, da diese über die gesamte Zeit in etwa gleich bleibt.
Abbildung 30: Animationen für den Satz „Enter it and I will help you to fly the
spaceship“.
Schwellwerte: 40 für Augenbrauenanimationen und 50 für Kopfbewegungen. Die roten Kästen zeigen Augenbrauenanimationen,
die grünen Kopfbewegungen
49
Abbildung 31: Animationen für den Satz „Enter it and I will help you to fly the
spaceship“.
Schwellwerte: 70 für Augenbrauenanimationen und 90 für Kopfbewegungen. Die roten Kästen zeigen Augenbrauenanimationen,
die grünen Kopfbewegungen
Mit den niedrigen Schwellwerten erzeugt das System allerdings zu viele einzelne Animationen für die kurve Satzlänge von knapp zwei Sekunden.
Daher werden mit höheren Schwellwerten noch einmal Animationen für den
Satz erzeugt. Diese sind 70 für die Augenbrauen und 90 für Kopfbewegungen.
Mit dieser Einstellung werden nur noch Animationen für die stärksten Ausschläge der Tonhöhe während der Wörter „Enter“ und „help“ generiert.
50
6.3
Animationen zu „The cockpit is over there“
Für diesen Satz werden die Animationen zunächst mit folgenden Einstellungen erzeugt: 30 für Augenbrauenanimationen, 40 für Kopfbewegungen sowie
ein Schwellwert von 0,8 Sekunden für Pausen. Dieser spielt hier, wie beim
vorangegangenen Beispiel, keine Rolle, da der Satz keine Pausen enthält.
Bei diesem Beispiel werden Animationen für die Wörter „cockpit“ und
„there“ erzeugt, bei denen auch die Grundfrequenz die beiden höchsten Ausschläge aufweist (siehe Abb. 32) und die die zentrale Aussage des Satzes
tragen. Beide werden jeweils durch Anheben der Augenbrauen betont. Dazu
generiert das System eine Kopfbewegung von „Cockpit“ bis zum Ende des
Satzes.
Abbildung 32: Animationen für den Satz „The cockpit is over there“.
Schwellwerte: 30 für Augenbrauenanimationen und 40 für Kopfbewegungen. Die roten Kästen zeigen Augenbrauenanimationen,
die grünen Kopfbewegungen
Mit den höheren Schwellwerten 70 für Augenbrauenanimation und 90
für Kopfbewegungen, wird auch die Animation der Augenbrauen zu einer
durchgängigen Bewegung (Abb. 33).
51
Abbildung 33: Animationen für den Satz „The cockpit is over there“.
Schwellwerte: 70 für Augenbrauenanimationen und 90 für Kopfbewegungen. Die roten Kästen zeigen Augenbrauenanimationen,
die grünen Kopfbewegungen
52
Abbildung 34: Beispiele der Animationen zu „Enter it and I will help you to fly
the spaceship“.
Schwellwerte: 70 für Augenbrauenanimationen, 90 für Kopfbewegungen
c
takomat
GmbH 2010
53
Abbildung 35: Beispiele der Animationen zu „The cockpit is over there".
Schwellwerte: 70 für Augenbrauenanimationen, 90 für Kopfbewegungen
c
takomat
GmbH 2010
54
6.4
Zusammenfassung
Der Vergleich von SpeechToAnimation mit dem System von Albrecht et al.
zeigt Abweichungen in Bezug auf die exakten Zeiten und Arten der Animationen, die hervorgehobenen Wörter bzw. Silben stimmen aber in fast allen
Fällen überein. Ein genauerer Vergleich lässt sich, aufgrund fehlender Informationen über die verwendeten Schwellwerte des Referenzsystems, nicht
erbringen.
Die beiden Beispielsätze zeigen, dass Animationen während Wörtern erzeugt
werden, die bereits vom Sprecher besonders betont wurden. Diese tragen
die zentralen Aussagen des Satzes. Durch die zusätzliche mimische Hervorhebung vermitteln die virtuellen Charaktere somit auch eine grundlegende
non-verbale Kommunikation.
Dabei dürfen die Sequenzen allerdings nicht mit Animationen überladen werden: Sehr kleine Schwellwerte für die Animationen führen zu vielen kleinen
Bewegungen, die die Charaktere schnell unnatürlich wirken lassen. Um dem
entgegenzuwirken, müssen entweder höhere Schwellwerte oder kleinere Animationen bzw. Bewegungen verwendet werden.
Die Erkennung der Pausen stimmt in beiden Systemen ebenfalls annähernd überein, lediglich an einer Stelle kommt es zu Abweichungen. Die
erzeugten Animationen unterstreichen die Pausen im verwendeten Beispiel
sinnvoll und glaubwürdig, da der Sprecher bzw. der virtuelle Charakter hier
tatsächlich über das nächste Wort nachdenkt. Für Pausen, die aus einem
anderen Grund entstehen - etwa weil der Sprecher erschrickt -, stehen dem
System aber keine geeigneten Animationen zur Auswahl.
Die Skalierung der Animationen anhand der relativen Lautstärke zeigt
in den Beispielsätzen insgesamt nur eingeschränkte Auswirkungen. Der im
Vergleich mit dem Referenzsystem verwendete Satz enthält zwar am Ende
einen lauter gesprochenen Abschnitt, dessen Signalleistung liegt aber nur
wenig über den vorangegangenen Werten und reicht nicht aus, um die Animationen bemerkbar zu vergrößern. Die beiden anderen Beispielsätze zeigen
im Grunde gar keine Veränderungen der Signalleistung.
55
7
7.1
Zusammenfassung, Fazit und Ausblick
Zusammenfassung
In dieser Arbeit wurde ein System zur automatischen Erstellung von Gesichtsanimationen aus einem Sprachsignal konzipiert und implementiert. Dieses System, SpeechToAnimation, ist in der Lage, nur aus den prosodischen
Eigenschaften des Sprachsignals Animationen für den Kopf, die Augen, Augenbrauen und -lider eines virtuellen Charakters zu erzeugen.
Die dazu verwendeten prosodischen Eigenschaften des Signals sind die Grundfrequenz, die seine Tonhöhe beschreibt, und die Signalleistung, die mit seiner
Lautstärke korreliert. Diese prosodischen Eigenschaften beschreiben somit
nicht den Inhalt des Gesprochenen, sondern seine Aussprache und Akzentuierung.
Als Grundlage für das System wurde der Ansatz von Albrecht et al. aus
[15] ausgewählt. Nach diesem erzeugt SpeechToAnimation bei besonders markanten Anstiegen der Tonhöhe Animationen für die Augenbrauen und/oder
den Kopf. Die dafür erforderliche Stärke des Anstiegs wird über Schwellwerte
definiert.
Zudem erzeugt das System Animationen für Pausen. In diesen schaut der
virtuelle Charakter etwa zum Boden oder in die Ferne, um den Eindruck zu
vermitteln, er suche nach dem nächsten Wort.
Abschließend werden alle erzeugten Animationen anhand der relativen Lautstärke des Signals skaliert. Diese wird aus der Signalleistung bestimmt.
Zur Bewertung wurde das System im vorangegangenen Kapitel zunächst
mit dem Referenzsystem von Albrecht et al. verglichen. Grundlage dieses
Vergleichs war ein Video, zu dem auf einer Zeitleiste Anfang und Ende der
einzelnen Animationen notiert wurden. Die von SpeechToAnimation erzeugten Animationen wurden mit dieser Zeitleiste verglichen.
Zudem zeigte das vorangegangene Kapitel die automatisch erzeugten Animationen zu zwei weiteren Sätzen.
7.2
Fazit
Die Ergebnisse dieser Arbeit zeigen, dass bereits mit vergleichsweise einfachen Korrelationen zwischen Prosodie und Gesichtsbewegungen passende
Gesichtsanimationen zu einem gesprochenen Text erzeugt werden können.
Die aus den Extremstellen der Grundfrequenz generierten Animationen
heben bereits sprachlich betonte Wörter und Teilsätze auch mimisch hervor. Die virtuellen Charaktere können so auch non-verbale Kommunikation
simulieren. Die zu Pausen erzeugten Animationen lassen die Charaktere im
56
hier gezeigten Beispiel ebenfalls natürlicher wirken. Allerdings passen die erzeugten Animationen nicht in Pausen, die entstehen, weil der Sprecher zum
Beispiel erschrickt. Hier fehlt es zum einen an passenden Animationen und
zum anderen an einer Erkennung und Unterscheidung der verschiedenen Ursachen für eine Pause.
Die Glaubwürdigkeit der Animationen hängt zudem stark von der eigentlich Animationserstellung und auch ihrer Umsetzung in der jeweiligen Engine
ab. So ist etwa die Erzeugung der Kopfbewegungen nicht optimal: werden
mehrere kleine Kopfbewegungen dicht hintereinander erzeugt, so resultiert
dies in zu ruckartigen Bewegungen des Charakters. Die Animationen sind in
diesem Fall zwar nicht an einer falschen Stelle, aber ihre Intensität lässt sie
unglaubwürdig wirken.
Die Skalierung der Animationen zeigt bei den verwendeten Beispielen
kaum sichtbare Auswirkungen auf die Intensität der einzelnen Bewegungen.
Möglicherweise führen andere Indikatoren für die Lautstärke des Satzes zu
besseren Ergebnissen. Zusätzlich ist über feste Schwellwerte für die Lautstärke nachzudenken um etwa Flüstern, normale Lautstärke und Schreien klar
von einander zu unterscheiden.
Der in dieser Arbeit verfolgte prosodie-basierte Ansatz ist zudem nur einer unter vielen. Cassell et al. [11] etwa nutzen eine Spracherkennung um
Animationen kontextbasiert zu erstellen.
Diese verschiedenen Ansätze könnten durchaus miteinander kombiniert werden. Die prosodie-basierte Erzeugung kann hier als Unterstützung dienen,
die etwa im Vorfeld auf besonders markante Wörter im Satz hinweist.
7.3
Ausblick
Die automatische Erzeugung von passenden und glaubwürdigen Gesichtsanimationen steht noch am Anfang ihrer Entwicklung. Die Bereiche der
Gesichtsanimation und der Sprachanalyse bieten beide eine große Anzahl
von Ansätzen, Modellen und Techniken. Weiterentwicklungen dieses Systems
sind daher an vielen Stellen möglich.
1. Die eigentliche Erstellung der Animationen lässt in Hinblick auf Intensität und Ausführung der Animationen noch Verbesserungen zu. Die
bereits erwähnten kleinen ruckartigen Kopfbewegungen können durch
zusätzliche Regeln für die Erstellung, die etwa die bereits erzeugten
Animationen berücksichtigen, vermieden werden
2. In das System können zusätzliche Animationen eingefügt werden. Albrecht et al. schlagen zum Beispiel das Befeuchten der Lippen in regelmäßigen Abständen und besonders in Pausen vor
57
3. Die verwendeten prosodischen Merkmale können erweitert werden
4. Die Genauigkeit der Animationen kann durch zusätzliche Regeln für
die Erzeugung aus den prosodischen Merkmalen oder sogar durch ein
Modell, das die statistischen Zusammenhänge repräsentiert, verbessert
werden
5. Die Oberfläche kann mit zusätzlichen Optionen erweitert werden, die
etwa das Verschieben, Entfernen oder Hinzufügen von Animationen
erlauben. SpeechToAnimation ließe sich so zu einem Editor erweitern,
der den Animator mit Vorschlägen zur Gesichtsanimation unterstützt
58
Abbildungsverzeichnis
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
c
Vergleich zur Motivation takomat
GmbH 2010 . . . . . . .
1
Interpolationstechnik (aus [16]) . . . . . . . . . . . . . . . . .
4
Pseudomuskel-basierte Modelle (aus [16]) . . . . . . . . . . .
5
Physikalische muskelbasierte Modelle (aus [16]) . . . . . . . .
6
Im Vergleich: Waveform (oben), Grundfrequenz (Mitte) und
Leistung (unten) eines Sprachsignals . . . . . . . . . . . . . . 12
Flussdiagramm des Analyse- und Generierungssystems . . . . 18
Übersicht über die Hauptmodule von SpeechToAnimation . . 19
Funktion des Datenbehälters SpeechFeatures . . . . . . . . . . 19
Funktion der Meta-Animation-Language . . . . . . . . . . . . 20
PluginManager und Export-Plugins . . . . . . . . . . . . . . . 20
Aufbau der Meta Animation Language . . . . . . . . . . . . . 25
Klassendiagramme zu CurveValue und CurveExtremum . . . 27
Klassendiagramme zu Curve und CurveExtrema . . . . . . . . 28
Klassendiagramme zu SNACKInterface und TCLInterpreter . 28
Klassendiagramme zu Phonemes, Word und Phoneme . . . . 29
Klassendiagramm zu SpeechFeatures . . . . . . . . . . . . . . 30
Klassendiagramm zu SpeechAnalyser . . . . . . . . . . . . . . 30
Übersicht aller MALX -Klassen . . . . . . . . . . . . . . . . . 33
Klassendiagramm zu MALXWriter . . . . . . . . . . . . . . . 34
Klassendiagramme des AnimationGenerators und der AnimationGeneratorSettings . . . . . . . . . . . . . . . . . . . . . . 35
Klassendiagramm des PluginManagers . . . . . . . . . . . . . 39
Die grafische Oberfläche von SpeechToAnimation . . . . . . . 40
Vergleich der Signalleistung und der relativen Lautstärke . . . 43
Zeitleiste zu Beispiel 1 (Sekunde 1 bis 9) . . . . . . . . . . . . 44
Betonung des Teilsatzes „all my movements“ . . . . . . . . . . 45
Zeitleiste zu Beispiel 2 (Sekunde 12 bis 20) . . . . . . . . . . . 46
c
Beispiel einer Kopfbewegung takomat
GmbH 2010 . . . . . 47
c
Beispiel einer Kopf- und Augenbrauenanimation takomat
GmbH 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
c
Beispiel einer Pausenanimation takomat
GmbH 2010 . . . . 48
Animationen für den Satz „Enter it and I will help you to fly
the spaceship“ . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
Animationen für den Satz „Enter it and I will help you to fly
the spaceship“ . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
Animationen für den Satz „The cockpit is over there“ . . . . . 51
Animationen für den Satz „The cockpit is over there“ . . . . . 52
Beispiele der Animationen zu „Enter it and I will help you to
c
fly the spaceship“ takomat
GmbH 2010 . . . . . . . . . . . 53
c
Beispiele der Animationen zu „The cockpit is over there“ takomat
GmbH 2010 . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
59
Literatur
[1] Home: 80days, März 2010. http://www.eightydays.eu/.
[2] Tcl, März 2010. http://www.tcl.tk.
[3] Tinyxml, März 2010. http://www.grinninglizard.com/tinyxml.
[4] Roland Best. Digitale Signalverarbeitung und -simulation. vde-Verlag,
Berlin, 1993.
[5] Brian Bradie. interp, März 2010.
die/cinterpolation.html.
http://www.pcs.cnu.edu/ bbra-
[6] Max-Planck-Institut für Informatik. Snapshots and movies, Maerz 2010.
http://www.mpi-inf.mpg.de/resources/FAM/demos.html.
[7] Nokia. Qt, März 2010. http://qt.nokia.com.
[8] Jason Osipa. Stop Staring - Facial Modeling and Animation Done Right.
Sybex, 2003.
[9] Takomat.
takomat:
phenome,
März
http://www.takomat.com/takotech/tako-o-maten/echtzeitsoftware/phenome.html.
2010.
[10] David Talkin. ’A robust algorithm for pitch tracking (RAPT)’ in Speech
Coding and Synthesis (W. B. Kleijn and K. K. Paliwal, eds.), chapter 14, pages 495–518. Elsevier Science, 1995.
[11] Justine Cassell und Hannes H. Vilhjálmsson und Timothy Bickmore.
Beat: The behavior expression animation toolkit. In In Proceedings of
SIGGRAPH 2001, pages 477–486, 2001.
[12] Gregor Hofer und Hiroshi Shimodaira. Automatic head motion prediction from speech data. In In Proceedings of of Interspeech 2007, 2007.
[13] Goranka Zoric und Igor S. Pandzic. Towards real-time speech-based
facial animation applications built on huge architecture. In In Proc.
AVSP 2008, 2008.
[14] Christian Cavé und Isabelle Guaïtella und Roxane Bertrand und Serge
Santi und Françoise Harlay und Robert Espesser. About the relationship
between eyebrow movements and f0 variations. In In Proceedings of
ICSLP 1996, 1996.
[15] Irene Albrecht und Jörg Haber und Hans-Peter Seidel. Automatic generation of non-verbal facial expressions from speech. In In Proc. Computer Graphics International 2002, pages 283–293, 2002.
60
[16] Frederic I. Parke und Keith Waters. Computer Facial Animation. A K
Peters, Ltd., 1996.
[17] Peter Vary und Ulrich Heute und Wolfgang Hess. Digitale Sprachsignalverarbeitung. B. G. Teubner Stuttgart, 1998.
[18] Frank Fallside und William A. Woods. Computer Speech Processing.
Prentice/Hall International, 1985.
[19] Carlos Busso und Zhigang Deng und Ulrich Neumann und Shrikanth Narayanan. Natural head motion synthesis driven by acoustic
prosodic features: Virtual humans and social agents. Comput. Animat.
Virtual Worlds, 16(3-4):283–290, 2005.
61

Documentos relacionados