Alle Projekte

SymECADE

Software-Projekt | Bachelorarbeit

Bild des Projekts SymECADE

Ein modulares Framework für virtuelle Gesprächspartner, die ihr Gegenüber hören und sehen und als animierter Avatar mit Sprache antworten. Entstanden für meine Bachelorarbeit an der Universität Ulm.

Rolle
Eigenständige Entwicklung im Rahmen meiner Bachelorarbeit
Zeitraum
06/2026 - 12/2026
Technologien
Rust, Python, C++, GStreamer, MQTT, WebSocket, PyO3, Unreal Engine, GitHub Actions

Ausgangslage

Embodied Conversational Agents sind virtuelle Gesprächspartner mit einem Körper, etwa eine animierte Figur, die mit Menschen spricht. Natürlich wirkt so ein Gespräch vor allem dann, wenn es symmetrisch multimodal ist: Zu jedem Kanal, über den der Agent etwas ausgibt, gibt es einen passenden Kanal, über den er wahrnimmt, und umgekehrt. Wer spricht und Mimik zeigt, sollte also auch hören und sehen können.

Viele bestehende Frameworks sind hier asymmetrisch. Sie verarbeiten vom Menschen nur Text oder Sprache, geben aber einen animierten Körper aus. Andere sind nicht modular genug, um sie für unterschiedliche Systeme anzupassen. In der Forschung muss die Infrastruktur deshalb oft neu gebaut werden, obwohl die eigentlich untersuchte Komponente nur einen kleinen Teil der Arbeit ausmacht.

Umsetzung

SymECADE stellt genau diese Infrastruktur als modulares Framework bereit. Den Core habe ich in Rust geschrieben. Er stellt drei Transportebenen bereit, an die sich Module und Clients in jeder Programmiersprache anschließen können:

  • eine Event-Ebene über einen MQTT-Broker, der wahlweise direkt im Prozess läuft
  • eine Medien-Ebene, die Audio als Opus und Video als H.264 per RTP-Multicast verteilt, sodass eine einzige Aufnahme beliebig viele Module gleichzeitig versorgt
  • einen WebSocket-Server, der synthetisierte Sprache und Nachrichten an Avatar, Browser oder Roboterkopf ausliefert

Darauf aufbauend:

  • Module ohne Boilerplate: Jedes Modul läuft in einem eigenen Thread und bekommt genau die Anschlüsse, die es in seiner Konfiguration angibt. Für Spracherkennung und -synthese schreibt man nur die eigentliche Funktion, Abonnements, Verteilung und Lebenszyklus übernimmt der Core. Fällt ein Modul aus, läuft der Rest des Systems weiter.
  • Geringe Latenz: Die Dialoglogik gibt ihre Antwort Satz für Satz weiter, und die Sprachsynthese vertont jeden Satz, während das Sprachmodell noch am nächsten schreibt. So hören Nutzerinnen und Nutzer den Anfang der Antwort, lange bevor sie vollständig erzeugt ist.
  • Fertige Bausteine: Spracherkennung mit Whisper oder über OpenAI und Google, Sprachsynthese mit XTTS oder über OpenAI und Google, Dialoglogik mit lokalen Hugging-Face-Modellen oder über OpenAI, Anthropic und Gemini sowie Mimik-Erkennung mit EMO-AffectNet. Jeder Baustein lässt sich unverändert nutzen oder durch eine eigene Implementierung ersetzen.
  • Avatar im Browser: Als Verkörperung dient ein MetaHuman in Unreal Engine mit Lippensynchronisation. Per Pixel Streaming genügt Nutzenden ein Browser, der Kamera und Mikrofon überträgt und den gerenderten Agenten zurückbekommt.
  • Ein Core, drei Sprachen: Über Language-Bindings ist SymECADE auch aus Python und C++ nutzbar. Ein komplettes System wird im Code zusammengestellt und mit einem einzigen Aufruf gestartet, ganz ohne externen Broker oder Medienserver.

Ergebnis

SymECADE ist bewusst generisch gehalten und lässt sich für grundsätzlich jeden Conversational Agent nutzen: text- oder sprachbasiert, mit oder ohne Avatar, mit oder ohne symmetrische Multimodalität. Ohne die Medien-Ebene entsteht etwa ein reiner Text-Agent. Der Quellcode ist als Open Source auf GitHub verfügbar.