Dokument 1 - Dokumentenserverhosting der SUB
Transcription
Dokument 1 - Dokumentenserverhosting der SUB
Bachelorarbeit Sergej Sulz Sprachkommunikation mit einem Service-Roboter Fakultät Technik und Informatik Department Informatik Faculty of Engineering and Computer Science Department of Computer Science Sergej Sulz Sprachkommunikation mit einem Service-Roboter Bachelorarbeit eingereicht im Rahmen der Bachelorprüfung im Studiengang Technische Informatik am Department Informatik der Fakultät Technik und Informatik der Hochschule für Angewandte Wissenschaften Hamburg Betreuender Prüfer : Prof. Dr.Ing. Andreas Meisel Zweitgutachter : Prof. Dr. rer. nat. Wolfgang Fohl Abgegeben am 17. Januar 2011 Sergej Sulz Thema der Bachelorarbeit Sprachkommunikation mit einem Service-Roboter Stichworte Spracherkennung, HTK, Julius, Simon, Sprecherlokalisierung Kurzzusammenfassung Bei dieser Arbeit handelt es sich um die Entwicklung eines Sprachinterfaces für den mobilen Roboter SCITOS G5 an der Hochschule für Angewandte Wissenschaften Hamburg. Ziel ist es so eine Sprachkommunikation mit einem Service-Roboter herzustellen und diesem Aufgaben zu erteilen. Dabei spielt die Spracheingabe sowie auch die Sprachausgabe eine große Rolle. Es werden drei verschiedene Verfahren zur Spracherkennung vorgestellt, wobei die Erkennung mittels Hidden Markov Modell implementiert wird. Das System baut auf der kontinuierlichen SpracherkennungsEngine Julius auf. Zur Modellierung wird Simon eingesetzt, da es eine komfortable grafische Oberfläche hat, und das trainieren von Wörtern sehr leicht macht. Zur Steuerung und Dialogführung wird ein Zustandsautomat eingesetzt, der leicht verändert und erweitert werden kann. Die Sprachsynthese erfolgt über das Open Source Tool Mbrola und wird auch über den Zustandsautomaten gesteuert. Zum Projektende wurde an dem Beispieldialog KIARA eine Erkennungsrate von 95,91% erreicht. Sergej Sulz Title of the paper Voice communication with a service robot Keywords Speech recognition, HTK, Julius, Simon, speaker localisation Abstract This thesis introduces the development of a speech interface for the service robot SCITOS G5 at Hochschule für Angewandte Wissenschaften Hamburg. The aim is to establish a voice communication with a service robot where speech recognition and speech synthesis play the major role. There are three methods for speech recognition presented, where Hidden Markov Modell is implemented finally. The system is based on the continuous speech recognition engine Julius. Simon is used for modeling because it has a comfortable graphical user interface, and the training of words is very easy. To control the machine a stateMachine is used, which can be easily edited and expanded. The speech synthesis is performed by the Open-Source tool Mbrola which is also controlled by the state machine. At the end of the demo project KIARA a speech recognition rate of 95,91% was achieved. Meiner süßen Tochter Melina und meiner lieben Frau Elvira ... Danksagung An dieser Stelle möchte ich mich bei allen Personen bedanken, die mich während meiner Bachelorarbeit unterstützt haben. Insbesondere bei Prof. Dr.Ing. Andreas Meisel und Prof. Dr. rer. nat. Wolfgang Fohl für die gute Betreuung und das Equipment. Vielen Dank an Helmut Schimkowski, Dmitri Hammernik und Margarete Daiker für das Korrekturlesen. Des Weiteren einen herzlichen Dank an meine Tante, die mir im Vorfeld eine Einstiegsmöglichkeit in einem Betrieb ermöglicht hat. Inhaltsverzeichnis 7 Inhaltsverzeichnis Tabellenverzeichnis 10 Abbildungsverzeichnis 11 1. Einführung 1.1. Motivation und Aufgabenstellung . . . . . . . . . . . . . . . . . . . . . . . . 1.2. Aufbau und Kapitelübersicht . . . . . . . . . . . . . . . . . . . . . . . . . . 13 13 14 2. Spracherkennung 2.1. Einleitung . . . . . . . . . . . . . . . 2.2. Merkmalsextraktion . . . . . . . . . . 2.2.1. DFT . . . . . . . . . . . . . . 2.2.2. MFCC . . . . . . . . . . . . . 2.3. Verfahren zur Spracherkennung . . . 2.3.1. Kreuzkorrelation . . . . . . . 2.3.2. Dynamic Time Warp - DTW . 2.3.3. Hidden Markov Modell - HMM 2.4. Anwendungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15 15 16 16 17 18 18 21 21 24 3. Software 3.1. Spracherkennung . . . . . . . . . . . . . 3.1.1. Kommerziell . . . . . . . . . . . . 3.1.1.1. Nuance Communications 3.1.1.2. Voice Pro . . . . . . . . 3.1.2. Open-Source . . . . . . . . . . . 3.1.2.1. CMU Sphinx . . . . . . 3.1.2.2. HTK Toolkit . . . . . . . 3.1.2.3. Julius . . . . . . . . . . 3.1.2.4. Simon listens . . . . . . 3.2. Sprachsynthese . . . . . . . . . . . . . 3.2.1. Kommerziell . . . . . . . . . . . . 3.2.1.1. Nuance Vocalizer . . . . 3.2.1.2. AT&T Natural Voices . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26 26 26 26 27 28 28 28 30 31 32 32 32 32 . . . . . . . . . Inhaltsverzeichnis 8 3.2.2. Open-Source . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2.1. BOSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2.2.2. Mbrola . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4. Sprecherlokalisierung 4.1. Eingesetzte Hardware 4.2. Kreuzkorrelation . . . 4.3. Energieunterschied . . 4.4. VoiceTracker . . . . . . . . . . . . . . . . . . . . . . . . . 5. Implementierung 5.1. Hardware . . . . . . . . . . . . 5.1.1. SCITOS G5 . . . . . . . 5.1.2. VoiceTracker . . . . . . 5.2. Installation und Konfiguration . . 5.2.1. HTK . . . . . . . . . . . 5.2.2. Simon listens . . . . . . 5.2.3. Julius . . . . . . . . . . 5.2.4. Mbrola . . . . . . . . . 5.2.5. SCITOS-Sprachinterface 5.3. SCITOS-Sprachinterface . . . . 5.3.1. Spracherkenner . . . . . 5.3.2. Nachrichtenschlange . . 5.3.3. Dispatcher . . . . . . . 5.3.4. Zustandsautomat . . . . 5.3.5. Sprachsynthesizer . . . 5.4. Sprecherlokalisierung . . . . . 5.4.1. Kreuzkorrelation . . . . 5.4.2. Energieunteschied . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6. Anwendung 6.1. Sprachmodell erzeugen . . . . . . . . . . . . . . . . 6.1.1. Schattenwörterbuch HADIFIX BOMP . . . . . 6.1.2. Wort hinzufügen . . . . . . . . . . . . . . . . 6.1.3. Grammatik erzeugen . . . . . . . . . . . . . . 6.1.4. Training . . . . . . . . . . . . . . . . . . . . . 6.1.5. Modell testen . . . . . . . . . . . . . . . . . . 6.2. Sprachmodell mit dem SCITOS-Sprachinterface nutzen 6.3. Optimierung . . . . . . . . . . . . . . . . . . . . . . 7. Auswertung und Aussicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33 33 33 . . . . 34 35 36 38 38 . . . . . . . . . . . . . . . . . . 39 39 39 39 42 43 43 44 45 46 47 48 50 51 53 58 59 59 59 . . . . . . . . 60 60 60 61 63 63 65 65 67 70 Inhaltsverzeichnis 9 Literaturverzeichnis 71 A. CD Inhalt 74 Glossar 75 Tabellenverzeichnis 10 Tabellenverzeichnis 2.1. Beispiele für Lautsprache . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.2. Einteilung der Spracherkennungssysteme nach ihren Anwendungen . . . . . 16 24 6.1. 6.2. 6.3. 6.4. 6.5. 61 62 63 68 69 Das gesamte Vokabular aus dem KIARA Zustandsdiagramm . Liste der Wortarten aus dem HADIFIX BOMP Lexikon [RB08] Beispiel für gültige Wortkombinationen und Terminale . . . . . Terminale des KIARA Demo-Projekts . . . . . . . . . . . . . Vergleich zwischen HADIFIX BOMP und KIARA Terminalen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . Abbildungsverzeichnis 11 Abbildungsverzeichnis 1.1. Der SCITOS G5 Service-Roboter an der HAW Hamburg . . . . . . . . . . . 14 2.1. Signalverlauf und Frequenzspektrum der Äußerung „Hallo“ . . . . . . . . . . 2.2. Definition der Mel-Skala. Referenzpunkt sind die 1000 Hz, die der Tonheit 1000 mel entsprechen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2.3. Signalverlauf und Frequenzspektrum der aufgenommenen Vokale A und O . 2.4. Korrelationsvergleich zwischen den Vokalen A-A und A-O . . . . . . . . . . . 2.5. Merkmalsvektoren des aufgenommenen Wortes „Hallo“ . . . . . . . . . . . . 2.6. Beispiel: Hidden Markov Modell für das Wort „Hallo“ . . . . . . . . . . . . . 17 18 19 20 22 23 3.1. HTK Software Architektur . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.2. HTK Prozessablauf . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3.3. Komponentenübersicht und Kommunikationsablauf . . . . . . . . . . . . . . 29 29 31 4.1. Erfassungsbereich für die Spracherkennung. Sprecher im grünen Bereich wird berücksichtigt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.2. Mikrofon C3000B von AKG zur Signalaufnahme für Sprecherlokalisierung . . 4.3. Eingesetzte USB-Mischpult US-122 von Tascam . . . . . . . . . . . . . . . 4.4. Versuchsaufbau und Positionierung der Sprecher . . . . . . . . . . . . . . . 4.5. Verlauf und Korrelation der vom rechten und linken Mikrofon aufgezeichneten Signale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4.6. VoiceTracker auf einer Aluminium-Halterung . . . . . . . . . . . . . . . . . . 5.1. Vergleich zwischen VoiceTracker und einfachen Mikrofon bei eingeschalteten Ultraschallsensoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5.2. VoiceTracker-Aufzeichnung beim eingeschalteten Motor . . . . . . . . . . . . 5.3. VoiceTracker-Aufzeichnung beim Bewegen des Arms . . . . . . . . . . . . . 5.4. Übersicht der Komponenten und deren Arbeitsweise . . . . . . . . . . . . . 5.5. Klassendiagramm der Nachrichtenschlange . . . . . . . . . . . . . . . . . . 5.6. Kommunikationsdiagramm vom Dispatcher zum Zustandsautomaten . . . . . 5.7. Klassendiagramm des Dispatchers . . . . . . . . . . . . . . . . . . . . . . 5.8. Klassendiagramm des Zustandsautomaten und der Zustände . . . . . . . . 5.9. Zustandswechsel mit dem new-Operator . . . . . . . . . . . . . . . . . . . 34 35 35 36 37 38 40 41 41 48 50 51 51 53 53 Abbildungsverzeichnis 5.10.Zustandsdiagramm des Demo-Projekts KIARA . . . . . . . . . . . . . 5.11.Das erweiterte Zustandsdiagramm mit dem neuen Zustand . . . . . . . 5.12.Kommunikationsdiagramm von TimerMachine zum Zustandsautomaten 5.13.Klassendiagramm des Zeitgebers TimerMachine . . . . . . . . . . . . 5.14.Klassendiagram von SayText . . . . . . . . . . . . . . . . . . . . . . . 12 . . . . . . . . . . . . . . . 54 55 57 57 58 6.1. Optimale Lautstärke einer Sprachaufnahme . . . . . . . . . . . . . . . . . . 67 7.1. Sprachmodell-Evaluierung mit dem Tool sam . . . . . . . . . . . . . . . . . 70 1. Einführung 13 1. Einführung Die Spracherkennung ist ein fester Bestandteil von Sprachkommunikation mit autonomen Systemen und Maschinen. Dabei ist es das Ziel die Sprachsignale so gut wie möglich in Text umzusetzen und zu verarbeiten. Die Verarbeitung kann unter anderem in folgende Anwendungsgebiete unterteilt werden: • Büro Rechtsanwaltskanzlei, Informationsabfrage • Telefon-/Auskunftssysteme Deutsche Bahn, Kino • Steuerung von Maschinen und autonomer Systeme • Medizin SpeechMagic, Dragon Medical [Nuaa] • Behindertenhilfe Simon listens Projekt [Sl] 1.1. Motivation und Aufgabenstellung In dieser Arbeit wird ein Sprachinterface für den mobilen Serviceroboter SCITOS G5 (Abbildung 1.1 auf Seite 14) an der HAW Hamburg implementiert. Der SCITOS G5 wurde von der Firma MetraLabs entwickelt und bietet eine mobile Plattform für Forschungszwecke. Das Gesamtsystem soll eine sprecherunabhängige Sprachkommunikation mit dem Roboter ermöglichen, was die Spracherkennung und die Sprachausgabe miteinschließt. Einem Sprecher soll es so möglich sein, Befehle zu erteilen und Statusmeldungen abzurufen. Aufgrund der Mobilität des Systems muss es robust sein und unter Raumbedingungen zuverlässig arbeiten können. Deswegen werden verschiedene Ansatzmölichkeiten betrachtet, ausgewertet und die geeignetste implementiert. 1. Einführung 14 Abbildung 1.1.: Der SCITOS G5 Service-Roboter an der HAW Hamburg 1.2. Aufbau und Kapitelübersicht In Kapitel 2 gehe ich zuerst auf die Merkmale und Erzeugung von Sprachsignalen ein. Die dann vorgestellten Verfahren nutzen diese Erkenntnisse um effizient Sprache zu erkennen. Zum Kapitelende wird die Vielfalt der Anwendungsarten und Spracherkennungssysteme vorgestellt und erklärt. Weiterhin wird in Kapitel 3 die Software vorgestellt die zur Spracherkennung und Sprachsynthese dient. Dabei werden kommerzielle und Open Source Projekte betrachtet. Kapitel 4 befasst sich mit der Sprecherlokalisierung. Sie ist für die Störreduzierung sehr wichtig ist. Die Implementierung erfolgt in Kapitel 5. Hier wird die eingesetzte Hardware beschrieben sowie die Vorrausetzungen für das eingesetzte System erläutert. Eine ausführliche Installationsanleitung für die ausgewählte Software ist hier auch zu finden. Zum Schluss des Kapitels wird auf die Programmierung der einzelnen Komponenten eingegangen. Eine Gebrauchsanweisung für den Einsatz und das Trainieren des Spracherkennungssystems ist in Kapitel 6 vorhanden. 2. Spracherkennung 15 2. Spracherkennung Die Spracherkennung ist der Kern des zu entwickelnden Sprachinterfaces. In diesem Kapitel werden verschiedene Techniken und Verfahren der Spracherkennnung betrachtet und untersucht, welche davon die geeignetste für die Problemstellung dieser Arbeit ist. Mit den vorgestellten Techniken lassen sich viele verschiedene Anwendungen realisieren. 2.1. Einleitung Beim Erzeugen von Sprache wird die aus der Lunge ausströmende Luft durch die Stimmbänder in Schwingung versetzt. Die Grundfrequenz der Schwingungen liegt bei Männern im Durchschnitt bei 120 Hz und bei Frauen bei 220 Hz. Im Vokaltrakt (Rachen, Mund und Nasenraum) wird der Luftstrom zusätzlich klanglich verändert. [vgl. PK08, S. 13] Die dadurch entstehenden Laute lassen sich in folgende Klassen unterteilen: Vokale Die ausströmende Luft passiert den Vokaltrakt recht ungehindert. Es entstehen Selbstlaute: A, E, I, O, U Konsonanten Die ausströmende Luft wird im Vokaltrakt behindert oder für eine gewisse Zeit ganz gestoppt. Das deutsche Alphabet enthält folgende Konsonanten: B, C, D, F, G, H, J, K, L, M, N, P, Q, R, S, T, V, W, X, Z 2. Spracherkennung 16 In der Linguistik werden die Laute einer Sprache als Phone bezeichnet. Diese werden in Lautschrift mit speziellen Symbolen dargestellt, die zum Beispiel in einem Wörterbuch zu finden sind. Mehrere Phone schließen sich zu einem Phonem zusammen und ermöglichen das Wort kontextabhängig richtig zu lesen und auszusprechen. Tabelle 2.1 zeigt als Beispiel das Wort Bahn und Bann [vgl. Eul06, S. 5-10]: Wort Lautsprache Bahn Bann ba:n ban Tabelle 2.1.: Beispiele für Lautsprache 2.2. Merkmalsextraktion Um Sprache so effizient wie nur möglich zu erkennen, werden dementsprechend auch Merkmale benötigt, die das ermöglichen. Nach näherer Betrachtung eines Sprachsignals kann man feststellen, dass es aus mehreren Blöcken mit unterschiedlicher Länge aber gleichen Merkmalen besteht. Die Berechnung der Merkmale kann entweder auf das ganze Sprachsignal angewendet werden oder sinnvollerweise aufgeteilt auf Blöcke. Die optimale Blockgröße liegt zwischen 15 und 20 ms. Nach der Berechnung werden die Blockgrenzen um 5 ms verschoben. Derartige Verarbeitung lässt das Signal als eine Folge von Blöcken mit gleichbleibenden Merkmalen ansehen. [vgl. Eul06, S. 30-32]: 2.2.1. DFT Eine Möglichkeit Merkmale aus einem Sprachsignal zu gewinnen ist die Darstellung des Frequenzspektrums durch die Diskrete Fourier-Transformation. Die DFT ist eine Anpassung der Fourier-Transformation für analoge Signale und ist wie folgt definiert: Xk = N−1 X 2π x(n) e −j N kn ; k = 0, 1, ..., N − 1 (2.1) n=0 [vgl. Wen05, S. 155] In Abbildung 2.1 auf Seite 17 wird zufällig ein Signalausschnitt von 25 ms der Äußerung „Hallo“ gewählt. Abgebildet sind der Zeitverlauf des Signals und das dazugehörige durch die DFT berechnete Frequenzspektrum. 2. Spracherkennung 17 Abbildung 2.1.: Signalverlauf und Frequenzspektrum der Äußerung „Hallo“ Damit lassen sich vorkommende Frequenzen in einem Signalfenster berechnen und darstellen. Diese Frequenzen können nun als Merkmal eines Sprachblocks berücksichtigt werden. Für die reale Anwendung geht man ein Schritt weiter und berechnet aus dem Frequenzspektrum das DFT-Cepstrum. Dazu wird der Logarithmus aus dem Spektrum berechnet und erneut mit der Fouriere-Transformation transformiert. Dadurch werden aus multiplikativen Anteilen im Spektrum additive Anteile im Cepstrum. Das hat den Vorteil, dass die störenden Anteile des Signals, welches zum Beispiel ein Mikrofon oder Telefonleitung passiert hat, additiv vorliegen und somit leichter entfernt werden können [vgl. Eul06, S. 43-47]. 2.2.2. MFCC In der Spracherkennung wird anstatt des DFT-Cepstrums auch das Mel-Cepstrum (Mel Frequency Cepstral Coefficients) verwendet. Dabei wird das Mel-Cepstrum nicht wie bei dem DFT-Cepstrum aus dem Frequenzspektrum berechnet, sondern anhand der Mel-Filterdatenbank. Die Mel-Skala (Abbildung 2.2 auf Seite 18) verläuft im Gegensatz zum Frequenzbereich nicht linear und beschreibt die Tonhöhe, die der Mensch wahrnimmt. 2. Spracherkennung 18 Abbildung 2.2.: Definition der Mel-Skala. Referenzpunkt sind die 1000 Hz, die der Tonheit 1000 mel entsprechen Die Skalentransformation ist wie folgt definiert: h(f ) = 2595 ∗ log10 (1 + f ) 700Hz (2.2) [vgl. PK08, S. 94-95] 2.3. Verfahren zur Spracherkennung 2.3.1. Kreuzkorrelation In einem Studienprojekt an der FH Flensburg war es die Aufgabe festzustellen, ob eine ausreichend gute Spracherkennung mit der Kreuzkorrelation zu realisieren ist. Die Kreuzkorellation ist eine mathematische Funktion zum Vergleich von Signalen, die auch zeitlich versetzt sein können. Seien die zwei Signale X1(m) und X2(m) , so lautet die mathematische Definition: k12 (n) = ∞ X X1(m) ∗ X2(m−n) ; n = −∞, ..., ∞ (2.3) m=−∞ [vgl. Wen05, S. 187] Für die einfache Erkennung von Signalen werden zuerst Vokale auf ihre Frequenzspektren und Eigenschaften untersucht. Bezogen auf einen Sprecher, weisen Vokale ein nahezu kon- 2. Spracherkennung 19 stantes Frequenzspektrum auf (Abbildung 2.3). Die Idee ist nun dabei, dass zuerst Referenzsignale der Vokale aufgenommen werden. Abbildung 2.3.: Signalverlauf und Frequenzspektrum der aufgenommenen Vokale A und O 2. Spracherkennung 20 Abbildung 2.4.: Korrelationsvergleich zwischen den Vokalen A-A und A-O Im zweiten Schritt wird das Frequenzspektrum des Eingangssignals mit dem von mehreren Referenzsignalen verglichen. Dabei entstehen Muster, wie in Abbildung 2.4 zu sehen ist. Des Weiteren tendiert die Korrelationsabbildung von A1 und A2 zu einem Dreiecksmuster. Anhand dem Verhalten des Musters kann man sagen, dass die Signale A1 und A2 mehr zueinander passen, als A1 und O1. Probleme tauchten auf wenn ganze Worte verglichen wurden. So musste das gesprochene Wort fast exakt so schnell gesprochen sein wie das zuvor aufgenommene Referenzwort. Da dieses System Sprecherabhängig ist, muss der Vergleich auch mit demselben Sprecher durchgeführt werden. Laute wie TZ werden schlecht wahrgenommen, da sie in Ihrer Amplitude klein sind und kein eindeutiges Frequenzverhalten aufweisen. Die Kreuzkorrelation ist zwar geeignet Vokale zu vergleichen aber nicht für Ganzwortsignale. Folglich reicht die Kreuzkorrelation nicht aus um Sprache zu erkennen. Das Projekt gab einen sehr guten Einstieg in die Signalverarbeitung und motivierte zum weiter forschen. Vorteile • Einfach zu implementieren und zu verstehen Nachteile • Beschränkt auf Vokale 2. Spracherkennung 21 • Probleme zwischen E und O • keine richtige Spracherkennung 2.3.2. Dynamic Time Warp - DTW Der einfachste Weg eine Spracherkennung zu realisieren ist es zwei Sprachsignale zu vergleichen. Dabei werden generell Referenzsignale aufgenommen, die Merkmale und Muster extrahiert und abgespeichert. Dann werden die Merkmale des unbekannten Signals mit den der Referenzsignale verglichen. Der Vergleich zeitlich versetzter Signale ist allerdings nicht so einfach, so wie bei dem Vergleich mit der Kreuzkorrelation. Hier kommt DTW (Dynamische Zeitverzerrung) zum Einsatz. Wie der Name schon sagt, wird zuerst das aufgenommene Sprachsignal zeitlich verzerrt, sodass es die gleiche Länge wie das Referenzsignal hat. Dann werden jeweils die Differenzen der Merkmale berechnet und die kleinste Distanz als erkanntes Referenzmuster ausgegeben. Die Berechnung des optimalen Pfades basiert auf der dynamischen Programmierung. Der DTW-Algorithmus ist relativ einfach und lässt sich kostengünstig implementieren. Auch die Erkennungsrate liegt bei bis zu 100 % bei einem Wortschatz von ca. 1000 Wörtern. Die Schwäche liegt im größer werdenden Vokabular und der Sprecherabhängigkeit. Je mehr Wörter desto langsamer wird das Erkennungssystem, dafür aber sprecherunabhängiger. Auch kann mit DTW keine kontinuierliche Sprache erkannt werden. Das Training auf Äußerungen mit mehreren Wörtern ist allerdings möglich. Aufgrund dieser Schwächen kommt dieses System nicht zum Einsatz. [vgl. PK08, S. 312-316] [vgl. Eul06, S. 55-66] 2.3.3. Hidden Markov Modell - HMM Das Hidden Markov Modell ist ein stochastisches Modell und beschreibt zwei gekoppelte Zufallsprozesse. Dabei ist der erste Zufallsprozess durch Zustände (Markov-Kette) mit Wahrscheinlichkeitsgewichten beschrieben. Der Prozess ist hier von außen nicht sichtbar (verborgen: hidden). Ein zweiter Prozess erzeugt Übergänge mit Gewichten nach einer Wahrscheinlichkeitsverteilung. Dieses Model passt bisher am besten zum Modellieren von Sprachsignalen. Dabei wird das Sprachsignal als eine Abfolge von Zuständen angesehen. Ein Zustand stellt einen Laut der Sprache dar. In der Spracherkennung wird von jedem Wort des Vokabulars eine statistische Beschreibung angelegt. Bei der Erkennung wird dann das Wort ausgegeben, welches am besten zu der statistischen Beschreibung passt, oder besser gesagt die höchste Wahrscheinlichkeit hat. 2. Spracherkennung 22 Zum besseren Verstehen werden die Schritte der Spracherkennung am Wort „Hallo“ mittels HMM betrachtet. Nach der Sprachaufnahme wird das Audiosignal in Blöcke zerlegt und die einzelnen Merkmale (hier MFCC) berechnet. Die berechneten Merkmale werden in einem Merkmalsvektor zusammengefasst (Abbildung 2.5). Die Merkmalsvektoren können jetzt auf Abbildung 2.5.: Merkmalsvektoren des aufgenommenen Wortes „Hallo“ die linguistische Ebene abgebildet werden. Dabei wird jeder Merkmalsvektor einem Phonem zugeordnet und mit einer statistischen Beobachtung versehen. Danach erfolgt die Gewichtsverteilung der Wahrscheinlichkeiten welche die Merkmalsvektoren wie Zustände miteinander verbindet. Mit jeder weiteren Sprachaufnahme wird das Modell trainiert indem die Merkmalsvektoren und Wahrscheinlichkeiten angepasst werden. Wie in Abbildung 2.6 auf Seite 23 zu sehen ist, kann ein Wort somit als ein endlicher Zustandsautomat angesehen werden. Um den zeitlichen Ablauf einer Aufnahme wiederzugeben, wird der Zustandsautomat von links nach rechts abgearbeitet, sodass die einzelnen Zustände keine Übergänge zu den Vorgängerzuständen haben dürfen. Bindet man den Erkennvorgang an eine Grammatik, so kann man bei Wortketten noch bessere Erkennungsergebnise erzielen. 2. Spracherkennung 23 Abbildung 2.6.: Beispiel: Hidden Markov Modell für das Wort „Hallo“ Die ideale Wahrscheinlichkeit bei der das Wort „Hallo“ erkannt wird kann nach der Formel 2.4 berechnet werden. P (aha |aal |alo ) = aha ∗ aal ∗ alo = 0, 9 ∗ 0, 95 ∗ 0, 9 = 0, 77 (2.4) Ein weiterer Vorteil von Hidden Markov Modellen ist, dass der Zustandsautomat auch die zeitliche Variabilität eines Sprachsignals berücksichtigt. So können auch anders ausgesprochene Versionen des Wortes „Hallo“ erkannt werden: → haalo, halooo. Dementsprechend verhält sich auch die Wahrscheinlichkeit der jeweiligen Äußerungen. 2. Spracherkennung 24 2.4. Anwendungen Die Spracherkennung kann man in verschiedene Spracherkennungssysteme einteilen. Tabelle 2.2 zeigt die verschiedenen Anwendungen und dazu das jeweilige Spracherkennungssystem. System Anwendung Einzelworterkennung Keyword-Spotting Welches Wort wurde gesagt? Wurde ein bestimmtes Kommando in einer Äußerung erwähnt? Ganze Sätze die fließend gesprochen wurden. Wer hat die Äußerung gesprochen? Dazu gehört auch die Verifikation. In welcher Sprache wurde gesprochen? Kontinuierliche Sprache Sprechererkennung Sprachenidentifikation Tabelle 2.2.: Einteilung der Spracherkennungssysteme nach ihren Anwendungen Die Kernaufgabe ist es eine Äußerung richtig in Worte zu zerlegen und zu verarbeiten. Oft ist es nicht nötig ganze Sätze richtig zu erkennen, so setzt man auf die Einzelworterkennung. Dabei geht das System davon aus, dass eine Äußerung genau ein isoliertes Wort ist. Um einzelne Wörter zu erkennen muss das System dementsprechend auch mit einzelnen Wörtern trainiert werden. Beim Keyword-Spotting kann das Schlüsselwort allerdings in einer fließenden Äußerung auftreten. Solche Systeme werden überwiegend zur Kommando-Erkennung eingesetzt. Die kontinuierliche Spracherkennung geht ein Schritt weiter und ermöglicht das Erkennen von ganzen Sätzen die auch fließend gesprochen wurden. Die Art von Spracherkennungssystem wird bei Diktiersoftware wie Dragon Naturally Speaking eingesetzt. Hier reicht das Einzelworttraining nicht aus, es müssen auch ganze Sätze trainiert werden. Zur Verifizierung von Sicherheitsbereichen kann die Sprechererkennung eingesetzt werden. Der Sprecher muss sich durch ein vordefiniertes Passwort ausweisen oder das System erkennt den Sprecher anhand von zufällig gewählten Äußerungen. Sprachenidentifikation ist vorwiegend in Übersetzungsprogrammen zu finden. 2. Spracherkennung 25 Des Weiteren werden Spracherkennungssysteme an der Sprecherabhängigkeit differenziert: Sprecherabhängig Jeder Sprecher muss die Äußerungen trainieren. Sprecherunabhängig Diese Systeme erkennen Äußerungen von beliebigen Sprechern. Dazu müssen aber auch die Äußerungen aufwändig von mehreren tausend Sprechen trainiert werden. Mit den beschriebenen Spracherkennungssystemen lassen sich eine Vielfalt von Anwendungen realisieren, insbesondere: • Gerätesteuerung Stereoanlage, Klimaanlage, Handy, PDA, Fernbedienung • Diktiersysteme medizinische Befunde (Diagnose, Radiologie), Rechtsanwaltskanzlei • Sprachdialogsysteme Telefonische Auskunftssysteme, telef. Bestellsysteme, Gewinnspiele [vgl. PK08, S. 289-292] [vgl. Eul06, S. 15-17] 3. Software 26 3. Software 3.1. Spracherkennung 3.1.1. Kommerziell 3.1.1.1. Nuance Communications Die Hersteller Nuance bietet das sehr bekannte und erfolgreiche Spracherkennungsprogram Dragon NaturallySpeaking an. Testberichten [Tes] zufolge ist die Software durchschnittlich gut bewertet und laut Hersteller erreicht Dragon NaturallySpeaking eine Erkennungsrate von bis zu 99%. Durch den Zukauf der Firma ScanSoft und ViaVoice von IBM ist Nuance derzeitig Marktführer auf dem Gebiet der Spracherkennungssoftware. Weiterhin entwickelt Nuance Produkte die auf verschiedene Zielgruppen zugeschnitten und optimiert sind: Nuance Speech Solutions Optimierte Lösungen für • Telekommunikation • Auskunftsdienste • Mobile Geräte • Automobilbereich Nuance Healthcare Solutions • Dragon Medical Möglichkeit für Ärzte echtzeit in medizinischen Informationssystemen zu navigieren und Befunde zu diktieren. • SpeechMagic Solution Builder Dient zur Erstellung professioneller medizinischer Dokumentation. 3. Software 27 Dragon NaturallySpeaking Solution Erstellung von Dokumenten, PC-Navigation und Suche im Internet für Heimanwender. Professionelle Anwender und Unternehmen profitieren von eigen erstellten Makros, mit denen sich Geschäftsprozesse optimieren lassen. Die Dragon NaturallySpeaking Legal Version ist auf die Rechtsbranche optimiert. Alle genannten Produkte von Nuance setzen das Windows Betriebssystem voraus. Eine Installation unter Linux ist daher nicht möglich. Das eingesetzte System sollte mindestens 1 GB Arbeitsspeicher aufweisen. Die Installation auf der Festplatte hat einen Umfang von rund 3 GB. [Nuaa] 3.1.1.2. Voice Pro Nicht ganz unbekannt ist auch das Produkt Voice Pro von Linguatec und Microsoft. Auch hier soll die Erkennungsgenauigkeit bei bis zu 99% liegen. Möglich wird dies durch den Einsatz von linguistischer Intelligenz SpeechCorrect. Anhand des Kontexts wird bei gleichklingenden Wörtern das richtige Wort ausgewählt. Damit wird das Diktieren von „Stephan Meier “ und „Meyers Lexikon“ kein Problem mehr. Wie Nuance entwickelt auch Linguatec Voice Pro für verschiedene Einsatzbereiche: Voice Pro Standard Einsatz im Heimbereich. Premium Zugeschnitten für den beruflichen Alltag. Premium Wireless Die professionelle Spracherkennung mit Bluetooth-Headset. Legal Professionelle Spracherkennung für Juristen mit 12 Fachgebieten. Medical Entwickelt für den Einsatz in Arztpraxen, Kliniken und anderen medizinischen Einrichtungen. Das bei den Produkten eingesetzte Sprachwörterbuch beinhaltet über 1 Million Wortformen die sich in den Bereichen EDV, Sport, Wirtschaft, Wissenschaft und Technik wiederfinden. Eine weitere Besonderheit ist, dass die Bedienung von Outlook und die Suche im Internet sehr leistungsfähig sind. Die Unterstützung der Betriebssysteme ist hingegen sehr mager. Ab 3. Software 28 Voice Pro 12 werden nur Microsoft Windows Vista und Windows 7 unterstützt. Der Arbeitsspeicher sollte nicht weniger als 1 GB aufweisen. Das Installationsvolumen auf der Festplatte beträgt auch ca. 1 GB. [Lin] 3.1.2. Open-Source 3.1.2.1. CMU Sphinx Die Spracherkennungs-Engine Sphinx wurde an der Carnegie Mellon University entwickelt. Die aktuelle Version ist Sphinx 4 und wurde nach Version 3 komplett neu überarbeitet und in JAVA geschrieben. Die Entwicklung wird von SUN Microsystems und Mitsubishi unterstützt. Basierend auf HMM arbeitet Sphinx sprecherunabhängig und ermöglicht die Spracherkennung mit einem großen Vokabular. Da Sphinx 4 sehr modular aufgebaut ist, lässt es sich sehr einfach durch Plug-Ins erweitern. Ein großes Problem stellt der Zugriff auf die Ressourcen dar. Zur Ausführung benötigt Sphinx 4 eine Java Virtual Machine mit etwa 1 GB Speicher. Außerdem sind die Algorithmen sehr komplex und langsam. [WLK+ 04] Wie alle Spracherkenner benötigt auch Sphinx ein Sprachmodell. Deshalb stellen die Entwickler das Programm Sphinxtrain zur Verfügung, mit dem man sein Sprachmodel zum eigenen Vokabular anlegen kann. Das modellieren einer Sprache ist mit Sphinxtrain wesentlich einfacher als das modellieren mit dem HTK Toolkit. [Car] 3.1.2.2. HTK Toolkit Mit dem Hidden Markov Toolkit kann man aus Sprachsignalen Hidden Markov Modelle erzeugen. Die Entwicklung wurde zuerst an der Cambridge Universität angefangen, später kommerziell von der Firma entropics vertrieben und aktuell steht es wieder zur freien Verfügung. Das Toolkit besteht aus einer Ansammlung von einzelnen Programmen die über Konfigurationsdateien und Startparameter gesteuert werden können. Abbildung 3.1 auf Seite 29 zeigt die Toolkit Architektur mit den dazugehörigen Interface Ein- und Ausgaben. Als erstes müssen die Sprachdaten vorbereitet werden. Mit HSLab können Sprachsignale aufgenommen und bearbeitet werden. Liegen Sprachsignale bereits als Wave-Datei vor können diese mit HCopy direkt in das MFCC Format konvertiert werden. Nachdem die Sprachsignale, das Wörterbuch und die Grammatik vorbereitet sind kann das Training mittels HInit und HRest beginnen, wobei ein Hidden Markov Modell als Ausgabe in eine HMM-Datei geschrieben wird. Die eigentliche Spracherkennung übernimmt das Tool HVite. Der allgemeine Ablauf zur Benutzung des HTK-Toolkits ist in Abbildung 3.2 auf Seite 29 dargestellt. 3. Software 29 Abbildung 3.1.: HTK Software Architektur Abbildung 3.2.: HTK Prozessablauf 3. Software 30 Am Anfang erscheint die Handhabung des Tools ganz einfach, doch aufgrund der vielen Tools und Einstellungsmöglichkeiten ist dennoch viel Einarbeitungszeit nötig. Die Vorteile des Toolkits sind hingegen: • sehr flexibel • wird von den Entwicklern up-to-date gehalten • optimiert für Spracherkennung • sprecherunabhängige Modellierung möglich • sehr gute Dokumentation • läuft unter Linux und Windows • programmiert in C Mehr Informationen erhalten sie in dem ausführlich beschriebenen HTK-Book [YEK+ 01] nach einer Registrierung auf der Webseite der Cambridge University [Cam]. 3.1.2.3. Julius Julius ist ein LVCSR (Large-Vocabulary Continuous Speech Recognition) Spracherkenner. Ursprünglich 1997 von Japanese LVCSR entwickelt, wird das Projekt zurzeit von Interactive Speech Technology Consortium (ISTC) fortgeführt. Julius kann nicht nur Einzelwörter erkennen sondern auch ganze Sätze. Insgesamt beziffert der Entwickler das Vokabular mit 65 535 Wörtern. Die Erkennung verläuft in Echtzeit, wobei die Suche in zwei Durchgängen optimiert wird. Deshalb kann eine Erkennungsrate von über 95% erreicht. Leider können mit Julius keine Sprachmodele erstellt werden, deshalb müssen diese mit externen Tools wie HTK modelliert werden. Nachteile • Dokumentation überwiegend auf Japanisch • Sprachmodellierung über externe Tools Vorteile • sehr gute Erkennungsraten • Vokabular bis 65 535 Wörter • System ist sprecherunabhängig • sehr performant (weniger als 32 MB Arbeitsspeicher benötigt) 3. Software 31 • Echtzeitverarbeitung • viele Einstellmöglichkeiten über zentrale Datei • läuft unter Linux und Windows Ausführliche Informationen erhalten Sie auf der Webseite von Julius [Nag]. 3.1.2.4. Simon listens Das Projekt Simon listens soll behinderten Menschen den Umgang mit dem Computer erleichtern. Der Benutzer kann mit der grafischen Oberfläche ganz bequem sein eigenes Sprachmodell erstellen und trainieren. Nach der Installation von simon ist es wichtig das Hidden Markov Toolkit [Cam] zu installieren, denn die Modellierung der Sprache nimmt simon über das Toolkit vor. Die ausführlich beschriebene Installationsanleitung finden Sie im Kapitel 5. Die eigentliche Spracherkennung läuft über die interne Integration von Julius. Abbildung 3.3.: Komponentenübersicht und Kommunikationsablauf Abbildung 3.3 zeigt die Zusammenarbeit und Kommunikation der Simon Komponenten. Die Tools ssc und sscd ermöglichen das Aufnehmen einer großen Anzahl von Sprachdaten. Die beiden Komponenten simon und simond bilden eine Server/Client Anwendung. simond ist dabei der Erkennungsserver, der mehrere Clients über das Netzwerk bedienen kann. Die grafische Oberfläche ksimond erleichtert dem User die Konfiguration des Erkennungsservers simond [vgl. Gra09, S. 8]. Der modulare Aufbau von Simon listens verleiht dem Projekt eine hohe Flexibilität, wobei auch Plug-Ins implementiert sind. Damit lassen sich verschiedene Szenarien realisieren. Eine ausführliche Dokumentation und Installationsanleitung finden Sie auf der Homepage von simon listens [Sl]. 3. Software 32 3.2. Sprachsynthese Im Sektor der Sprachsynthese sind wesentlich mehr Projekte zu finden als in der Spracherkennung. Hier gibt es zahlreiche kommerzielle und Open-Source Lösungen die sehr natürlich klingende Sprachausgabe ermöglichen. Eine Liste der bekanntesten Projekte finden Sie auf der Webseite von synthetic speech [Bur]. Dort sind auch Demoausgaben zu den jeweiligen Projekten aufgeführt, wobei die Beispiele von dem kommerziellen Nuance Vocalizer und AT&T Natural Voices besonders in ihrer Natürlichkeit beeindruckt haben. Bei den Open-Source Projekten sind BOSS und Mbrola hervorgestochen. 3.2.1. Kommerziell 3.2.1.1. Nuance Vocalizer Nuance Communications ist nicht nur in dem Bereich der Spracherkennung spezialisiert sondern auch in der Sprachsynthese. Die Softwarelösung Nuance Vocalizer wird für Unternehmen und Mobilanwendungen angeboten, wobei über 41 Sprachen inklusive Deutsch unterstützt werden. Seit Jahren nutzt die Deutsche Telekom die TTS-Lösung für ihre Dienste der Telefonauskunft. Bei der Swisscom hat Nuance eine individuelle Lösung implementiert. Dabei können Anrufer per Sprache Zugriff auf Rufnummern und Adressen von Unternehmen und Privathaushalten bekommen. Deshalb legt Nuance besonderen Wert auf die hohe Qualität der Sprachsynthese von Namen und Adressen [Nuab]. 3.2.1.2. AT&T Natural Voices Die Entwicklung von AT&T Natural Voices begann als ein Forschungsprojekt an der AT&T Labs Research. Das fertige Produkt zeigt erstaunliche Ergebnisse. Die Sprachausgabe klingt sehr natürlich und ist kaum von einem realen Sprecher unterscheidbar. AT&T Natural Voices ist in zwei Versionen erhältlich: Desktop und Server. Desktop kostet 295$ und bietet einen SDK (Software Development Kit) für Entwickler. Server ist für 995$ zu haben und ermöglicht das Entwickeln von Serveranwendungen mit TTS. Es wird das Betriebssystem Windows und Linux unterstützt. [AT&] 3. Software 33 3.2.2. Open-Source 3.2.2.1. BOSS BOSS (Bonn Open Synthesis System) wird an dem Institut für Kommunikationsforschung und Phonetik entwickelt und steht als Open-Source Projekt frei zur Verfügung. Das Projekt basiert auf der Client/Server Architektur. Dabei wird die eigentliche Sprachsynthese auf dem Server ausgeführt und zum Client transferiert. Diese Arbeitsweise ermöglicht die Ausführung auf Systemen mit wenig Ressourcen. Die Sprachqualität scheint bisher die beste im Bereich Open-Source zu sein. Allerdings ist die Sprecherauswahl klein und auch die Installation nur für erfahrene Anwender, da BOSS für Linux konzipiert wurde. [BWA+ 05] 3.2.2.2. Mbrola Das Ziel des TCTS Lab der Faculté Polytechnique de Mons (Belgien) war es ein Projekt zu erwecken, welches die Forschung auf dem Bereich der Sprachsynthese steigern sollte. Mittelpunkt ist das Projekt Mbrola, ein TTS-System auf Basis der Diphone Verkettung. Die nicht-kommerzielle Nutzung ist kostenlos. Zwar ist die Qualität der Sprachausgabe nicht so gut wie bei dem BOSS Projekt, aber dafür ist die Auswahl an Sprechern grösser und die Installation des Systems einfacher. Zurzeit sind 35 Sprachen implementiert, darunter auch die Deutsche Sprache mit 7 Sprechern. Zu beachten ist, dass Mbrola kein richtiger Textto-Speech Synthesizer ist, sondern als Input Phoneme benötigt, die von einem externen Programm erzeugt werden [TCT]. Die Installationsanleitung finden Sie im Kapitel 5. 4. Sprecherlokalisierung 34 4. Sprecherlokalisierung Bei der Realisierung der Spracherkennung für mobile Systeme muss man auch auf die Raumbedingungen eingehen. Dabei können Störgeräusche, wie das schließen einer Tür oder Klimaanlagen die Spracherkennung erheblich verschlechtern. Auch das Gespräch von mehreren Person in einem Raum führt zur erheblichen Beeinträchtigung des Gesamtsystems. Um diese variablen Einflüsse zu minimieren kam die Idee auf, Signale nach ihrer Quelle zu orten. So könnte man das Spracherkennungsfenster so wählen, dass nur Signale weiterverarbeitet werden, die in Ihrer Quelle den Ursprung vor dem mobilen Service-Roboter haben. In der Abbildung 4.1 sehen Sie die grünen Erfassungsbereiche für die Spracherkennung. Sprecher außerhalb des Bereichs werden ignoriert. Da zwei Mikrofone eingesetzt werden, kann man nicht feststellen, ob das Signal vor oder hinter dem Roboter erzeugt worden ist. Abbildung 4.1.: Erfassungsbereich für die Spracherkennung. Sprecher im grünen Bereich wird berücksichtigt 4. Sprecherlokalisierung 35 Natürlich kann es dann aber immer noch vorkommen, dass sich grade mehrere Personen vor dem Service-Roboter unterhalten. Um dem entgegenzuwirken, wird der Service-Roboter mit einem Dialogsystem ausgestattet, welches per Sprachsynthese nachfragt, ob er gemeint ist. Bei einer Negativen Antwort dreht sich das System so, dass das Gespräch nun außerhalb des Erkennungsfensters stattfindet. 4.1. Eingesetzte Hardware Für die Lokalisierung benötigt man mindestens zwei Mikrofone mit guter Raumcharakteristik und Empfindlichkeit. Zur Verfügung standen Mikrofone des Typs C3000B AKG (Abbildung 4.2 [AKG]) und ein USB Interface Tascam US-122 (Abbildung 4.3 [Tas]). Damit können 2 separate Signale, hier linker und rechter Kanal, aufgenommen werden. Abbildung 4.2.: Mikrofon C3000B von AKG zur Signalaufnahme für Sprecherlokalisierung Abbildung 4.3.: Eingesetzte USB-Mischpult US-122 von Tascam 4. Sprecherlokalisierung 36 4.2. Kreuzkorrelation Die Lokalisierung beruht auf der Kreuzkorrelationsmethode. In Kapitel 2 wurde beschrieben, dass mittels der Kreuzkorrelation zwei Signale miteinander verglichen werden können. Nicht nur der Vergleich, sondern auch die Phasenverschiebung kann so berechnet werden. Für ein kleines Experiment werden folgende Definitionen festgehalten: • Schallgeschwindigkeit c beträgt in Luft bei 20◦ C 343 ms [SK06, S. 84] • Mikrofonabstand d liegt bei 30cm Abbildung 4.4.: Versuchsaufbau und Positionierung der Sprecher In Abbildung 4.4 ist der Versuchsaufbau dargestellt. Wenn jetzt der Sprecher 1 ein Sprachsignal erzeugt, tritt an den aufgezeichneten Signalen der beiden Mikrofone eine maximale Phasenverschiebung tv max auf. Diese lässt sich mit einem Dreisatz berechnen: d 0, 3m tv max = ⇒ tv max = = 874, 6µs 1s c 343m (4.1) Schaut man sich nun den Verlauf und die Korrelation der original aufgezeichneten Signale an (Abbildung 4.5 auf Seite 37), so stellt man fest, dass der höchste Korrelationskoeffizient bei 163 liegt. Würde Sprecher 2 sprechen, läge der höchste Korrelationskoeffizient bei 200, was eine Phasengleichheit der Signale bedeutet. Also beträgt die zeitliche Verschiebung der Signale hier Samplesv = 200 − 163 = 37Samples . Für die Umrechnung von Samples in eine zeitliche Angabe braucht man die Abtastfrequenz, die bei der Aufzeichnung bei fa = 44kHz lag. 4. Sprecherlokalisierung 37 Abbildung 4.5.: Verlauf und Korrelation der vom rechten und linken Mikrofon aufgezeichneten Signale Nun kann tv wie folgt festlegt werden: tv samplesv 37 = ⇒ tv = = 845µs 1s fa 44000 (4.2) Nach dieser Erkenntnis kann der 90◦ Bereich (tv max = 874, 6µs ) von Sprecher 1 bis Sprecher 2 in zeitliche Abschnitte von tv a = 874,6µs = 9, 72µs eingeteilt und die Richtung des 90 Signals bestimmen werden. Die Implementierung ist in Kapitel 5 zu finden. Bei Versuchen stellte sich eine Abtastung von 512 Werten als zuverlässig heraus. 4. Sprecherlokalisierung 38 4.3. Energieunterschied Eine weitere Methode um die Richtung eines Signals zu bestimmen ist die Energiedifferenz, die zwischen den beiden Eingangssignalen berechnet wird. Zuerst wird das Signal in einem definierten Aufnahmefenster aufgenommen und für jeden Kanal die Energie als Summe aller absoluten Abtastwerte berechnet. Die Aufnahmen wurden bei derselben Konfiguration aufgenommen wie bei der Kreuzkorrelations-Methode. Dabei betrug der prozentuale Energieunterschied bezogen auf die Kanäle etwa 20%. Vor dem Einsatz müssen die Mikrofone kalibriert werden, sodass sie bei Erzeugung einer mittigen Signalquelle annährend die gleiche Energie aufweisen. Diese Messmethode ist zwar nicht so präzise wie die der Kreuzkorrelation, jedoch schneller in der Berechnung und viel einfacher zu implementieren. Grob lässt sich die Signalquelle bestimmen, ob diese rechts oder links erzeugt worden ist. Auch hier ist die Implementation in Kapitel 5 zu finden. 4.4. VoiceTracker Im Laufe des Projekts wurde in ein neuartiges Mikrofonarray investiert, welches die Lokalisierung und Filtrierung der Sprache automatisch regelt. Abbildung 4.6 zeigt den VoiceTracker auf einer Aluminium-Halterung, die das Eigengewicht minimal halten soll. Es besteht aus 8 Mikrofonen welche 360 ◦ Aufnahmen ermöglichen. So kann sich der Sprecher bis zu 7 Meter (laut Hersteller Acoustic Magic) von dem VoiceTracker entfernen und mit dem Computer kommunizieren. Dabei wird elektronisch eine Art von Fokus oder Lokalisation auf den Sprecher realisiert. Mit dem Schalter Field kann der Erkennungsbreich von +/ − 45◦ (narrow-angle mode) bis +/−90◦ (wide-angle mode) eingestellt werden. Deshalb ist die Lokalisierung auf Softwarebasis nicht mehr nötig und im Hauptprojekt auskommentiert. Weitere Informationen entnehmen Sie bitte der beigelegten Bedienungsanleitung zu dem VoiceTracker. Abbildung 4.6.: VoiceTracker auf einer Aluminium-Halterung 5. Implementierung 39 5. Implementierung 5.1. Hardware 5.1.1. SCITOS G5 Auf dem SCITOS G5 Service-Roboter ist ein Computer mit dem Betriebssystem Fedora 12 integriert. Zur Audioaufnahme kann die 3,5 mm Mikrofonbuchse auf der OnBoardSoundkarte verwendet werden. Zudem stehen USB-Anschlüsse für weitere externe Aufnahmegeräte zur Verfügung. Das Betriebssystem bietet das Treiberpacket ALSA und PulseAudio zur Audio-Aufnahme sowie Audio-Wiedergabe.[Met10] 5.1.2. VoiceTracker Wie in Kapitel 4 schon erwähnt, besteht der VoiceTracker aus 8 Mikrofonen die sich auf einen Sprecher fokussieren und Störgeräusche herausfiltern. Dieses Mikrofon-Array bietet erstaunliche Ergebnisse und ist speziell für die kabellose Spracherkennung entwickelt worden. Montiert wird das Mikrofon auf der Vorderseite des Service-Roboters. Da der Roboter so wenig wie möglich mit Gewicht belastet werden sollte, dient ein Aluminiumwinkel als Halterung. Um festzustellen wie das Mikrofon auf verschiedene Raumbedingungen und Ereignisse reagiert sind 4 Testszenarien erstellt und analysiert worden. Als Testraum diente das Robot-Vision Labor an der HAW Hamburg. Dort ist wie in den meisten Räumen eine Klimaanlage installiert und bietet ein stetiges Hintergrundrauschen. Der VoiceTracker war während der Experimente auf +/ − 45◦ Erkennungswinkel und mit eingeschaltetem LDS konfiguriert. Die Versuche haben gezeigt, dass in dieser Einstellung die meisten Störgeräusche entfernt wurden. Szenario 1 - Aufnahmen unter einfachen Raumbedingungen Durchgeführt wurden einfache Testaufnahmen mit der Klimaanlage im Hintergrund. Alle Aufnahmen wiesen eine „Stille“ auf, was darauf hindeutet, dass der VoiceTracker das Rauschen herausgerechnet hat. 5. Implementierung 40 Szenario 2 - Aufnahmen bei eingeschalteten Ultraschallsensoren Wenn die Ultraschallsensoren aktiv sind, erzeugen sie durch das Umschalten der Betriebsart (senden / empfangen) ein Klackern (Abbildung 5.1). VoiceTracker dämpft das Klackern, kann es aber nicht herausfiltern. Allerdings ist die Amplitude des Signals, bezogen auf den Grundwert 1 sehr niedrig, so dass es auf die Spracherkennung kaum Auswirkungen hat. Abbildung 5.1.: Vergleich zwischen VoiceTracker und einfachen Mikrofon bei eingeschalteten Ultraschallsensoren 5. Implementierung 41 Szenario 3 - Aufnahmen beim eingeschalteten Motor Die Abbildung 5.2 zeigt, dass der Motor sehr wenige Störgeräusche verursacht. Somit wäre der Motor keine ernst zu nehmende Störquelle bei der Spracherkennung. Abbildung 5.2.: VoiceTracker-Aufzeichnung beim eingeschalteten Motor Szenario 4 - Armbewegungen Anders als bei den anderen Szenarien ist hier wirklich ein echtes Problem vorhanden. Der VoiceTracker kann die Störgeräusche die durch den bewegenden Arm verursacht werden, nicht herausfiltern. In Abbildung 5.3 ist der Signalverlauf bei maximaler Beweggeschwindigkeit des Roboter-Arms dargestellt. Dabei sieht man, dass die Amplitude an einigen Stellen 20% erreicht. Im Betrieb würde der Spracherkenner versuchen in diesem Signal eine Äußerung zu erkennen. Abhängig davon wie gut das Sprachmodell des Erkenners ist, wird keine gültige Äußerung erkannt. Eine Möglichkeit die Störgeräusche des Arms zu ignorieren sind Parameter in der Konfigurationsdatei welche von der Julius-Engine benötigt wird. Mehr dazu finde Sie im dem Abschnitt 6.3. Abbildung 5.3.: VoiceTracker-Aufzeichnung beim Bewegen des Arms 5. Implementierung 42 5.2. Installation und Konfiguration Nachdem in Kapitel 3 die Software die zur Verfügung steht erläutert wurde und was die Vorund Nachteile dieser sind, kann man folgende Auswahl treffen, die zu der Aufgabenstellung passt: HTK - Hidden Markov Toolkit sehr flexibel, mächtig und in C geschrieben Simon listens - Projekt für Behindertenhilfe ermöglicht komfortables Erstellen und Trainieren eines Sprachmodells Julius - large vocabulary continuous speech recognition decoder performante und quellenoffene Spracherkennung Mbrola - Sprachsynthese natürlich klingende Sprachsynthese mit deutscher Sprachunterstützung Bevor man mit der Installation des Sprachinterfaces und der benötigten Software beginnen kann, müssen einige Voraussetzungen erfüllt sein: • Fedora 12/13 Installation auf einer virtuellen Maschine ist auch möglich. • root Berechtigung Einige Module benötigen root Rechte zur Ausführung • GNU C/C++ Compiler yum install gcc yum install gcc-g++ • CMake yum install cmake • KDE-Bibiotheken yum install kdelibs-* • Flex yum install flex • Bison yum install bison • ALSA yum install alsa* 5. Implementierung 43 • aplay, Soundausgabe über ALSA yum install aplay Es kann vorkommen, dass das Betriebssystem dennoch einige Packete nicht findet. Diese muss man entsprechend der Fehlermeldung beim Kompilieren nachinstallieren. Wichtig! Das Hidden Markov Toolkit und Simon werden ausschließlich für die Modellierung des Sprachmodells benötigt und arbeiten deshalb unabhängig von dem eigentlichen SCITOS Sprachinterface. Die Installation kann so auch unter Windows erfolgen. Dazu sind auf der CD-ROM jeweils auch die Windows-Installationsanleitung und die Installationsdateien vorhanden. Die Windows-Installation wird in dieser Arbeit nicht behandelt, da sonst der Rahmen gesprengt wird. 5.2.1. HTK Das Grundgerüst zur Sprachmodellierung bildet das an der Cambridge University entwickelte Hidden Markov Toolkit. HTK wird auch von Simon zur Modellierung benötigt. Deshalb muss zuerst das gesamte HTK Paket in einen Ordner entpackt werden. Das Archiv finden Sie auf der CD-ROM oder auf der HTK-Webseite [Cam]. Nach dem Entpacken muss HTK mit configure konfiguriert werden. Jetzt kann HTK mittels make install installiert werden. Dabei werden die fertigen ausführbaren Dateien in dem zuvor definierten Ordner abgelegt. % Entpacken [fed@localhost $]# tar xzf HTK-3.3.tar.gz [fed@localhost $]# cd htk % Zierlordner für Binär-Dateien einstellen [fed@localhost htk]# ./configure --prefix=/usr % Kompilieren und installieren [fed@localhost htk]# make install 5.2.2. Simon listens Die Installation von Simon ist wichtig, da mit diesem Tool die Modellierung der Sprache vorgenommen wird. Außerdem erleichtert Simon die Aufnahme von Äußerungen durch eine GUI. Dabei können neue Wörter leicht hinzugefügt, trainiert sowie entfernt werden. Auch kann eine Grammatik für Sprachmodelle definiert werden. Das Archiv finden sie auf der CD-ROM oder auf der Simon Webseite [Sl]. Entpacken Sie das Archiv in einen beliebigen temporären Ordner und führen dort den folgenden Befehl aus: 5. Implementierung 44 [fed@localhost simon-3.0.3]# ./build.sh Jetzt wird Simon kompiliert und installiert. Sie finden die Installierten Programme unter Anwendungen → Zubehör. Die Binären Dateien sind unter /usr/bin/ abgelegt und können direkt in der Shell aufgerufen werden: • simon Hauptprogram • ksimond Server für die Sprachdatenbank mit GUI • simond Server für die Sprachdatenbank ohne GUI • sam Tool zum Testen der Sprachmodelle Bevor man Simon startet, sollte man zuerst ksimond ausführen und ein Benutzerkonto anlegen. Um mehr über das Simon listen Projekt zu erfahren, lesen Sie bitte die auf der CD-ROM vorhandenen E-Books. Nach der Installation kann der temporäre Ordner mit dem Quellcode gelöscht werden. 5.2.3. Julius Julius ist eine Spracherkennungs-Engine mit der die Sprachkommunikation mit dem mobilen Roboter SCITOS G5 realisiert wird. Da die stateMachine mit der Julius-Engine verbunden werden muss, legen Sie einen Ordner julius-scitos auf dem Desktop an und extrahieren dort den Inhalt des Archivs hin. Das Archiv julius-4.1.5.tar.gz kann von der JuliusWebseite [Nag] oder von der CD-ROM bezogen werden. Jetzt kann Julius mit den folgenden Befehlen konfiguriert, kompiliert und installiert werden: % Zielordner für Binäre Dateien festlegen und Audio-Treiber einstellen [fed@localhost julius-scitos]# ./configure --prefix=/usr --with-mictype=alsa % Kompilieren und installieren [fed@localhost julius-scitos]# make install Wichtig sind hier die erstellten Julius-Libraries, die man für das Sprachinterface benötigt. Also löschen Sie diesen Ordner nach der Installation unter keinen Umständen. 5. Implementierung 45 5.2.4. Mbrola Das Wort Sprachkommunikation beinhaltet nicht nur die Spracherkennung sondern auch die Sprachsynthese. Damit ist der Service-Roboter SCITOS in der Lage uns den Status mitzuteilen und einen Dialog zu führen. Die Sprachsynthese besteht aus zwei Komponenten: • txt2pho • Mbrola Mbrola ist ein mehrsprachiger Sprachsynthesizer und braucht als Input eine Phone-Datei aus der die Sprache synthetisiert wird. Deshalb wird noch das Tool txt2pho benötigt, welches den eingegebenen Text in eine Phone-Datei umwandelt. Mbrola interpretiert die Phone-Datei und erstellt eine Wave-Datei als Output. Diese kann mit einem beliebigen Player (z.B. aplay ) abgespielt werden. Für weitere Informationen besuchen Sie die Webseite von Mbrola [TCT]. Kopieren Sie zuerst den Ordner SOFTWARE/MBROLA von der CD-ROM auf den Desktop. In diesem Ordner befinden sich alle nötigen Binärdateien, sowie die Quellcodes. Des Weiteren befinden sich sechs unterschiedliche Stimmen der deutschen Sprache für Mbrola. Öffnen Sie nun ein Terminal und wechseln Sie in das zuvor auf den Desktop kopierte Verzeichnis MBROLA. Installieren Sie Mbrola mit dem Befehl [fed@localhost TTS]# cp MBROLA/bin/mbrola-linux-i386 /usr/local/bin/mbrola Es folgt das Installieren von txt2pho und den dazugehörigen Tools: [fed@localhost MBROLA]# cd txt2pho [fed@localhost txt2pho]# cp txt2pho /usr/local/bin/ % txt2pho Konfigurationsdatei anlegen [fed@localhost txt2pho]# cp txt2phorc /etc/txt2pho % numfilt kompilieren und installieren [fed@localhost numfilt-0.1]# cd .. && cd numfilt-0.1 [fed@localhost numfilt-0.1]# gcc -o numfilt numfilt.c [fed@localhost numfilt-0.1]# cp numfilt /usr/local/bin/ % pipefilt kompilieren und installieren [fed@localhost numfilt-0.1]# cd .. && cd pipefilt [fed@localhost pipefilt]# g++ -o pipefilt pipefilt.cc [fed@localhost pipefilt]# cp pipefilt /usr/local/bin/ % preproc kompilieren und installieren [fed@localhost pipefilt]# cd .. && cd preproc [fed@localhost preproc]# make clean && make [fed@localhost preproc]# cp preproc /usr/local/bin/ 5. Implementierung 46 % Arbeitsverzeichnis txt2speech anlegen [fed@localhost preproc]# cd .. [fed@localhost txt2pho]# mkdir /usr/local/txt2speech [fed@localhost txt2pho]# cp -r data/ /usr/local/txt2speech % Sprachdateien kopieren [fed@localhost txt2pho]# cd .. [fed@localhost MBROLA]# cp -r DE-STIMMEN/* /usr/local/txt2speech % Für den Anwender verfügbar machen [fed@localhost MBROLA]# chmod -R o+rx /usr/local/txt2speech Nach der Installation ist es wichtig txt2pho richtig zu konfigurieren. Dazu öffnen Sie mit gedit oder einem anderen Texteditor die in /etc liegende Konfigurationsdatei txt2pho. Jetzt ändern Sie die folgenden Zeilen: DATAPATH=/home/tpo/txt2pho/data/ ändern in DATAPATH=/usr/local/txt2speech/data/ und INVPATH=/home/tpo/txt2pho_data/ ändern in INVPATH=/usr/local/txt2speech/data/ Damit ist die Installation erfolgreich abgeschlossen. Für einen Funktionstest geben sie den folgenden Befehl in ein Terminal ein: [fed@localhost ]# echo “Guten Tag“ | txt2pho > /tmp/test.pho && mbrola /usr/local/txt2speech/de5/de5 /tmp/test.pho /tmp/test.wav && aplay /tmp/test.wav 5.2.5. SCITOS-Sprachinterface Zum Schluss kann das eigentliche SCITOS Sprachinterface kompiliert und installiert werden: Dazu kopieren Sie den SCITOS Interface Ordner SOFTWARE/SPRACHINTERFACE/SCITOSsi von der CD-ROM in den auf dem Desktop liegenden Ordner julius-scitos: cp //CDROM/SOFTWARE/SPRACHINTERFACE/SCITOSsi /home/fed/ Desktop/julius-scitos/ Jetzt gehen Sie im Terminal in den SCITOSsi Ordner und führen dort diese Befehle aus: % Kompilieren [fed@localhost SCITOSsi]# make distclean && make 5. Implementierung 47 Erstellt wird eine binäre Datei SCITOSsi, die das ausführbare Sprachinterface bildet. Das Sprachinterface benötigt noch das Sprachmodell, damit es ausgeführt werden kann. Wie man ein eigenes Sprachmodell anlegt oder erweitert lesen Sie in Kapitel 6. Ein Beispiel-Sprachmodell befindet sich auch auf der CD-ROM in dem Ordner SOFTWARE/SPRACHINTERFACE/KIARA-Sprachmodell. Kopieren Sie diesen Ordner auf Ihren Desktop. Verschieben Sie nun die binäre Datei SCITOSsi in diesen Ordner und rufen dort mit dem Terminal folgenden Befehl auf: [fed@localhost KIARA Demo]# SCITOSsi -C kiara.conf Die Kommunikation kann jetzt nach dem Zustandsdiagram aus Abbildung 5.10 auf Seite 54 stattfinden. Standardmäßig ist die Sprachausgabe über Mbrola ausgeschaltet. Diese kann vor dem Kompilieren von dem Sprachinterface in der Datei DEFINES.h eingeschaltet werden. 5.3. SCITOS-Sprachinterface Das SCITOS-Sprachinterface ist in C/C++ entwickelt worden und bildet den Kern der Sprachkommunikation. Es baut auf der Spracherkennungs-Engine Julius auf und nutzt die mit Simon erstellten Sprachmodelle für die Erkennung. Der Aufbau besteht aus den Hauptkomponenten • Spracherkenner SCITOSsi.cpp • Nachrichtenschlange msgQueue.cpp • Dispatcher dispatcherThread.cpp • Zustandsautomat stateContext.cpp, state.cpp, stateImpl.cpp, timerMachine.cpp • Sprachsynthesizer sayText.cpp Von der Spracherkennung bis zur Ausführung eines Befehls, wird der Ablauf in einem Diagramm (Abbildung 5.4 auf Seite 48) dargestellt. Die eigentliche Spracherkennung läuft über die JuliusLib. Erkennt nun der Spracherkenner eine Äußerung, werden die erkannten Worte in ein Nachrichtenpaket verpackt und an die Message Queue gesendet. Der Dispatcher 5. Implementierung 48 Abbildung 5.4.: Übersicht der Komponenten und deren Arbeitsweise wartet auf Nachrichten der Warteschlange und sobald eine eintrifft, wird sie mit dem Zustandsautomaten verarbeitet. Der Spracherkenner und der Dispatcher arbeiten jeweils in einem eigenen Thread, daher läuft die Verarbeitung parallel ab. Da alle Header- und Quellcode-Dateien des Projekts ausführlich kommentiert sind, wird im Folgenden nur der Kern aller Komponenten beschrieben. Eine mit Doxygen generierte Dokumentation ist ebenfalls auf der beiligenden CD-ROM enthalten. 5.3.1. Spracherkenner SCITOSsi.cpp Als Grundlage für die Programmierung des Sprachinterfaces wurde das Beispielprojekt julius-simple von Julius herangezogen. Sie finden das Originalprojekt in der Julius-Archiv Datei julius-4.1.5.tar.gz auf der CD-ROM. Bei der Implementierung wurden unnötige Verarbeitungsschritte und Ausgaben entfernt und der Dispatcher samt der Zustandsmaschine hinzugefügt. Die neu implementierten Komponenten müssen in der folgenden Reihenfolge definiert und instanziiert werden: 1 2 3 4 /∗ create instances ∗/ TimerMachine : : g e t I n s t a n c e ( ) ; SayText : : g e t I n s t a n c e ( ) ; 5 6 7 / ∗ sound l o c a t i o n d i s a b l e d , u s i n g V oi c e T ra c k er ∗ / / / SoundSource : : g e t I n s t a n c e ( ) ; 8 9 10 11 12 /∗ f i r s t state Z _ i d l e ∗ z1 ; z1=new Z _ i d l e ; ∗/ 5. Implementierung 13 14 15 16 49 /∗ create context to hold the s t a t e p o i n t e r ∗/ S t a t e C o n t e x t ∗ sc ; sc=new S t a t e C o n t e x t ; sc −>s e t S t a t e ( z1 ) ; 17 18 19 20 / ∗ c r e a t e and run d i s p a t c h e r ∗ / DispatcherThread d i s p ; d i s p . s t a r t ( sc ) ; Kern des Spracherkenners ist die JuliusLib. Nachdem eine Äußerung erkannt worden ist, wird das zuvor registrierte Callback static void output_result(Recog *recog, void *dummy)aufgerufen und die erkannten Sätze und Wörter verarbeitet. Wie in dem unterstehenden Listing zu sehen ist, werden alle erkannten Worte einzeln in Nachrichtenpakete verpackt und an die Nachrichtenschlange verschickt. 1 2 3 4 5 6 7 8 9 10 / ∗ send t h e r e c o g ni z e d word w i t h t h e ∗ ∗ score and sound d i r e c t i o n t o d i s p a t c h e r ∗ / f o r ( i =0; i <seqnum ; i ++) { / ∗ NOTE: SoundLocator i s d i s a b l e d , ∗ ∗ so d e f a u l t d i r e c t i o n i s MIDDLE . ∗ / p r i n t f ( " ’ \%s " ’ , winfo −>woutput [ seq [ i ] ] ) ; MsgQueue : : g e t I n s t a n c e () − >sendMsg ( winfo −>woutput [ seq [ i ] ] , s−>c o n f i d e n c e [ i ] , MIDDLE ) ; } Ein Nachrichtenpacket besteht aus dem erkannten Wort, der erkannten Wahrscheinlichkeit und der Signalquelle. Allerdings ist die Sprecherlokalisierung ausgeschaltet, da der VoiceTracker eingesetzt wird. Es wird einfach der Standartwert MIDDLE mitgesendet, um zu simulieren, dass das Signal von vorne auf den Roboter erzeugt worden ist. Der Grund dafür ist das neue VoiceTracker Mikrofonarray, welches während des Projekts erworben und eingesetzt wurde. Die Wahrscheinlichkeit des erkannten Wortes wird als double im Wertebereich von 0 ... 1 angegeben. Dabei steht der Wert 1 für 100%. Der Spracherkenner läuft in einem eigenen Thread. 5. Implementierung 50 5.3.2. Nachrichtenschlange msgQueue.cpp Da zur Abarbeitung mehrere Threads arbeiten sollen, ist es nötig Daten zwischen den Threads auszutauschen. Dafür eignet sich eine IPC Message Queue, die Nachrichten von einem Thread entgegen nimmt und an einen anderen weiterleitet. Deshalb muss die Nachrichtenschlange auch Thread-Safe sein. An dem Klassendiagramm in Abbildung 5.5 sieht man, dass die Klasse noch einen Struct msgbuf definiert hat. Dieser bildet das Nachrichtenpaket ab, welches über die Nachrichtenschlange gesendet wird. Abbildung 5.5.: Klassendiagramm der Nachrichtenschlange Des Weiteren ist die MsgQueue-Klasse als Singleton [vgl. HKK05, S. 664] implementiert. So ist die ganze Programmlaufzeit nur ein Objekt vorhanden, über welches die POSIX IPC Message Queue angesprochen werden kann. 5. Implementierung 51 5.3.3. Dispatcher dispatcherThread.cpp Abbildung 5.6.: Kommunikationsdiagramm vom Dispatcher zum Zustandsautomaten Nachdem der Spracherkenner eine Nachricht an die Message Queue gesendet hat, holt auf der anderen Seite der Dispatcher die Nachrichten ab und verarbeitet diese mit dem Zustandsautomaten (Abbildung 5.6). Da diese Verarbeitung in einem Thread stattfinden soll, ist DispatcherThread von der Klasse Thread (thread.cpp) abgeleitet. Das UML-Diagramm in Abbildung 5.7 auf Seite 51 zeigt den Zusammenhang der einzelnen Komponenten. Dabei stellt die Klasse Thread Grundfunktionen zum Erstellen, Zuweisen und Starten eines Threads zur Verfügung. Der Struct rbuf ist der gleiche Typ wie sbuf aus der Klasse MsgQueue. Abbildung 5.7.: Klassendiagramm des Dispatchers Nach der Instanziierung der DispatcherThread Klasse muss beim Aufruf der Methode start() unbedingt ein StateContext angegeben werden. Der leere Aufruf führt zu einer Ausgabe auf das Terminal: 5. Implementierung 52 Richtig! /∗ f i r s t state Z _ i d l e ∗ z1 ; z1=new Z _ i d l e ; 1 2 3 ∗/ 4 /∗ create context to hold the s t a t e p o i n t e r ∗/ S t a t e C o n t e x t ∗ sc ; sc=new S t a t e C o n t e x t ; sc −>s e t S t a t e ( z1 ) ; 5 6 7 8 9 / ∗ c r e a t e and run d i s p a t c h e r ∗ / DispatcherThread d i s p ; d i s p . s t a r t ( sc ) ; 10 11 12 Falsch! 1 2 DispatcherThread d i s p ; d i s p . s t a r t ( NULL ) ; Nun läuft der Thread des Dispatchers und bleibt in einer while-Schleife der Methode run(). Hier werden die Nachrichten aus der Message Queue abgeholt und verarbeitet. Der Code-Ausschnitt aus dispatcherThread.cpp 1 2 3 4 5 6 7 8 / ∗ check i f t h e message pass t h e min . score and t h e d i r e c t i o n ∗ / i f ( r b u f . d i r e c t i o n ==MIDDLE && r b u f . score >= MIN_SCORE) { i f ( ( ( S t a t e C o n t e x t ∗ ) arg ) ! = NULL ) ( ( S t a t e C o n t e x t ∗ ) arg)−>parseMessage ( r b u f . mtext ) ; else p r i n t f ( " d i s p a t c h e r : %s \ n " , r b u f . mtext ) ; } prüft die ankommende Nachricht auf die Signalrichtung (direction) und die Erkennungswahrscheinlichkeit (score). Werden die in DEFINES.h definierten Grenzwerte eingehalten, wird der Nachrichtentext mtext mit dem in StateContext gespeicherten Zustand abgearbeitet. 5. Implementierung 53 5.3.4. Zustandsautomat stateContext.cpp, state.cpp, stateImpl.cpp Für die Abarbeitung der spezifischen Nachrichten eignet sich am besten ein Zustandsautomat. Die Implementierung ist sehr einfach gehalten, sodass eine Erweiterung oder Änderung möglich ist. Das Klassendiagramm der Komponenten ist in Abbildung 5.8 dargestellt. Abbildung 5.8.: Klassendiagramm des Zustandsautomaten und der Zustände Die Klasse StateContext hält mit dem Zeiger pState den aktuellen Zustand fest, wobei der Anfangszustand mit setState() erst zugewiesen werden muss. Die Methode parseMessage() leitet die ankommende Nachricht an den aktuellen Zustand in pState weiter und ruft dort die reaction()-Methode auf. In der Datei stateImpl.cpp sind alle implementierten Zustände zu finden, wobei die Klasse State als abstrakte Klasse dient. Das Zustandsdiagramm des Demo-Projekts KIARA ist in Abbildung 5.10 auf Seite 54 zu finden. Der Übergang von einem Zustand zum anderen wird durch den new-Operator Aufruf realisiert. Hierbei wird das Objekt des aufrufenden Zustands durch das Objekt des neuen ersetzt (Abbildung 5.9). Das hat den Vorteil, dass der Speicher und die Speicherverwaltung wenig beansprucht werden. Abbildung 5.9.: Zustandswechsel mit dem new-Operator 5. Implementierung Abbildung 5.10.: Zustandsdiagramm des Demo-Projekts KIARA 54 5. Implementierung 55 Zustandsautomaten erweitern In diesem Abschnitt wird dem KIARA-Zustandsautomaten (Abblidung 5.10 auf Seite 54) ein neuer Zustand hinzugefügt. Das erweiterte Zustandsdiagramm ist in Abbildung 5.11 dargestellt. Befindet sich der Automat im Befehlszustand Z_command, so soll der neue Zustand Z_neuer_Zustand durch den Befehl „test“ erreicht werden. Zu Testzwecken wird dann eine Äusserung über den Sprachsynthesizer ausgegeben und nach einem Timeout von 2 Sekunden wieder in den Befehlszustand Z_command zurückgekehrt. Abbildung 5.11.: Das erweiterte Zustandsdiagramm mit dem neuen Zustand Um einen neuen Zustand hinzuzufügen muss zuerst ein Eintrag in der Header-Datei statesImpl.h vorgenommen werden: 1 2 3 4 5 6 7 8 ... c l a s s Z_neuer_Zustand : p u b l i c S t a t e { public : Z_neuer_Zustand ( ) ; void r e a c t i o n ( char ∗ Message ) ; }; ... Nun muss die Klasse Z_neuer_Zustand in der Quellcode-Datei statesImpl.cpp implementiert werden: 1 2 3 4 5 6 7 8 9 10 11 12 13 ... / ∗ K o n s t r u k t o r , E i n t r i t t i n einen Zustand ∗/ Z_neuer_Zustand : : Z_neuer_Zustand ( ) { TimerMachine : : g e t I n s t a n c e () − > addTimer (2000 , " z_neuerZstd_to " ) ; SayText : : g e t I n s t a n c e () − > say ( " Neuer Zustand e r r e i c h t ! " ) ; } / ∗ H i e r werden d i e z u g e s t e l l t e n N a c h r i c h t e n v e r a r b e i t e t ∗ / void Z_neuer_Zustand : : r e a c t i o n ( char ∗ Message ) { i f ( strcmp ( Message , " z_neuerZstd_to " ) = = 0 ) new ( t h i s ) Z_command ; } 5. Implementierung 56 Zum Schluss ist noch die Transition von Zustand Z_command zu Z_neuer_Zustand nötig: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 void Z_command : : r e a c t i o n ( char ∗ Message ) { ... i f ( strcmp ( Message , " f a h r " )==0 | | strcmp ( Message , " motor " ) = = 0 ) { new ( t h i s ) Z_fahren ; } else / ∗ < Erweiterung > ∗/ i f ( strcmp ( Message , " t e s t " ) = = 0 ) { new ( t h i s ) Z_neuer_Zustand ; } else / ∗ </ Erweiterung > ∗ / i f ( strcmp ( Message , " u l t r a s c h a l l " ) = = 0 ) { new ( t h i s ) Z_sensor_US ; } .... } Das Wort „test“ muss auch im Sprachmodell aufgenommen werden. Wie man ein neues Wort einem Sprachmodell hinzufügt ist in Kapitel 6 beschrieben. Achten Sie darauf, dass die Groß- und Kleinschreibung des Wortes im Sprachmodell und im implementierten Zustand gleich sein müssen. 5. Implementierung 57 timerMachine.cpp Zu sehen sind auch Timeouts die in der Klasse TimerMachine implementiert sind. Wie MsgQueue ist auch TimerMachine als Singleton programmiert. Des Weiteren läuft diese Klasse als separater Thread, abgeleitet von der Thread-Klasse. Das hat den Vorteil, dass alle Timer zentral verwaltet werden und unabhängig vom Zustandsautomaten ablaufen. Nachdem z.B. ein Zustand mit der Methode addTimer() einen Timer mit seiner spezifischen Nachricht erstellt, legt TimerMachine die Informationen in einem Array ab. Dann prüft der Thread, nach der in DEFINES.h definierten Zeit T IMER_DELAY , den Ablauf der Timer in dem Array und sendet gegeben falls die Timeout-Nachricht an die IPC Message Queue. Der schematische Ablauf ist in der Abbildung 5.12 gezeigt und das Klassendiagramm in Abbildung 5.13 . Abbildung 5.12.: Kommunikationsdiagramm von TimerMachine zum Zustandsautomaten Abbildung 5.13.: Klassendiagramm des Zeitgebers TimerMachine 5. Implementierung 58 5.3.5. Sprachsynthesizer sayText.cpp Der Sprachsynthesizer ist die am einfachsten implementierte Komponente. Für den globalen Zugriff wurde es in dem Singleton Design Pattern programmiert. Damit diese Komponente funktionieren kann, muss unbedingt die Installation von Mbrola auf Seite 45 durchgeführt werden. Deshalb ist der Sprachsynthesizer über die Variable TTS in DEFINES.h standardmäßig ausgeschaltet. In der Klassenansicht (Abbildung 5.14) ist zu erkennen, dass der Kern in der Funktion say() liegt. Beim Aufruf der Funktion muss der Text als ein char-Array übergeben werden. Abbildung 5.14.: Klassendiagram von SayText Dabei wird ein Systembefehl generiert, der die Tools echo, txt2pho, mbrola und aplay kombiniert und mit system() ausführt. Sind Änderungen geplant, achten Sie bitte darauf, dass der Befehl system() blockierend und nicht-blockierend ausgeführt werden kann. Blockierend bedeutet dass der Prozess bis zum Beenden der Funktion angehalten wird. Das Blockieren an dieser Stelle ist wichtig, damit die synthetisierte Ausgabe nicht von einer anderen überlagert werden kann. Folgendes Listing zeigt die Nutzung des Befehls: blockierend 1 system ( " mkdir t e s t " ’ ) ; nicht-blockierend 1 system ( "&mkdir t e s t " ) ; 5. Implementierung 59 5.4. Sprecherlokalisierung 5.4.1. Kreuzkorrelation main.cpp, soundSource.cpp Die Lokalisierung wird hauptsächlich in der Klasse SoundSource realisiert. Methode int SoundSource::getDirection() nimmt über den ALSATreiber eine definierte Menge an Frames auf und leitet den Puffer weiter an die Funktion int SoundSource::sndSource(short * buf, int size) um die Richtung mittels der Kreuzkorrelation zu berechnen. Als Rückgabewert wird RIGHT, LEFT, MIDDLE und NO_CHANGE zurückgegeben. Die Werte sind in der Datei DEFINES.h definiert. Der Projektordner befindet sich in dem Ordner SOFTWARE/SPRECHERLOKALISIERUNG/xcorr_locate auf der CD-ROM. Beim Kompilieren muss die ALSA Bibliothek angegeben werden: g++ -o main main.cpp soundSource.cpp -lasound 5.4.2. Energieunteschied power_locate.cpp Im Prinzip ist das Programm genau so aufgebaut wie das der Kreuzkorrelation, nur dass sich die Berechnung auf die aufgenommene Signalenergie bezieht. Es werden die absoluten Werte berechnet, sodass auch die negativen Anteile des Signals berücksichtigt werden. Außerdem ist noch die Klasse ProgressBar dabei. Sie ermöglicht die Anzeige der ermittelten Signalrichtung in einer Konsole. Das Projekt ist in dem Ordner SOFTWARE/SPRECHERLOKALISIERUNG/power_locate auf der CD zu finden. Auch hier muss beim Kompilieren die ALSA Bibliothek angegeben werden: g++ -o power_locate power_locate.cpp progressBar.cpp -lasound 6. Anwendung 60 6. Anwendung In diesem Kapitel wird auf die Schritte eingegangen, die notwendig sind um ein Sprachmodell für das SCITOS-Sprachinterface zu erstellen oder das bereits vorhandene Demo-Projekt KIARA zu erweitern. Dazu muss die Installation aus Kapitel 5 bereits erfolgreich durchgeführt worden sein. 6.1. Sprachmodell erzeugen Bevor man überhaupt mit der Sprachmodellierung beginnt, sollte man sich zuerst Gedanken machen, welche Worte erkannt werden sollen und wie darauf zu reagieren ist. Am besten lässt sich das in einem Zustandsdiagramm darstellen. Hier wird Schritt für Schritt das Sprachmodell für das Zustandsdiagramm (Abbildung 5.10 auf Seite 54) des Demo-Projekts KIARA erzeugt. Die Modellierung geschieht mit Simon. Starten Sie Simon und stellen Sie die Verbindung zu dem simond Server her. 6.1.1. Schattenwörterbuch HADIFIX BOMP In Simon besteht die Möglichkeit mit einem Schattenwörterbuch zu arbeiten. Es beinhaltet die Lautschrift zu den vorhandenen Wörtern. Außerdem bietet das HADIFIX BOMP Schattenwörterbuch Terminalinformationen, welche hilfreich für die Grammatikbildung sind. Da HADIFIX BOMP [PWU] einer restriktive Lizenz unterliegt muss es über Simon heruntergeladen werden. Dazu navigieren Sie in Simon auf Vokabular → Wörterbuch importieren. Folgen Sie dem Assistenten bis in das Menü HADIFIX Wörterbuch importieren und wählen die Option Das HADIFIX BOMP automatisch herunterladen und installieren. Nach Eingabe Ihrer Daten und Akzeptieren der Lizenzbestimmungen wird es heruntergeladen und installiert. Eine Kopie befindet sich ebenfalls auf der beigelegten CD-ROM im Ordner SOFTWARE/SIMON. 6. Anwendung 61 6.1.2. Wort hinzufügen Jedes vorkommende Wort in unserem Zustandsdiagramm muss einzeln hinzugefügt werden. Es ist empfehlenswert eine Liste (Tabelle 6.1) mit dem gesamten Vokabular zu erstellen, die einen guten Überblick verschafft und später zum Erstellen der Grammatik dient. an arm aufladen aus ausschalten batterie einschalten fahr hinten ins kiara labor laser links motor nach rechts status stop ultraschall vorne Tabelle 6.1.: Das gesamte Vokabular aus dem KIARA Zustandsdiagramm Um ein Wort hinzuzufügen betätigen Sie in Simon den Button Wort Hinzufügen und geben das entsprechende Wort ein. Im kommenden Fenster werden nun das Wort, das dazugehörige Terminal und die Aussprache angezeigt, soweit es im Schattenlexikon verfügbar ist. Die Terminale sind für die Grammatik wichtig, denn diese ermöglicht uns Wortketten und Sätze zu bilden. Mit der Aussprache ist die Lautschrift gemeint, welche in die statistischen Berechnungen der HMMs einfließt. Die Liste aller verfügbaren Terminale im HADIFIX BOMP Lexikon ist in Tabelle 6.2 auf Seite 62 dargestellt [RB08, S. 42]. Im nächsten Schritt wird die Lautstärke des Mikrofons geprüft. Danach folgen Sie dem Assistenten um Aufnahmen zu erstellen. Sprechen Sie dabei ganz normal und verständlich, nicht extra langsam oder zu schnell. Nach dem Hinzufügen des Wortes wird Simon das Sprachmodell, auch wenn es nur ein Wort ist, kompilieren und in dem Benutzerordner ablegen. Sie finden den Ordner abhängig vom Betriebssystem in: Windows %appdata%\.kde\share\apps\simond\models\USERNAME\active Linux ~/.kde/share/apps/simond/models/USERNAME/active Wiederholen Sie die Vorgänge für alle Wörter aus dem Vokabular. Das aktuelle Vokabular in Simon kann durch den Reiter Vokabular aufgerufen werden. Sollte ein Wort nicht im Schattenlexikon vorhanden sein, kann es trotzdem hinzugefügt werden. Als Beispiel wählen wir das Wort „einschalten“ welches nicht im HADIFIX BOMP Lexikon vorhanden ist, dafür aber die Teilworte „ein“ und „schalten“. Nun nimmt man die Lautsprache der Teilworte und fügt diese zusammen zu gls aI n S a l t @ n = gls aI n + S a l t @ n . Jetzt fehlt nur noch das richtige Terminal. Da das Wort „einschalten“ ein Verb ist wählt man VRB. 6. Anwendung ADD ADV ART INJ KNJ MOD NAM NEG NOM NUM PPR PRO QUAL QAN QAV QPN QPV QAL REL REFL RFW SBJ TME VEH VEM VES VEW VRB 62 Additive, Präpositionen oder Postpositionen Adverbien Artikel Interjektion Konjugation modales Formwort Namen Negativpronomen, Negation Nomen Numerale Personalpronomen Pronomen Qualifier, dienen zum Qualifizieren andere Wortformen QUAL, Adnominal QUAL, Adverb: QUAL, die syntaktisch nur die Position des Adverbs einnehmen QUAL, Prädikativ, Nomen QUAL, Prädikativ, Adverb: QUAL, die prädikativ oder adverbial funktionieren Attributive Alternanten der QPV Relativpronomen Reflexivpronomen reflexives Formwort, Pronomen in reflexiver Funktion Subjunktion = unterordnendes Wort Tmesis fähiges Präverb, Zerlegen von Verbkonstruktionen Hilfsverb ’haben’ Modalverben Hilfsverb ’sein’ Hilfsverb ’werden’ Verben Tabelle 6.2.: Liste der Wortarten aus dem HADIFIX BOMP Lexikon [RB08] 6. Anwendung 63 6.1.3. Grammatik erzeugen Die Grammatik beschreibt die Reihenfolge der Wörter in der diese vorkommen können. Bezogen auf das KIARA Zustandsdiagramm und Vokabular sind in Tabelle 6.3 auszugsweise zugelassene Wortkombinationen mit den dazugehörigen Terminalen abgebildet. kiara NAM kiara NAM ultraschall NOM laser NOM fahr VRB fahr VRB einschalten VRB aus ADD nach ADD ins ADD rechts ADD Labor NOM Tabelle 6.3.: Beispiel für gültige Wortkombinationen und Terminale Simon bietet unter dem Reiter Grammatik den Button Satz hinzufügen mit dem man die Terminale einer Wortkette eingeben kann umso eine Grammatik zu erzeugen. Natürlich wäre die manuelle Eingabe jeder Wortkombination aus dem KIARA Zustandsdiagramm sehr aufwendig, deshalb kann man durch das Importieren von Grammatik aus einem Text oder einer Textdatei viel Zeit sparen. Legen sie dazu eine Textdatei an und schreiben dort alle möglichen Wortkombinationen betreffend dem Zustandsdiagramm auf. Die fertige Textdatei zu dem KIARA Zustandsdiagramm ist bereits vorhanden → CD-ROM/DOKUMENTATION/SPRACHINTERFACE/KIARA Grammatik.txt. Dabei sind auch Einzelworte pro Zeile zugelassen. Navigieren Sie mit dem Button Importieren im Grammatik -Menü zu dem Import-Assistenten und befolgen dort die Hinweise zum Importieren einer Textdatei. Nun wird Simon alle Terminale nach dem Satzbau automatisch anlegen und daraus eine Grammatik generieren. 6.1.4. Training Nachdem nun alle Wörter hinzugefügt worden sind und eine Grammatik vorhanden ist, kann das Sprachmodell trainiert werden. Das Training ist für die Verbesserung der Spracherkennung notwendig. Es gibt drei Möglichkeiten das Sprachmodell zu trainieren: • Einzelworttraining • Satztraining • Texttraining 6. Anwendung 64 Bevor der Spracherkenner überhaupt was erkennen kann, muss das zu erkennende Wort mindestens 10-mal aufgenommen worden sein. Dann kann das System als sprecherabhängig angesehen werden. Für ein Sprecherunabhängiges System werden Aufnahmen des gesamten Vokabulars von etwa 100 Sprechern empfohlen. Die Anzahl der Aufnahmen zu jedem Wort finden Sie in der Spalte Erkennungsrate im dem Vokabular -Menü. Einzelworttraining Gehen Sie in den Reiter Vokabular. Nun wählen Sie das Wort aus, welches trainiert werden soll und bestätigen die Auswahl mit dem Button Zum Training hinzufügen. Mit dem Button Trainiert die ausgewählten Wörter wird das Training gestartet. Das Einzelworttraining eignet sich nur für Systeme die einzelne Kommandos erkennen sollen. Für unseren Fall ist es also nicht nötig Einzelworttraining zu betreiben. Es wird erst dann wichtig, wenn die Erkennungsraten von bestimmten Wörtern verbessert werden sollen. Dazu mehr im Abschnitt 6.3. Satztraining Anders als das Einzelworttraining eignet sich das Satztraining durchaus für unser Projekt. Nach der Auswahl der Wörter, die trainiert werden soll, muss man das Häkchen Sätze generieren setzen. Beim Training generiert Simon nun Sätze aus den ausgewählten Wörtern, die auf die definierte Grammatik zutreffen. Das ermöglicht dem System die Erkennung von Wortketten. Texttraining Mindestens genau so mächtig wie das Satztraining ist das Texttraining. Dabei wird das Training anhand eines Textes oder einer Textdatei generiert. Da bereits alle Wortkombinationen in eine Textdatei geschrieben sind (siehe Abschnitt 6.1.3) können diese in das Training importiert werden. Dazu rufen Sie im Training-Menü über den Button Text hinzufügen den Import-Assistenten auf und importieren dort die vorhandene Textdatei. Nach dem Importieren kann das Training des gesamten Vokabulars und Wortkombinationen mit Start Training gestartet werden. Das Texttraining ist deshalb die beste und effizienteste Methode um ein Sprachmodell zu trainieren. 6. Anwendung 65 6.1.5. Modell testen Nachdem das Sprachmodell hinreichend trainiert ist kann der erste Spracherkennungsversuch mit Simon gestartet werden. Zuerst muss Simon beigebracht werden die erkannten Wörter als Tastatureingaben auszugeben. Dazu befolgen Sie folgende Schritte um das Diktion Plug-In zu aktivieren: Menü Aktionen verwalten aufrufen : Kommandos → Plug-Ins verwalten Plug-In Diktion hinzufügen : Hinzufügen → Diktion → OK Jetzt kann man die Spracherkennung mit Simon durch die Schaltfläche Aktivieren starten. Öffnen Sie einen beliebigen Texteditor (Notepad, gedit, etc.) und sprechen einige Äußerungen aus dem trainierten Vokabular. Wenn alles richtig eingestellt ist und die Erkennungsrate für die Vokabeln bei mindestens 10 Aufnahmen liegt, sollte Simon die erkannten Worte in den Texteditor als Tastatureingabe ausgeben. Damit lässt sich das Sprachmodell auf seine Qualität testen bevor es mit in dem SCITOS-Sprachinterface eingesetzt wird. 6.2. Sprachmodell mit dem SCITOS-Sprachinterface nutzen In diesem Abschnitt ist zu lesen, wie man das erzeugte oder schon vorhandene Sprachmodell in das SCITOS-Sprachinterface importiert. Da Simon nur ein Client ist, läuft die Verwaltung über den Server simond. Simond speichert die Sprachmodelle abhängig von dem Betriebssystem in: Windows %appdata%\.kde\share\apps\simond\models\USERNAME\active Linux ~/.kde/share/apps/simond/models/USERNAME/active 6. Anwendung 66 Ein Sprachmodell besteht aus dem Hidden Markov Model und der dazugehörigen Grammatik. Die HMMs sind implementiert in den Dateien hmmdefs hmmdefs_loc tiedlist und die Grammatik in model.dfa model.dict model.grammar simple.voca Für den Import in das SCITOS-Sprachinterface kopieren Sie die HMM-Dateien in Ordner SCITOSsi\hmm und die Grammatik-Dateien in SCITOSsi\grammar. Damit wäre der Import in wenigen Schritten abgeschlossen. Jetzt können Sie die Spracherkennung durch die Eingabe des folgenden Befehls starten: [fed@localhost KIARA Demo]# SCITOSsi -C kiara.conf Die Datei kiara.conf ist eine Konfigurationsdatei für die Julius-Engine. Die Konfigurationsparameter sind intern ausführlich beschrieben. Weitere Informationen finden Sie in dem Julius Book [Lee10]. 6. Anwendung 67 6.3. Optimierung Um die Qualität der Spracherkennung zu verbessern werden in dieser Sektion einige Möglichkeiten vorgestellt. Die Optimierung kann auf folgende Bereiche angesetzt werden: • richtige Sprachaufnahme • effizientes Training • angepasste Grammatik • optimale Konfiguration Bei Sprachaufnahmen achten Sie darauf, dass sie zu dem VoiceTracker einen Mindestabstand von einem Meter einhalten. Sprechen sie dabei ganz normal, nicht zu laut, leise, schnell oder langsam. Eine verständliche Aussprache erhöht die Qualität der Erkennung. Eine Probeaufnahme kann helfen die richtige Aufnahmeposition und Aufnahmelautstärke zu finden. Nutzen Sie dafür ein Aufzeichnungstool Ihrer Wahl und nehmen eine Äußerung auf. Eine optimale Aufnahmelautstärke ist in Abbildung 6.1 gezeigt. [vlg. Gra09, S. 16] Abbildung 6.1.: Optimale Lautstärke einer Sprachaufnahme Achten Sie darauf, dass vor und nach einer Äußerung eine Stille von etwa 2 Sekunden folgen muss. Versuchen Sie nach jeder Trainingseinheit die Erkennungsrate durch das Aktivieren der Spracherkennung in Simon zu testen. Eine weitere Möglichkeit bietet das im Simon Packet enthaltende Tool sam. Mit sam lassen sich die vorhandenen Sprachmodelle auf ihre Erkennungsraten prüfen. Nach dem Start von sam wird über die Schaltfläche Verändere simons Modell das aktuelle Sprachmodell geladen. Mit dem Button Modell testen kann das Sprachmodell auf die Qualität überprüft werden. Sollte bei einem Wort oder Wortkette eine niedrige Erkennungsrate, meist kleiner als 50%, vorhanden sein, so muss dies trainiert werden. Dazu muss man wieder ein Training mit Simon auf das bezogene Wort oder Wortkette anwenden. 6. Anwendung 68 Eine weitere Methode die Spracherkennung zu verbessern ist es eigene Terminale in die Grammatik einzubringen. In dem Demo-Projekt KIARA sind folgende Terminale aus der Tabelle 6.4 eingepflegt. ACT CMD ZSTD SENS DIRECT PDIRCET ORT NAM Aktoren Kommandos Zustand, z.B. ein / aus Sensoren Richtung (Direction) Präfix der Richtung (ins,nach) Labor, Raum,... Name Tabelle 6.4.: Terminale des KIARA Demo-Projekts Das hat den Vorteil, dass Wortketten eindeutiger identifiziert werden können. Nehmen wir dazu die Äußerung „kiara laser aus“ als Beispiel. Demnach wäre die Grammatik nach den HADIFIX BOMP Terminalen NAM NOM ADD und nach den neu erstellten NAM SENS ZSTD. Tabelle 6.5 auf Seite 69 zeigt den Vergleich der beiden Grammatiken. Die KIARA Terminale erlauben die präzisere Definition der Grammatik und gleichzeitig eine Steigerung der Erkennungsrate. Nach der Grammatik mit HADIFIX BOMP Terminalen werden Wortketten gültig die nach dem KIARA Zustandsdiagramm nicht akzeptiert werden oder sogar unvorhergesehenes Verhalten hervorgerufen werden kann. Um Störgeräusche auf Softwarebasis zu vermeiden kann man mit Konfigurationsparametern in einer .jconf-Datei die Empfindlichkeit und Akzeptanz eines Signals steuern. Die wichtigsten sind [vgl. Lee10, S. 23]: -lv tres Steuert den Schwellwert für den Energiepegel der zwischen 0 und 32767 liegen kann. Voreinstellung ist der Wert 2000. Abhängig von den Raumbedingungen kann beim hohen Aufkommen von Geräuschen der Wert höher gewählt werden. -rejectshort msec Sollte die Äußerung oder das eigentliche Signal kürzer als die angegebene Zeit in Millisekunden sein, wird der Input ignoriert und die Erkennung abgebrochen. -powerthres thres Dieser Parameter bestimmt die Energie die mindestens vorhanden sein muss, bevor ein Erkennungsversuch gestartet wird. Beachten Sie, dass die Option -enable-power-rejec bei der Kompilierung angegeben werden muss. 6. Anwendung 69 Grammatik NAM kiara kiara kiara kiara kiara kiara kiara kiara SENS ultraschall ultraschall ultraschall ultraschall laser laser laser laser ZSTD aus an einschalten ausschalten an aus einschalten ausschalten NAM kiara kiara kiara kiara kiara kiara kiara kiara kiara kiara kiara kiara kiara kiara kiara kiara etc... NOM motor motor motor motor batterie batterie batterie batterie ultraschall ultraschall ultraschall ultraschall laser laser laser laser ADD an aus einschalten ausschalten an aus einschalten ausschalten aus an einschalten ausschalten an aus einschalten ausschalten Tabelle 6.5.: Vergleich zwischen HADIFIX BOMP und KIARA Terminalen 7. Auswertung und Aussicht 70 7. Auswertung und Aussicht Nachdem das Sprachinterface fertiggestellt worden ist konnte innerhalb einer kurzen Zeit und intensiven Training eine sprecherabhängige Erkennungsrate von 95,91% erreicht werden. Abbildung 7.1 zeigt die Erkennungsergebnisse für das Sprachmodell KIARA. So ist eine sprecherunabhängige Spracherkennung bei etwa 100 Sprechern möglich. Bis auf die optimale Geräuschfiltrierung sind alle aufgestellten Anforderungen an ein mobiles Sprachinterface erfüllt worden. Die Software ist auf einem virtuellen PC implementiert und getestet worden, deshalb wäre die Installation und Ausführung auf dem SCITOS G5 System noch zu überprüfen. Das sollte allerdings kein Problem darstellen, weil das virtuelle Betriebssystem nach SCITOS G5 Vorgaben angepasst ist. Zudem ist auch das Demo-Projekt KIARA enthalten, das nach wenigen Installationsschritten einsatzbereit ist. Für die Steuerung der SCITOS-Aktoren müssen noch die metralabs-Bibliotheken eingebunden werden und die Zustände dementsprechend angepasst sein. Leider konnten keine Geräuschproben unter realen Arbeitsbedingungen aufgezeichnet werden, da der Service-Roboter noch nicht voll einsatzbereit gewesen ist. Deshalb muss dieser Bereich weiter untersucht werden. Bei Einzelaufnahmen von Störgeräuschen jedoch zeigte der eingesetzte VoiceTracker gute Filtereigenschaften. Für den Betrieb des VoiceTrackers muss auf dem SCITOS G5 noch eine Spannungsquelle von 6 V realisiert werden. Abbildung 7.1.: Sprachmodell-Evaluierung mit dem Tool sam Literaturverzeichnis 71 Literaturverzeichnis [AKG] AKG: C 3000 B. http://www.buyfromchucks.com/images/ products/small/C3000B.jpg, Abruf: 04.01.2011 [AT&] AT&T: AT&T Natural Voices. http://www.wizzardsoftware.com/ speech_overview.php, Abruf: 25.11.2010 [Bur] B URKHARDT, Felix: Deutsche Sprachsynthese. http://ttssamples. syntheticspeech.de/deutsch/index.html, Abruf: 25.11.2010 [BWA+ 05] B REUER, Stefan ; WAGNER, Petra ; A BRESCH, Julia ; B RÖGGELWIRTH, Jörg ; R OHDE, Hannes ; S TÖBER, Karlheinz: Bonn Open Synthesis System (BOSS) 3 - Documentation and User Manual. Institut für Kommunikationsforschung und Phonetik, 2005. – 49 S. http://www.sk.uni-bonn.de/forschung/ phonetik/sprachsynthese/boss/BOSS_Documentation.pdf [Cam] C AMBRIDGE .U NIVERSITY.E NGINEERING .D EPARTMENT: HTK Speech Recognition Toolkit. http://htk.eng.cam.ac.uk/, Abruf: 23.11.2010 [Car] C ARNEGIE .M ELLON .U NIVERSITY: CMU Sphinx Speech Recognition Toolkit. http://cmusphinx.sourceforge.net/, Abruf: 23.11.2010 [Eul06] E ULER, Stephen: Grundkurs Spracherkennung - Vom Sprachsignal zum Dialog - Grundlagen und Anwendung verstehen. Veiweg-Verlag, 2006. – 200 S. http://www.springerlink.com/content/ 978-3-8348-0003-9. – ISBN 978–3–8348–0003–9 [Gra09] G RASCH, Peter: Das simon Handbuch. „simon listens“ gemeinnütziger Verein zur Entwicklung, Verbreitung und Implementierung der Spracherkennungssoftware simon, 2009. – 112 S. http://simon.gibolles.com/doc/0.3/ simon/de/index.pdf [HKK05] H EROLD, Helmut ; K LAR, Michael ; K LAR, Susanne: C++, UML und Design Patterns. Addison-Wesley, 2005. – 1176 S. – ISBN 978–3–827–32267–8 [Lee10] L EE, Akinobu: The Julius book. 2010. – 67 S. http://jaist.dl. sourceforge.jp/julius/47534/Juliusbook-4.1.5.pdf Literaturverzeichnis 72 [Lin] L INGUATEC: Linguatec - Voice pro 12. http://www.linguatec.net/ products/stt/voice_pro, Abruf: 23.11.2010 [Met10] M ETRA L ABS: SCITOS G5 - Embedded PC and Operating System. 2010. – Benutzerhandbuch [Nag] N AGOYA .I NSTITUTE . OF.T ECHNOLOGY: Open-Source Large Vocabulary CSR Engine Julius. http://julius.sourceforge.jp/en_index.php, Abruf: 24.11.2010 [Nuaa] N UANCE: Nuance - Produkte. http://www.nuance.de/produkte/, Abruf: 11.11.2010 [Nuab] N UANCE: Nuance Vocalizer. http://www.nuance.de/news/ 20090825_vocalizer5.asp, Abruf: 24.11.2010 [PK08] P FISTER, Beat ; K AUFMANN, Tobias: Sprachverarbeitung - Grundlagen und Methoden der Sprachsynthese und Spracherkennung. Springer-Verlag, 2008. – 483 S. http://www.springerlink.com/content/ 978-3-540-75909-6. – ISBN 978–3–540–75909–6 [PWU] P HILOSOPHISCHE .FAKULTÄT. DER .R HEINISCHEN .F RIEDRICH -W ILHELMS U NIVERSITÄT.B ONN: Sprache und Kommunikation. http://www.sk. uni-bonn.de/forschung/phonetik/sprachsynthese/bomp, Abruf: 02.12.2010 [RB08] R ÄHM, Jan ; B ENTHIN, Falko: NUNGSSYSTEM SIMON LISTENS. Zwiegespräch - SPRACHERKENIn: LinuxUser (2008), 07. – http://www.linux-community.de/Internal/Artikel/ Print-Artikel/LinuxUser/2008/07/Zwiegespraech, Abruf: 03.12.2010 [SK06] S TUART, Herbert ; K LAGES, Gerhard: Kurzes Lehrbuch der Physik. SpringerVerlag, 2006. – 324 S. http://www.springerlink.com/content/ 978-3-540-23146-2/. – ISBN 978–3–540–23146–2 (Print) 978–3–540– 29728–4 (Online) [Sl] S IMON - LISTENS: simon listens - Gemeinsamer Verein für Forschung und Lehre. http://www.simon-listens.org/, Abruf: 11.11.2010 [Tas] TASCAM: US-122. 04.01.2011 [TCT] TCTS.L AB: http://tascam.de/pics/us-122.jpg, Abruf: The MBROLA Project. http://tcts.fpms.ac.be/ synthesis/mbrola.html, Abruf: 26.11.2010 Literaturverzeichnis 73 [Tes] T ESTBERICHTE . DE: Testberichte.de - Nuance Dragon NaturallySpeaking Version 11. http://www.testberichte.de/p/nuance-tests/ dragon-naturallyspeaking-version-11-testbericht.html, Abruf: 03.01.2011 [Wen05] W ENDEMUTH, Andreas: Grundlagen der digitalen Signalverarbeitung - Ein mathematischer Zugang. Springer Verlag, 2005. – 268 S. http://www.springer.com/engineering/signals/book/ 978-3-540-21885-2. – ISBN 978–3–540–21885–2 [WLK+ 04] WALKER, Willie ; L AMERE, Paul ; K WOK, Philip ; R AJ, Bhiksha ; S INGH, Rita ; G OUVEA, Evandro ; W OLF, Peter ; W OELFEL, Joe: Sphinx-4: A Flexible Open Source Framework for Speech Recognition. SUN Microsystems Inc., 2004 http://labs.oracle.com/techrep/2004/smli_ tr-2004-139.pdf [YEK+ 01] YOUNG, Steve ; E VERMANN, Gunnar ; K ERSHAW, Dan ; M OORE, Gareth ; O DELL, Julian ; O LLASON, Dave ; VALTCHEV, Valtcho ; W OODLAND, Phil: The HTK Book. Microsoft Corporation, Cambridge University Engineering Department, 2001. – 284 S. http://htk.eng.cam.ac.uk/prot-docs/htk_book. shtml A. CD Inhalt A. CD Inhalt / DOKUMENTATION ... Dokumentation im PDF und HTML Format BILDER ... In der Arbeit eingesetzte Bilder HTK JULIUS MBROLA QUELLEN ... Internetquellen im PDF Format SIMON SPRACHINTERFACE html SPRECHERLOKALISIERUNG power_locate xcorr_locate SOFTWARE ... Installationsdateien und Quellcode der eingesetzten Programme HTK Linux win32 JULIUS QUICKSTART MBROLA bin DE-STIMMEN txt2pho SIMON SPRACHINTERFACE KIARA-Sprachmodell SCITOSsi SPRECHERLOKALISIERUNG power_locate xcorr_locate BA_Sulz.pdf 74 Glossar BOSS Bonn Open Synthesis System DFT Diskrete Fourier-Transformation DTW Dynamic Time Warp (Dynamische Zeitverzerrung) HAW Hochschule für Angewandte Wissenschaften Hamburg HMM Hidden Markov Modell HTK Hidden Markov Toolkit KIARA Der Name für den SCITOS G5 zusammengesetzt aus: Kommunikativer interaktiver Assistenz-Roboterarm LDS Location Dependent Squelch (Richtungsabhängige Rauschsperre) LVCSR Large-Vocabulary Continuous Speech Recognition MFCC Mel Frequency Cepstral Coefficients TTS Text-to-Speech Versicherung über Selbstständigkeit Hiermit versichere ich, dass ich die vorliegende Arbeit im Sinne der Prüfungsordnung nach §24(5) ohne fremde Hilfe selbstständig verfasst und nur die angegebenen Hilfsmittel benutzt habe. Hamburg, 17. Januar 2011 Ort, Datum Unterschrift