Update Animation von Gebärdensprache aus natürlicher Sprache authored by Jessica Giebel's avatar Jessica Giebel
......@@ -28,7 +28,6 @@ Die erkannte Sprache soll nach der Umwandlung in Text anschließend in Gebärden
Anschließend sollen diese Informationen genutzt werden, um die bestehende Grammatik mithilfe von Context-Free Grammar in Gebärden-Grammatik umzuwandeln. Hierzu wurde eine Recherche zum grammatikalischen Aufbau von Sätzen der deutschen Gebärdensprache (DGS) durchgeführt. Dabei hat sich herausgestellt, dass die DGS über eine vollständige eigene Grammatik verfügt. Der Satz “Wie alt bist du?” würde in der Gebärdensprache “du, wie alt?” gebärdet werden. Des Weiteren hat die Gebärdensprache keine offizielle Schriftform. Es ist also schwierig einen Zwischenschritt in der Übersetzung hin zur Darstellung durch einen Gebärden-Avatar einzulegen. Das heißt, dass die Schriftsprache des Deutschen nicht in die Schriftsprache der Gebärdensprache übersetzt werden kann, weil diese offiziell nicht existiert. Es gibt zwar Ansätze und Versuche, Gebärdensprache schriftlich darzustellen, jedoch finden diese in der Praxis keine Anwendung. Außerdem sind diese Schriften sehr kompliziert. Der Grund hierfür ist, dass für die schriftliche Darstellung der Lautsprache nur eine Repräsentation, also ein oder mehrere Buchstaben, des Lautes benötigt wird. Eine Schrift der Gebärdensprache muss mehr Informationen darstellen, z. B. Ausführungsstelle, Mundbild, Mimik oder Handflächen-Orientierung. Um diese fehlende Schriftsprache zu umgehen, sollen die Worte in ihrer Grundform direkt in Gebärden umgesetzt und damit ein “Wörterbuch” erstellt werden. So könnte das Gesprochene zunächst analysiert, in die Grundform umgewandelt, in die neue Satzstruktur umgestellt und mithilfe des Wörterbuchs in Animationen dargestellt werden.<br><br>
Bei den ersten Versuchen der Umsetzung dieses Plans haben sich jedoch mehrere Schwierigkeiten herauskristallisiert. Die größte Schwierigkeit stellte dabei die Analyse der gesprochenen Sprache dar. Da Deutsch über eine Vielzahl verschiedener Satzstrukturen verfügt, ist es schwierig zu ermittelt, bei welchem Wort es sich um Subjekt, Verb, Objekt, Nebenverb oder Ähnliches handelt. Ohne diese Information kann jedoch das Konzept der Context-Free Grammar nicht angewendet werden, um die bestehenden Satzstrukturen in Neue umzuwandeln. Zudem nutzt der Accelerator Node.js als Serverumgebung, welche wiederum nur wenige Möglichkeiten zum Natural Language Processing bietet. Eine weitere Herausforderung stellte sich außerdem bei der DGS-Grammatik, da diese auch über flexible Elemente wie das Zeigen auf eine bestimmte Person im Raum verfügt, welche so in der deutschen gesprochenen Sprache nicht existieren und schwer übersetzt werden können. Außerdem stellte sich bei der Recherche zu bereits bestehenden Projekten heraus, dass aktuelle Ansätze vor allem Deep Learning Verfahren einsetzen. Dies ist beispielsweise im Projekt von Saunders et al. (2020) der Fall, bei dem Gebärdensprach-Übersetzungen aus dem Fernsehen eingesetzt werden, um Übersetzungen zwischen DGS und gesprochenem Deutsch zu erstellen. Der Zugriff auf das Gesprochene als auch auf die gebärdete Übersetzung stellt sich hierbei als großer Vorteil heraus und das Projekt konnte vielversprechende Ergebnisse erzielen. Leider stehen die Technik und die Ressourcen dieser Ansätze für das Projekt im Accelerator nicht zur Verfügung.
<br>
......@@ -41,7 +40,7 @@ In diesem Kapitel wird die Umsetzung der Spracherkennung und der Darstellung der
<h2>Umsetzung Spracherkennung</h2>
Wie bereits in Kapitel 2.1. erwähnt, wird für dieses Projekt die Web Speech API verwendet. Als Grundlage für die Implementierung der Spracherkennung diente ein<a href="https://codingshiksha.com/javascript/javascript-speech-to-text-notes-app-using-web-speech-api-full-project/">Codebeispiel</a> aus dem Internet. Dieses beinhaltet zum einen den Code für die Einbindung der Web Speech API und verschiedener Kontrollelemente, welche in der Datei js/libs/speech-to-text.js implementiert wurden. Zum anderen werden in der index.html des Accelerators weitere Elemente eingefügt, die für die Ausgabe der Transkription verwendet werden. Im Folgenden wird die Entwicklung der Spracherkennung im Accelerator präsentiert.
<h3>Erste Version</h3>
<h3>Integration in den Accelerator</h3>
Zu Beginn wurde das Codebeispiel auf den Accelerator angepasst. Hierzu wurde zunächst das User Interface (UI) der Spracherkennung in der index.html des Accelerators modifiziert, siehe folgender Codeausschnitt:<br>
```
......@@ -77,8 +76,8 @@ function toggleSpeechToTextArea(){
}
}
```
<br>Die Web Speech API wird in der Datei js/libs/speech-to-text.js verwendet. Für die Steuerung wird zunächst ein SpeechRecognition-Objekt erzeugt, welches als Schnittstelle zur Steuerung der Spracherkennung dient, sowie die Textbox und das p-Elements für die Anweisungen in die Variablen noteTextarea und instructions geschrieben. Außerdem wird eine leere Variable noteContent des Typs String erstellt, um dort die Transkription zu speichern.
<h3>Steuerung der Spracherkennung</h3>
Die Web Speech API wird in der Datei js/libs/speech-to-text.js verwendet. Für die Steuerung wird zunächst ein SpeechRecognition-Objekt erzeugt, welches als Schnittstelle zur Steuerung der Spracherkennung dient, sowie die Textbox und das p-Elements für die Anweisungen in die Variablen noteTextarea und instructions geschrieben. Außerdem wird eine leere Variable noteContent des Typs String erstellt, um dort die Transkription zu speichern.
```
var recognition = new SpeechRecognition();
......@@ -132,13 +131,14 @@ recognition.onstart = function() {
instructions.text('Voice recognition activated. Try speaking into the microphone.');
}
```
<h3>Textausgabe im Chat</h3>
Der ausgegebene Text ist jedoch nur für den Nutzer selbst sichtbar. Um sie für alle Nutzer sichtbar darzustellen, war zunächst die Überlegung, den Text direkt in den Chat zu posten. Hierfür wurde am Ende von recognition.onresult der Text in noteContent in die Funktion sendChatMsg() übergeben. Dies ist eine bereits bestehende Funktion im Accelerator und sendet den Input der Funktion als Nachricht in den Chat, siehe Abbildung 02. Jedoch würden somit alle Nutzer den Text sehen, egal ob sie sich diese Unterstützung wünschen oder nicht. Außerdem könnten so Nachrichten, welche von anderen Nutzern in den Chat geschrieben wurden, schnell untergehen. Daher wurde im Verlauf der Entwicklung die Ausgabe der Untertitel aus dem UI ausgelagert.
<br>Der ausgegebene Text ist jedoch nur für den Nutzer selbst sichtbar. Um sie für alle Nutzer sichtbar darzustellen, war zunächst die Überlegung, den Text direkt in den Chat zu posten. Hierfür wurde am Ende von recognition.onresult der Text in noteContent in die Funktion sendChatMsg() übergeben. Dies ist eine bereits bestehende Funktion im Accelerator und sendet den Input der Funktion als Nachricht in den Chat, siehe Abbildung 02. Jedoch würden somit alle Nutzer den Text sehen, egal ob sie sich diese Unterstützung wünschen oder nicht. Außerdem könnten so Nachrichten, welche von anderen Nutzern in den Chat geschrieben wurden, schnell untergehen. Daher wurde im Verlauf der Entwicklung die Ausgabe der Untertitel aus dem UI ausgelagert.
<h3>Erweiterung</h3>
<h3>Auslagerung der Sprachsteuerung in Moderatoren-Bereich</h3>
Im nächsten Schritt wurde das UI der Spracherkennung in den Moderatoren-Bereich verschoben. Somit kann nur der Moderator selbst die Spracherkennung starten, zum Beispiel um während einer Präsentation die Generierung von Untertiteln zu ermöglichen. Ein Grund für diese Verlagerung ist, dass die Spracherkennung momentan client-seitig läuft und somit jeder Nutzer diese selbst aktivieren muss. Zum anderen müsste bei einer Fernschaltung der Spracherkennung durch einen anderen Nutzer auch der Punkt Sicherheit und Datenschutz gegeben sein, jedoch übersteigt dies die Kenntnisse der Gruppenteilnehmer. Jedoch wäre zukünftig die Fernschaltung erstrebenswert, damit hörbeeinträchtigte Nutzer selbst die Aufnahme der Stimme des Redners starten können, falls dieser das Starten der Aufnahme vergisst.<br><br>
Außerdem wurde das Design des UI verändert, siehe Abbildung 03. Da die Untertitel nicht mehr im UI ausgegeben werden sollen, wurde die Textbox und der Button zum leeren der Textbox entfernt. Zudem wurde der ganze Container neben die Präsentation platziert und ist ebenfalls über einen Button (siehe Abbildung 03, roter Kasten) in der Kontrollleiste ein- und ausblendbar. Des Weiteren wurde das Design angepasst und beispielsweise die Buttons der CI des Accelerators angepasst. Inspiration hierfür war der Container für die Draggables. Zusätzlich wird zu den Anweisungen der Sprachsteuerung das Icon eines Mikrofons und ein farbiger Punkt dargestellt. Ist die Aufnahme pausiert, wird ein durchgestrichenes Mikrofon und ein roter Punkt dargestellt. Wird die Aufnahme gestartet, färbt sich der Punkt grün und das Mikrofon ist nicht mehr durchgestrichen. Somit hat der Moderator auch neben dem Anweisungstext ein weiteres visuelles Feedback zu dem Zustand der Sprachaufnahme.<br>
<h3>Finale Ausgabe der Untertitel</h3>
Die Untertitel werden nun als p-Element mit der ID subtitleElement direkt unter der Gebärden-Animation angezeigt, siehe Abbildung 04. Diese befindet sich über der Chatbox und kann über den Button in der Usertoolbar, der ursprünglich mit der UI der Spracherkennung verknüpft war und nun zusätzlich noch verschoben wurde, ein- und ausgeblendet werden. Mehr zu der Gebärden-Animation in Kapitel 3.2..
Wird der Untertitel in recognition.onresult nun in das p-Element subtitleElement geschrieben, wird der Text nur für den Moderator sichtbar, da die Veränderung nur client-seitig abläuft. Um den Untertitel für alle Personen, die die Gebärden-Animation geöffnet haben, anzuzeigen, werden Web Sockets verwendet. Dadurch wird eine Verbindung zwischen Client und Server hergestellt. Hierfür wurde ein kleiner Teil des Codes in der speech-to-text.js verändert:
......
......