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