Spracheingabe und Sprachausgabe für einen mobilen Serviceroboter

Transcription

Spracheingabe und Sprachausgabe für einen mobilen Serviceroboter
Fakultät für Elektrotechnik und Informatik
Angewandte Informatik
Forschungszentrum für Servicerobotik
Spracheingabe und Sprachausgabe
für mobile Serviceroboter
Bachelorarbeit zur Erlangung des akademischen Grades
‚Bachelor of Science‘ – B.Sc
von
Julian Hochstetter
01. Oktober 2008 – 31. Dezember 2008
1. Betreuer: Prof. Dr. rer. nat., Dipl. Phys. Wolfgang Ertel
2. Betreuer: Prof. Klemens Ehret
Abstract
Speech recognition and speech synthesis
for mobile service robots
This bachelor thesis created the opportunity to do speech recognition and
synthesized speech output in a most easy and user-friendly way summarised
up in only one program. This purpose was reached by the application of
mature and reliable software in each case for speech recognition, language
model generation and speech synthesis. One task was connecting these three
software components by a graphical user interface, which allows the user to
add self-defined phonetic inputs to the language model and by adding more
voice recordings to extend this model so that the detection rate rise up to an
optimal recognition rate.
Zusammenfassung
Spracheingabe und Sprachausgabe
für mobile Serviceroboter
Im Rahmen dieser Bachelor-Abschlussarbeit wurde die Möglichkeit geschaffen,
auf möglichst einfache und dadurch benutzerfreundliche Weise sowohl Spracherkennung als auch Sprachausgabe zusammengefasst in einem Programm
durchzuführen. Dieses Ziel wurde durch den Einsatz ausgereifter und zuverlässiger Software jeweils für Spracherkennung, Sprachmodellgenerierung und
Sprachausgabe erreicht. Eine Aufgabe war, diese drei Softwarekomponenten
durch eine grafische Bedienoberfläche zu verbinden, die es dem Benutzer
erlaubt, selbst definierte Spracheingaben zu dem Sprachmodell hinzuzufügen
und dieses durch weitere Sprachaufnahmen für eine optimale Erkennungsrate
zu erweitern.
Julian Hochstetter
Schützenstrasse 55
35398 Gießen
Hiermit erkläre ich eidesstattlich, dass ich die von mir vorgelegte Arbeit in der
vorgegebenen Zeit vom 01.08.2008 - 31.12.2008 selbständig verfasst habe,
dass ich die verwendeten Quellen, Internet-Quellen und Hilfsmittel vollständig
angegeben habe und dass ich die Stellen der Arbeit – einschließlich Tabellen,
Karten und Abbildungen –, die anderen Werken oder dem Internet im Wortlaut
oder dem Sinn nach entnommen sind, auf jeden Fall unter Angabe der Quelle
als Entlehnung kenntlich gemacht habe.
Weingarten, den 31. Dezember 2008
Julian Hochstetter
Danksagung
Hiermit möchte ich mich bei meinem Betreuer Professor Dr. Wolfgang Ertel
für seine stets großzügige Unterstützung und wertvolle Betreuung während
der gesamten Zeit bedanken. Als verantwortlicher Teamleiter des Robocup
und ZAFH Labors der Hochschule Ravensburg-Weingarten hat er mir diese
interessante Bachelorarbeit in der Robocup Arbeitsgruppe ermöglicht.
Auch bei meinem Zweitgutachter Professor Klemens Ehret möchte ich mich
herzlich für seinen konstruktiven Beitrag für die Gestaltung der grafischen
Bedienoberfläche bedanken.
Des weiteren gilt mein Dank allen Mitgliedern der Robocup-Arbeitsgruppe.
All denen, die diese Arbeit Korrektur gelesen haben und wertvolle Hinweise
beigesteuert haben, spreche ich ebenfalls besonderen Dank aus.
Zuletzt möchte ich mich auch bei meiner Freundin, meiner Familie und all
meinen Freunden bedanken, die mir während dieser Arbeit verständnisvoll und
unterstützend zur Seite standen.
Inhaltsverzeichnis
1 Einführung
11
1.1 Motivation, Zielsetzung und Beitrag . . . . . . . . . . . . . . . . . 11
1.2 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.3 Schwierigkeiten der menschlichen Sprache . . . . . . . . . . . . 12
1.4 Aufbau und Kapitelübersicht . . . . . . . . . . . . . . . . . . . . . 13
2 Die Spracherkennung
15
2.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 15
2.2 Die Möglichkeiten der Spracherkennung . . . . . . . . . . . . . . 18
2.2.1 Als Hilfe für behinderte Menschen . . . . . . . . . . . . . 18
2.2.2 In der Industrie . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.3 Im Alltag . . . . . . . . . . . . . . . . . . . . . . . . . . . . 18
2.2.4 Im Multimediabereich
. . . . . . . . . . . . . . . . . . . . 19
2.2.5 In der Medizin . . . . . . . . . . . . . . . . . . . . . . . . . 19
2.3 Übersetzender Sprachcomputer . . . . . . . . . . . . . . . . . . . 20
2.4 Herausforderung der Spracherkennung . . . . . . . . . . . . . . 21
2.5 Der Mustervergleich . . . . . . . . . . . . . . . . . . . . . . . . . 22
3 Sprachsynthese
25
3.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
3.2 Die Möglichkeiten der Sprachsynthese . . . . . . . . . . . . . . . 26
3.2.1 Einsatz im Multimediabereich . . . . . . . . . . . . . . . . 26
3.2.2 Einsatz für behinderte Menschen . . . . . . . . . . . . . . 27
3.2.3 Einsatz als Kontrollwerkzeug . . . . . . . . . . . . . . . . 27
3.3 Der Aufbau eines Sprachsynthese-Systems . . . . . . . . . . . . 27
3.3.1 NLP (Natural Language Processing) . . . . . . . . . . . . 27
3.3.2 DSP (Digital Speech Processing) . . . . . . . . . . . . . . 28
6
4 Software für Spracherkennung
29
4.1 Kommerzielle Systeme . . . . . . . . . . . . . . . . . . . . . . . . 30
4.1.1 IBM ViaVoice . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.1.2 Philips FreeSpeech und Philips SpeechMagic . . . . . . . 31
4.1.3 Dragon NaturallySpeaking . . . . . . . . . . . . . . . . . . 31
4.2 Open-Source Systeme . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2.1 CMU Sphinx
. . . . . . . . . . . . . . . . . . . . . . . . . 33
4.2.2 Julius und das HTK Toolkit . . . . . . . . . . . . . . . . . . 34
5 Software für Sprachsynthese
37
5.1 Kommerzielle Systeme . . . . . . . . . . . . . . . . . . . . . . . . 37
5.1.1 AT&T Natural Voices SDK . . . . . . . . . . . . . . . . . . 37
5.1.2 FonixTalk 6.1 SDK . . . . . . . . . . . . . . . . . . . . . . 37
5.2 Open-Source Systeme . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.1 MBROLA . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.2 BOSS - Bonn Open Synthesis System . . . . . . . . . . . 38
5.2.3 FreeTTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.2.4 Festival und Festival Lite (Flite) . . . . . . . . . . . . . . . 39
5.2.5 eSpeak . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6 Das Sprachmodell
41
6.1 Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.2 Lautschrift . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
6.3 Phonem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
6.4 Bi- und Triphone . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.5 Prosodie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
6.6 Akustikmodell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
6.7 Wörterbuch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
6.8 Julius Vokabular . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.9 Julius Grammatik . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
6.10 Trainingsdaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
7 Eingesetzte Komponenten
53
7.1 C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.2 Qt . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.3 Advanced Linux Sound Architecture . . . . . . . . . . . . . . . . 54
7.4 Julius, HTK und eSpeak . . . . . . . . . . . . . . . . . . . . . . . 54
7.4.1 Installation von eSpeak . . . . . . . . . . . . . . . . . . . 55
7.5 Simon Listens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7.5.1 Installation von HTK . . . . . . . . . . . . . . . . . . . . . 56
7.5.2 Installation von Julius . . . . . . . . . . . . . . . . . . . . . 56
7.5.3 Installation von Simon . . . . . . . . . . . . . . . . . . . . 56
7.6 Julius Control Center . . . . . . . . . . . . . . . . . . . . . . . . . 57
8 Das Julius Control Center
59
8.1 Die GUI - MainWindow . . . . . . . . . . . . . . . . . . . . . . . . 60
8.2 Die Verwaltung . . . . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.2.1 TrainingView . . . . . . . . . . . . . . . . . . . . . . . . . 61
8.2.2 WordManager . . . . . . . . . . . . . . . . . . . . . . . . . 62
8.2.3 GrammarManager . . . . . . . . . . . . . . . . . . . . . . 63
8.2.4 SampleManager . . . . . . . . . . . . . . . . . . . . . . . 64
8.2.5 ModelManager . . . . . . . . . . . . . . . . . . . . . . . . 65
8.3 AddWordWizard . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
8.4 Der Server - JuliusServer . . . . . . . . . . . . . . . . . . . . . . 67
8.4.1 Der Clientsocket . . . . . . . . . . . . . . . . . . . . . . . 67
8.4.2 Das JuliusProtocol . . . . . . . . . . . . . . . . . . . . . . 68
8.5 Der Spracherkenner - JuliusControl . . . . . . . . . . . . . . . . . 69
8.6 Der Synthesizer - Speaker . . . . . . . . . . . . . . . . . . . . . . 70
8.7 Die Soundausgabe - SoundOutput . . . . . . . . . . . . . . . . . 71
8.8 WavRecorder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
8.9 Die Mikrofonregelung - MicControl . . . . . . . . . . . . . . . . . 73
8.10 Einstellungen dauerhaft speichern - Settings
. . . . . . . . . . . 74
8.11 Weitere Dokumentation . . . . . . . . . . . . . . . . . . . . . . . 74
8.12 Die Benutzung des Programms . . . . . . . . . . . . . . . . . . . 75
8.12.1 Allgemeines . . . . . . . . . . . . . . . . . . . . . . . . . . 75
8.12.2 Spracherkennung . . . . . . . . . . . . . . . . . . . . . . . 76
8.12.3 Training - Sprachmodell . . . . . . . . . . . . . . . . . . . 77
8.12.4 Training - Akustikmodell . . . . . . . . . . . . . . . . . . . 78
8.12.5 Training - Grammatik . . . . . . . . . . . . . . . . . . . . . 79
8.12.6 Training - Wort hinzufügen . . . . . . . . . . . . . . . . . . 81
8.12.7 Sprachausgabe . . . . . . . . . . . . . . . . . . . . . . . . 86
8.12.8 Einstellungen . . . . . . . . . . . . . . . . . . . . . . . . . 87
9 Schlussbetrachtung
88
Anhang
92
A Literaturverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
B Tabellenverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
C Abbildungsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . 98
D Abkürzungsverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . 100
E Quellcode Verzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . 102
F Beispieldaten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
1 Einführung
1.1 Motivation, Zielsetzung und Beitrag
Das Ziel dieser Bachelorarbeit ist es, für das Robocup Labor und die Forschungsgruppe AMSER (Autonome mobile Serviceroboter) der Hochschule
Ravensburg-Weingarten ein System zur Spracheingabe und Sprachausgabe
zu entwickeln.
Einerseits soll es möglich sein, einem Roboter mit
der Stimme des Bedienenden Befehle zu erteilen
und anderseits soll der Roboter dem Menschen
verbale Mitteilungen wie z.B. Statusmeldungen
machen können.
An der Hochschule wird eine universell einsetzbare Teaching-Box entwickelt, diese soll es in Zukunft ermöglichen, dass Serviceroboter ihr Verhalten selbst erlernen. Die in dieser Arbeit entwickelte
Sprachsteuerung soll als weiteres Element in die
Teaching-Box einfließen und es so ermöglichen,
den Roboter bei seinem Lernvorgang mit der Stimme aktiv zu unterstützen, indem z.B. gesagt wird, Abbildung 1.1: Pioneer P3ob die ausgeführte Handlung richtig oder falsch
AT Roboter mit Katana Arm
war Zum Einsatz soll etablierte, gut funktionierende Software kommen.
Eine große Rolle dabei spielt, dass das System unter Linux lauffähig sein muss,
da die gesamte Entwicklung des Roboters mit dem Betriebssystem Linux stattfindet.
Während des Studiums habe ich bereits eine Projektarbeit im Labor für Roboter
gemacht, welche dazu beigetragen hat, mich für dieses Thema zu begeistern.
Ich wollte unbedingt einen weiteren Beitrag für das Labor leisten, aus diesem
Grund habe ich zusammen mit Professor Dr. Ertel nach einem passendem
Thema gesucht.
11
1.2. EINLEITUNG
KAPITEL 1. EINFÜHRUNG
Im Laufe der Entwicklung des Programms haben sich folgende Ziele herausgebildet:
• Sprecherunabhängige Spracherkennung
• Die sichere Einzelworterkennung hat gegenüber der Fließtexterkennnung
Vorrang
• Die Echtzeitanforderung muss eingehalten werden und die Ressourcenlast darf nicht zu hoch sein
• Gut zu verstehende Sprachausgabe, die jedoch nicht zwingend natürlich
klingen muss
• Vollständige Kompatibilität zu Linux
• Die Möglichkeit zu schaffen, das Programm fernzusteuern bzw Informationen mit einem fremden Programm auszutauschen
Die Möglichkeiten des Betriebssystems Linux sind einfach unglaublich, dies hat
mich schon sehr früh fasziniert und gefesselt. Da die Sprachsteuerung in naher
Zukunft eine immer wichtigere Rolle spielen wird, ist dies eine gute Möglichkeit,
sich jetzt mit dem Thema zu befassen.
1.2 Einleitung
Die Sprache hat sich als Kommunikationsmittel über sehr lange Zeit hin als
Kulturgut entwickelt. Sprache hat für den Mensch nicht nur eine Bedeutung als
Informationsträger, ich betrachte sie jedoch im Zusammenhang meiner Arbeit
ausschließlich im Hinblick auf eine mögliche Verwendung in der Kommunikation
mit Computern. Im Besonderen wird die Problematik der Übertragbarkeit von
geschriebenem Wort zu klingendem Wort und der umgekehrte Vorgang untersucht. Durch Spracherkennung, Sprachsynthese und Sprachsteuerung bieten
sich Innovationen auf dem Gebiet der Angewandten Informatik. Statt manueller
Bedieung wird es so möglich, mit verbalen Informationen, Anweisungen oder
Kontrollen und Feedbacks zu arbeiten.
1.3 Schwierigkeiten der menschlichen Sprache
Für das Projekt Spracherkennung-Sprachausgabe wird es sich zeigen, auf
welche Weise die menschliche Sprache interaktiv durch den Computer genutzt
12
KAPITEL 1. EINFÜHRUNG
1.4. AUFBAU UND KAPITELÜBERSICHT
werden kann. Menschliche Sprache vollzieht sich in ihrer Art als sehr komplexer
Vorgang und unterscheidet sich als lebendig und sich weiterentwickelnt von
den sogennanten Computersprachen. Die Programmiersprache C z.B. besitzt
eindeutige, genaue, festgelegte Regeln, deshalb werden Programmiersprachen
auch als formale Sprachen bezeichnet, sie haben eine beschränkte, genau
Anzahl an Wörtern und eine ebenso festgelegte Grammatik. [Hrom07]
Menschliche Sprache hingegen kennt Mehrdeutigkeiten, und mehrdeutige Worte können nur im Kontext verstanden werden, wie Präpositionen, z.B. „vor“, die
sowohl räumliche als auch zeitliche Angaben machen. [Dude08]
Zudem kann Sprache im Dialekt individuell sein, was in der Kommunikation
unter Menschen für das Verständnis weniger Bedeutung hat. Da ein Spracherkennungssystem jedoch mit einer Art Mustervergleich arbeitet, sollte der Input
der eingegebenen Datenbank des Wörterbuchs möglichst genau entsprechen.
1.4 Aufbau und Kapitelübersicht
• Das Ziel der Installation einer Spracherkennung und einer Sprachsynthese
macht es für diese Arbeit erforderlich, sich zunächst einen Überblick
darüber zu verschaffen, was Spracherkennung- und synthese bedeutet.
Hierzu wird jeweils eine Einführung in die Geschichte der Entwicklung und
die möglichen Einsatzgebietete in Kürze vorgstellt.
• Nachdem die Funktionsweise der Systeme Sprache-zu-Text und Textzu-Sprache bearbeitet ist, wende ich mich dem Thema der Software für
Spracherkennung und Sprachsynthese zu, im die für das Projekt optimale
herauszufinden.
• Ein weiteres Kapitel widmet sich der Zusammenstellung aller Benutzerdaten, dem sogenannten Sprachmodell. Es wird aus der allgemeinen
Linguistik das Teilgebiet der Phonologie herangezogen. Ausßerdem wird
das für das Projekt genutzte Wörterbuch und die Spracherkennungssoftware und die eingesetzte Technik der Hidden Markov Modelle vorgestellt.
• In einem weiteren Abschnitt werden die verwendeten Systemkomponenten vorgstellt.
• Schließlich wird das Julius Control Center, des im Rahmen dieser Arbeit
entstandenen Programms in der Nutzung dargestellt.
13
1.4. AUFBAU UND KAPITELÜBERSICHT
KAPITEL 1. EINFÜHRUNG
14
2 Die Spracherkennung
2.1 Einleitung
Die automatische Spracherkennung hat eine über fünfzigjährige Forschungsgeschichte hinter sich, schon in den 60er Jahren des 20. Jahrhunderts war
es möglich, Einzelwörter maschinell zu erkennen. Es wurden Filter eingesetzt,
um die spektralen Eigenschaften der menschlichen Sprache zu gewinnen. Die
daruch erhaltenen Muster wurden mit gespeicherten Mustern verglichen. Schon
damals wurde eine Erkennungsrate von bis zu 90% erreicht. [RJ04]
Abbildung 2.1: Spektrogram einer 9-Kanal Filterbankanalyse des Wortes
„three“ und zwei mal des Wortes „eight“. Es ist deutlich zu sehen, dass
die zwei Wörter von „eight“ ihrer Struktur nach ähnlich sind, abgesehen
von der viel kürzeren Lücke und dem längeren Burst für [t] bei der unteren
Äußerung. Aus [Holm91]
15
2.1. EINLEITUNG
KAPITEL 2. DIE SPRACHERKENNUNG
Einige Jahre später wurde die Technik der dynamischen Programmierung
entdeckt. Diese Technik beruht auf dem Verfahren der nichtlinearen zeitlichen
Anpassung, auch DTW(Dynamic T ime W arping) genannt.
Abbildung 2.2: Verlauf eines DP(Dynamische Programmierung) Pfades
zwischen zwei Äußerungen des Wortes „eight“. Eine zeitliche Verschiebung wird nicht bestraft und die Pfadsuche in den einzelnen Punkten ist
begrenzt(„pruning“). Der optimale Pfad (dicke Linie) wurde durch Rückverfolgung ausgehend von der rechten oberen Ecke gewonnen.
Aus [Holm91]
Bei diesem Verfahren wurde versucht, durch dynamische Programmierung
einen Pfad von der linken unteren Ecke zur rechten oberen Ecke zu finden.
Umso gerader der Verlauf ist, desto geringer ist der Abstand der beiden Muster,
also desto ähnlicher sind die Muster sich. [Zink97]
Durch dieses Verfahren konnte man bereits bis zu 1000 Einzelwörter mit einer
Erkennungsrate von bis 100% erkennen. Durch mehrere parallel laufende DTWAlgorithmen erreichte man die Erkennung von Wortketten. [RJ04]
16
KAPITEL 2. DIE SPRACHERKENNUNG
2.1. EINLEITUNG
Abbildung 2.3: Ergebnis des Versuchs, zwei ungleiche Wörter („three“ und
„eight“) mit demselben DP-Algorithmus wie in Abb. 2.2 zuzuordnen [. . . ]. Der mit Kreuzen markierte Verlauf zeigt den stark abweichenden
Pfad, der sich bei Ausschluss des letzten Frames im Vergleichsmuster als
optimal erwiesen hätte. Aus [Holm91]
In der Abbildung 2.3 ist ein Negativnbeispiel dargestellt. Hier wurde versucht,
zwei ungleiche Muster zu vergleichen.
In den 80er Jahren des 20. Jahrhunderts wurde durch die Technik der HiddenMarkov-Modelle (HMM) die Möglichkeit geschaffen, eine ganz neue Art der
Spracherkennung zu ermöglichen. Mit Hilfe dieser statistischen HMM Modelle
und stochastischen Sprachmodellen wurde schließlich die Erkennung von kontinuierlicher Sprache erreicht.
Es wurden auch verschiedene Versionen von neuronalen Netzen zur Spracherkennung eingesetzt, diese konnten jedoch nicht die Ergebnisse der HMMTechnik erreichen.
17
2.2. DIE MÖGLICHKEITEN DER SPRACHERKENNUNG
KAPITEL 2. DIE SPRACHERKENNUNG
2.2 Die Möglichkeiten der Spracherkennung
Die Sprachsteuerung wird in naher Zukunft immer häufiger anzutreffen sein, ihr
kann als zusätzliches Bedienungselement große Bedeutung zukommen.
Die intuitive und komfortable Bedienung, die dadurch möglich wird, ist für viele
Bereiche von besonderem Interesse. Ein Beispiel für den Einsatz einer solchen
Bedienung ist das Ziel dieser Arbeit: die Steuerung eines Serviceroboters.
Dieser Serviceroboter soll mit der Stimme so zu bedienen sein, dass er Befehle
entgegen nehmen kann und diese dann auch entsprechend ausführt.
2.2.1 Als Hilfe für behinderte Menschen
Ein wichtiger Einsatz von Sprachsteuerung kann zur Erleichterung des gesamten Lebens von körperlich beeinträchtigten Menschen führen. Wenn die
motorische Steuerung erschwert oder ganz unmöglich ist, kann durch eine
sprachliche Steuerung eine Selbständigkeit in der Nutzung von Geräten wie
z.B. Rollstühlen oder auch Computern erreicht werden.
2.2.2 In der Industrie
Aber auch in der Industrie, z.B. der Automobilindustrie kann Sprachsteuerung
hilfreich sein. Hier kann mit einer Sprachsteuerung die Sicherheit erhöht werden, wenn der Bedienende nicht mehr an Knöpfen steuern oder regeln muss.
Zudem können manuelle und verbale Bedienung zeitgleich stattfinden, was den
Arbeitsprozess optimieren kann.
2.2.3 Im Alltag
Ein weiteres Anwendungsfeld ist das Texterfassen durch Diktiersysteme. Ärtze oder Juristen z.B. können von diesen Systemen profitieren, da ein großer
Teil der Tätigkeitsdokumentation sprachlich wesentlich schneller und einfacher
abzuwickeln ist als durch textverarbeitende Schreibprogramme. Auch das Autoradio z.B. kann mit der Stimme bedient werden, was zur Sicherheit beim Fahren
beitragen kann.
18
KAPITEL 2. DIE SPRACHERKENNUNG
2.2. DIE MÖGLICHKEITEN DER SPRACHERKENNUNG
2.2.4 Im Multimediabereich
Spracherkennung ist besonders hilfreich an Stellen, wo der Mensch mit der
Stimme kommuniziert, z.B. am Telefon. Die Nummer des Gesprächspartners
muss dann nicht eingegeben werden, sondern das Telefon sucht und wählt
automatisch, wenn man den gewünschten Gesprächspartner nennt.
Mit einer besonderen Form von Spracherkennung ist jeder von uns schon
einmal in Berührung gekommen, mit dem Telefoncomputer einer Hotline. Jedes
moderne Call-Center setzt diese Telefoncomputer ein, um den Anzurufenden
an den richtigen Sachbearbeiter durchzustellen.
Viele Banken bieten auch Telefonbanking an. Hier kann der Anrufende Bankgeschäfte am Telefon durchführen. Mittels Stimmmuster-Erkennung könnte sogar
der Teilnehmer verifiziert und die Sicherheit erhöht werden.
2.2.5 In der Medizin
Auch im Operationssaal kommen solche Sprachsteuerungen schon zum Einsatz.
Wenn der operierende Arzt das Operationsbesteck in der Hand hält, kann er
sehr schwer, z.B. den Bildausschnitt seines Mikroskopes verändern oder die
Schärfe nachstellen. Er kann in diesem Moment keinen Hand- oder Fußschalter
zum Bedienen des Operationsmikroskopes einsetzen. Die Steuerung mit der
Sprache vereinfacht auch hier wieder die Arbeit des Benutzers.
19
2.3. ÜBERSETZENDER SPRACHCOMPUTER
KAPITEL 2. DIE SPRACHERKENNUNG
2.3 Übersetzender Sprachcomputer
Das bis heute wohl beeindruckenste Projekt im
Bereich der Spracherkennung ist das Verbmobil.
Ins Leben gerufen wurde das Projekt im Jahr 1993
und wurde in 2 Phasen bis ins Jahr 2000 durchgeführt. Das Verbmobil ist eine Software zur Erkennung von Spontansprache,
die einzelne Wörter oder Sätze analysiert, übersetzt und letztlich wieder ausspricht. Es erkennt dabei auch Fehler, Korrekturen und „Ähs„und gibt diese
wieder. Das Verbmobil wurde im Rahmen eines Forschungsprojekts des BMBF
(Bundesministerium für Bildung und Forschung) in Kooperation mit namhaften
Firmen aus der Industrie entwickelt, insgesamt hatte das Projekt ein Budget
von 166,7 Millionen DM zur Verfügung. Anwendung findet dieses System z.B.
in Tourismusbüros oder Hotels. Der Anrufende kann in seiner Muttersprache
mit dem fremdsprachigen Gegenüber kommunizieren. Das Gespräch wird dazu
über einen Sprachserver geleitet, dort werden die Wörter analysiert, zu einem
Satz geformt und übersetzt. Damit die Gegenstelle nun die Übersetzung hören
kann, wird diese noch synthetisiert.
Dieses beeindruckende Ergebnis ist dadurch möglich, dass die Software eine
einzigartige Prosodieerkennung benutzt. Diese versucht die Satzmelodie zu
erkennen und den Bedeutungszusammenhang zu extrahieren. Dieser Schritt ist
eine Vorstufe des Übersetzens, denn nur so kann gewährleistet werden, dass
die Emotionen und der Inalt der Übersetzung auch richtig sind.
Die Wortfehlerrate lag am Schluss einer Übersetzung vom Deutschen in das
Englische nur noch bei ca. 14%.
Mit dem Verbmobil ist es dem DFKI (Deutsches Forschungszentrum für Künstliche Intelligenz) gelungen, ein interdisziplinäres Leitprojekt ins Leben zu rufen.
Aus dem Projekt, welches mittlerweile abgeschlossen ist, gingen 800 wissenschaftliche Publikationen hervor, zahlreiche Arbeitsplätze entstanden und dem
Projekt wurde 2001 sogar der Zukunftspreis des Bundespräsidenten verliehen.
[Verb00], [Wahl00]
20
KAPITEL 2. DIE SPRACHERKENNUNG
2.4. HERAUSFORDERUNG DER SPRACHERKENNUNG
2.4 Herausforderung der Spracherkennung
In der Spracherkennung wird nach den Anforderungen an die Spracherkennung
klassifiziert.
Zum einen wird unterschieden ob das System sprecherabhängig oder sprecherunabhängig arbeiten soll. Mit unterschiedlichen Sprechern zurechtzukommen,
ist schon die erste Schwierigkeit für die Spracherkennung.
Unterschiedliche Sprecher haben ein sich unterscheidendes Sprechmuster,
der eine spricht langsam, klar und deutlich, ein anderer spricht vielleicht viel
schneller und undeutlicher. Für uns Menschen ist dies kein sonderlich großes
Problem, wir können uns im Hörvständnis auf den Kommunikationspartner und
auf schwierige Situationen individuell und spontan einstellen, für den Computer ist das allerdings nicht so einfach. Eine weitere Schwierigkeit für das
System ist, ob es nur einzelne Wörter, Wortketten oder zusammenhängenden,
kontinuierlichen Text erkennen soll.
Aus Kombinationen der oben genannten Schwierigkeiten ergibt sich nun die
Anforderung an das Spracherkennungsprogramm.
Sprechweise
Wortschatz
Benutzerkreis
Einfach
Einzelne Wörter
Kleiner Wortschatz
Sprecherabhängig
Schwierig
Sätze
Großer Wortschatz
Sprecherunabhängig
Tabelle 2.1: Anforderungen und Schwierigkeitsgrad an eine Software für
Spracherkennung. Aus [Eule06]
Ein weiterer kritischer Punkt ist die akustische Umgebung. Jedes kleinste
Störgeräusch beeinflusst die Erkennungsrate des Systems. Der Mensch kann
im Hörvorgang feinste Differenzierungen aus einem Ganzen selektieren, wir
können auf bestimmte Qualitäten fokussieren, z.B. eine Einzelstimme aus
einem Stimmengewirr heraushören. Der Computer benötigt jedoch für die
Spracherkennung einen möglichst eindeutigen Input.
21
2.5. DER MUSTERVERGLEICH
KAPITEL 2. DIE SPRACHERKENNUNG
2.5 Der Mustervergleich
Die Spracherkennung kann man mit einem Mustervergleich verdeutlichen.
Wenn man die Spracherkennung auf das Erkennen von einzelnen Wörtern
reduziert, kann man dies folgendermaßen darstellen:
Nehmen wir an, es gibt einen Vorrat von N zu erkennenden Wörtern. Weiter haben wir zu jedem Wort W1 . . .WN eine Referenz R1 . . . RN . Nun wird ein
unbekanntes, zu erkennendes Wort Y mit jeder Referenz vergleichen. Dazu
benötigen wir die Vergleichsfunktion D. Diese Vergleichsfunktion D misst die
Differenz, also die Ähnlichkeit der beiden Wörter Y und R.
D(Y, R) > 0 und D(Y, Y) = 0
Im folgenden ist eine Tabelle mit einem Mustervergleich dargestellt.
Wort
Eins
Zwei
Drei
Vier
...
Neun
Muster
R1
R2
R3
R4
Abstand D
2,1234
1,4353
1,6532
4,3223
R9
5,3234
Tabelle 2.2: Beispiel eines Mustervergleichs
In diesem Beispiel findet man bei dem Wort Zwei den kleinsten Abstand zur
Referenz. Anhand dieser Feststellung kann davon ausgegangen werden, dass
es sich um das gesuchte Wort handelt.
Man bemerkt jedoch auch, dass das Wort Drei, auch einen sehr kleinen Wert
hat. Dies ist abhängig von der großen phonetischen Ähnlichkeit der Wörter Zwei
und Drei. Falls das System keine feinere Unterscheidung vornimmt, würde es
annehmen, dass der Benutzer zwei gesagt hat.
Um die Erkennungswahrscheinlichkeit zu erhöhen, könnte man den zweitkleinsten Abstand heranziehen. Ist der Abstand zwischen dem kleinsten und
zweitkleinsten, hier zwischen Zwei und Drei zu klein, kann man annehmen,
dass die erfolgreiche und richtige Erkennung unwahrscheinlich ist, es kann
nicht sichergestellt werden, welche Äußerung nun richtig ist. Aus diesem Grund
werden häufig mehrere Vergleichsmuster gespeichert. Hier wird dann die Äußerung mit allen gespeicherten Referenzmustern verglichen und die Abstände der
gleichen Worte über einen Mittelwert ermittelt.
22
KAPITEL 2. DIE SPRACHERKENNUNG
2.5. DER MUSTERVERGLEICH
Abbildung 2.5: Eine typische Spracherkennung, anhand eines Mustervergleichs
Das Eingangssignal wird zu allererst digitalisiert und einer kleinen Vorverarbeitung unterzogen. Bei dem Schritt, die Merkmale (oft engl. features) zu extrahieren, werden zuerst die Grenzen der Äußerung ermittelt. Dies geschieht meistens
mittels einer einfachen Detektion der Lautstärke. Danach werden blockweise
die Merkmale gewonnen. Dazu wird meistens ein Block mit einer Größe von
20ms gewählt und daraus die Merkmale extrahiert und gespeichert, die Blöcke
überlappen sich dabei. Diese gewonnen Merkmale beschreiben die Äußerung
mit Informationen, die zur Spracherkennung herangezogen werden. Meistens
werden diese Merkmale mit einer Form der Spektralanalyse gewonnen und typischerweise mit Hilfe der sogenannten Mel-Frequenz-Cepstrum-Koeffizienten
(MFCC) gespeichert.
Die vorliegenden Vergleichsmuster werden nun herangezogen, um das aktuell
berechnete Muster mit jedem einzelnen Referenzmuster zu vergleichen. Diese
wurden ebenfals mit dem oben beschriebenen Verfahren gewonnen und lassen
sich nun durch einfache Vergleichsmuster miteinander vergleichen. Das am
besten passende Muster gewinnt.
Häufig wird jedoch nicht nur auf die Ähnlichkeit von Äußerungen vertraut, es
werden auch Wahrscheinlichkeiten für das Auftreten von Äußerungen benutzt.
Der Extremfall hierbei ist, wenn vorgegebene Grammatiken benutzt werden und
so nur bestimmte Wortfolgen erlaubt werden, denn so kann der Wortschatz für
das zu erwartende Wort erheblich reduziert werden.
23
2.5. DER MUSTERVERGLEICH
KAPITEL 2. DIE SPRACHERKENNUNG
24
3 Sprachsynthese
3.1 Einleitung
Schon seit der zweiten Hälfte des 18. Jahrhunderts wurde versucht, die menschliche Sprache künstlich zu erzeugen. Damals versuchte Wolfgang von Kempelen
(23. Januar 1734 - 26. März 1804) eine Maschine zu bauen, die menschliche
Sprachlaute erzeugen kann. [Schr93]
Abbildung 3.1: Nachbau der Sprechmaschine von Kempelen
Die Funktionsweise dieser „Sprechmaschine“basiert auf der möglichst naturgetreuen Nachbildung der menschlichen Sprechorgane. Dabei wird die Lunge
durch einen Blasebalg und der Mund durch einen Gummitrichter simuliert. Zwei
zusätzliche kleine Rohre sollten die Nase ersetzen, diese wurden verschlossen, außer wenn Nasale oder Nasalvokale hervorgebracht werden sollten.
Durch Veränderung der Abdeckung des Gummitrichters ließen sich sowohl
unterschiedliche Vokale sowie auch gewisse Konsonanten erzeugen.
In den Anfängen der Computertechnik wurde mittels von Formantsynthetisatoren die Sprache erzeugt. Diese Technik ist ein analoges Quelle-Filter-Modell.
Die Quelle ist ein Signalgenerator, der ein periodisches, impulsförmiges Signal
als Eingangssignal für den Filter liefert. Dieser Filter simuliert und modelliert den
menschlichen Vokaltrakt, indem er lautcharakteristische Spektren aufmischt.
25
3.2. DIE MÖGLICHKEITEN DER SPRACHSYNTHESE
KAPITEL 3. SPRACHSYNTHESE
Erst später wurde versucht, eine Verkettung menschlich klingender, natürlicher
Sprachsignalelemente zu erzeugen. Begonnen wurde mit dem Diphonansatz
und später, als die Rechen- und Speicherkapazität zunahm, setzte man auf
korpusbasierte Systeme (engl. unit selection synthesis).
Bei korpusbasierten Systemen wird aus einer Datenbank mit vorhandenen Formanten durch spezielle Suchalgorithmen und gewichtete Entscheidungsbäume
eine Reihe möglichst langer, gespeicherter Äußerungen gebildet.
Die Qualität synthetischer Sprache wird durch zwei erhebliche Punkte bestimmt.
Zum Einen muss synthetische Sprache gut zu verstehen sein (Verständlichkeit)
und zum Anderen muss diese auch angenehm klingen, sie muss natürlich
klingen, es darf nicht unangenehm sein, einer künstlichen Sprache zuzuhören.
Die Verständlichkeit synthetisch erzeugter Sprache kann inzwischen als sehr gut
eingestuft werden. Ein immer noch offenes Problem ist jedoch die Natürlichkeit
künstlich erzeugter Sprache.
Ein Teil dieser Arbeit wird sein, existierende Sprachsynthesesysteme für die
deutsche Sprache zu analysieren, eines auszuwählen, um es anschließend als
Gegenstück zur Spracherkennung in eine Software zu implementieren, sodass
ein Dialogsystem entsteht.
3.2 Die Möglichkeiten der Sprachsynthese
3.2.1 Einsatz im Multimediabereich
Auch hier gibt es eine Vielzahl von Einsatzmöglichkeiten, z.B kann man sich ein
Lernsystem für eine Fremdsprache vorstellen, in dem die Software die korrekte
Aussprache des fremdsprachigen Wortes vorliest.
Im Internet ist heute schon sehr häufig die Funktion zu finden, sich z.B. einen
Artikel vorlesen lassen zu können.
Dienste, die mit sensiblen oder privaten Daten wie Bankkonten in Berührung
kommen, können ebenfalls von der Anwendung eines Sprachsynthesesystems
profitieren.
Navigationssysteme können Steckenanweisungen während der Fahrt verbal
übermitteln und machen das Kartenlesen überflüssig, was die Sicherheit des
Autofahrens erhöht.
26
KAPITEL 3. SPRACHSYNTHESE
3.3. DER AUFBAU EINES SPRACHSYNTHESE-SYSTEMS
3.2.2 Einsatz für behinderte Menschen
Für blinde Menschen kann die Technik der synthetischen Sprache sehr wertvoll
sein. Da sie keine visuellen Displays benutzen können, müssen sie auf eine
Braillezeile zurückgreifen, oder eben eine Software einsetzen, die ihnen den
Bildschirminhalt akustisch übermitteln kann. Auch Sprechbehinderte oder Taubstumme profitieren von einem TTS-System (T ext to Speech) und können so
leichter mit anderen Menschen kommunizieren.
3.2.3 Einsatz als Kontrollwerkzeug
Audiovisuelle Rückmeldungen von kritischen Systemen sind auf jeden Fall
immer dann sehr wertvoll, wenn der agierende Mensch sich auf eine Tätigkeit
konzentrieren muss und keine Zeit findet, Kontrollen durchzuführen. So wird
es in zahlreichen Industriezweigen oder auch z.B. im Cockpit eines Flugzeugs
Situationen geben, wo ein Feedback in Form von einem Sprachkommando sehr
nützlich sein kann.
3.3 Der Aufbau eines Sprachsynthese-Systems
Sprachsynthese-Systeme bestehen immer aus zwei Komponenten, sie werden
häufig NLP und DSP genannt.
Abbildung 3.2: Ein typischer Aufbau eines Sprachsynthesesystems
3.3.1 NLP (Natural Language Processing)
Unter NLP versteht man die Transformation von Text in Lautschrift und ProsodieBeschreibung. Hier wird ein Text als Eingabe aufgefasst, alle Abkürzungen
und Zahlen werden aufgelöst und durch Wörter ersetzt. Der so entstandene
durchgängige Text wird nun in Lautschrift konvertiert und es wird versucht,
durch zusätzliche Informationen den Rhythmus, die Intonation, die Lautdauer
und weitere Parameter zu beschreiben. Hierbei wird versucht, den Sachverhalt
zu bestimmen und die Betonung auf bestimmte Teile zu setzen, denn durch die
Betonung wird das Verständnis erheblich bestimmt.
27
3.3. DER AUFBAU EINES SPRACHSYNTHESE-SYSTEMS
KAPITEL 3. SPRACHSYNTHESE
3.3.2 DSP (Digital Speech Processing)
Die DSP Komponente besitzt die Aufgabe den phonetisch beschriebenen Text
des NLP Moduls nun akustisch zu synthetisieren. Dieses DSP Modul arbeitet in
der Regel mit einem der drei folgenden Hauptverfahren:
Formant Synthese:
Das Sprachsignal wird anhand physikalischer Modelle berechnet. Diese
Technik ist sehr flexibel und hat geringste Ressourcen-Anforderungen.
Dieses System benötigt sehr viele komplexe Regeln, welche die Laute
genau beschreiben, in welchem Kontext sie vorkommen und wie die
Übergänge zu anderen Lauten sind. Dieses Verfahren bringt jedoch einen
Nachteil mit sich, die so produzierte Sprache klingt nicht sehr natürlich,
wodurch die Akzeptanz eines solchen Systems sinkt.
Diphon Synthese:
Das Sprachsignal wird durch Verkettung von Diphonen (Nachbarlaut Kombinationen), die im Vorfeld aufgenommen wurden, erzeugt. Die ProsodieAnpassung geschieht durch Signal-Manipulation. Die Diphon-Datenbank
ist eine Sammlung von Diphonen von zerlegten und phonologisch ausgewogenen Testsätzen, die von einem Sprecher aufgenommen wurden.
Eine Diphonsynthese ist somit automatisch personalisiert. Diese Technik
benötigt ebenfalls sehr wenig Ressourcen und eignet sich damit auch für
embedded Anwendungen, klingt jedoch ebenso wie die Formant Synthese
nur wenig natürlich.
Non-uniform unit selection:
Die Idee von Non-uniform unit selection ist, die Datenbank so zu erweitern,
dass ganze Lautketten und sogar ganze, häufig verwendete Wörter in
der Datenbank auftauchen. Denn umso weniger Verkettungen benötigt
werden, desto natürlicher klingt die Sprache. Es wird immer der längste
vorhandene und prosodisch passende Teil genommen und mit dem nächsten verkettet. Falls kein großer Baustein vorhanden ist, wird auf einen
kleineren zurückgegriffen und dabei über eine doppelte Kostenfunktion
minimiert: die Stücke sollen gut aneinander passen und die Vorgaben der
Ziel-Prosodie erfüllen. Aufgrund der sehr großen Datenbank war früher
nur eine servergestützte Synthese möglich. Inzwischen ist es aber unter
den kommerziellen Sprachsynthesesystemen zu einem Quasi-Standard
geworden, da die so produzierte Sprache sehr natürlich klingt.
28
4 Software für Spracherkennung
In der Betrachtung des Marktes der Spracherkennungssoftware kristallisieren
sich vier erfolgreiche Systeme heraus:
• IBM ViaVoice basierende Systeme wie Philips FreeSpeech oder
VoicePro von linguatec
©
®
• Dragon NaturallySpeaking Version 10 von der Firma Nuance
• Sphinx von der Carnegie Mellon University, Pittsburgh, Pennsylvania,
USA
• Julius des Nagoya Institute of Technology, Nagoya, Japan, in Verbindung
mit dem HTK Toolkit der Cambridge University, UK
Sphinx und Julius sind plattformübergreifende Open-Source Lösungen, welche sich daher für meine Bachelorarbeit sehr gut eignen. Die beiden kom©
merziellen Systeme ViaVoice und Dragon NaturallySpeaking sind leider reine
TM
Microsoft Windows Lösungen, die nur mit erheblichen Aufwand unter Linux
TM
lauffähig werden, indem z.B. Microsoft Windows virtualisiert, oder wenn Wine,
TM
ein Windows -Emulator verwendet wird.
29
4.1. KOMMERZIELLE SYSTEME
KAPITEL 4. SOFTWARE FÜR SPRACHERKENNUNG
4.1 Kommerzielle Systeme
4.1.1 IBM ViaVoice
IBM ViaVoice wird schon seit den frühen 70er Jahren entwickelt. [IBMHistory] Schon damals war es
das Ziel, eine Software zu entwickeln, die dem
Anwender ermöglicht, Geräte mit der Sprache zu
steuern.
Erst 1984 wurde aus dem Forschungsprojekt bei IBM die erste Software für den
Benutzer vorgestellt. Sie benötigte jedoch noch einen 4341 Mainframe Rechner.
Abbildung 4.2: IBM 4341 Mainframe Rechner mit 233MHz
Bereits wenige Jahre später wurde nicht mehr dieser raumfüllende Mainframe
Rechner benötigt, jetzt konnte die Spracherkennung an jedem Personal Computer mit einer besonderen Hardware Adapter Karte durchgeführt werden. Auf
dieser Adapter Karte war ein Mikrofoneingang und ein Chip für die Spracherkennung vorhanden.
Mitte der 90er Jahre führte IBM die Software VoiceType für das kürzlich erTM
schienene Microsoft Windows 95 und das hauseigene Betriebssystem OS/2
ein. Diese Software wurde bis in das Jahr 2005 weiterentwickelt, es wurden
TM
Versionen für Microsoft Windows , aber auch teilweise kostenpflichtige und
proprietäre Versionen für Linux und Apples Mac OS X angeboten.
IBM gab den Vertrieb von ViaVoice ab und veröffentlichte ein SDK (Software
Development K it) für Entwickler. Dieses SDK erlaubte es, auf embedded Geräten, wie einem Navigationssystem oder einem Handy Spracherkennung durchzuführen. Linguatec und Philips haben auf ViaVoice aufgesetzt und eigene
30
KAPITEL 4. SOFTWARE FÜR SPRACHERKENNUNG
4.1. KOMMERZIELLE SYSTEME
Produkte auf den Markt gebracht. Aus ViaVoice ging jedoch leider nie eine
aktuelle Spracherkennung für Linux hervor.
Heute, im Jahr 2008, muss man, wenn man das Betriebssystem Linux einsetzt,
entweder auf Sphinx der Carnegie Mellon University oder auf das HTK Toolkit
der Cambridge University zurückgreifen.
4.1.2 Philips FreeSpeech und Philips SpeechMagic
Philips FreeSpeech ist eine umfangreiche Software im Bereich der Spracherkennung. Sie unterstützt viele Sprachen und ist zudem mehrbenutzerfähig. Die Software ermöglicht nach einem kurzem
Training eine genaue Spracherkennung. Des weiteren ist in diese Spracherkennungssoftware ein Korrekturprogramm integriert, welches das gleichzeitige
Korrigieren eines gerade diktierten Textes möglich macht, indem man mit speziellen Schlüsselwörtern das Programm steuert. Die primäre Zielgruppe dieser
Software richtet sich vorallem an den Management-Sektor großer Firmen.
4.1.3 Dragon NaturallySpeaking
©
Dragon
NaturallySpeaking von
Nuance,
ist
das
meist
der
verkaufte
Firma
Sprach-
erkennungsprogramm auf dem Markt. Die
Beliebtheit hat mehrere Gründe, Nuance hat
durch Zukäufe, beispielsweise von der Firma ScanSoft, eine Monopolstellung
©
in diesem Marktsektor erreicht. Dragon NaturallySpeaking funktioniert zudem
sehr gut, laut Spezifikation hat das Programm eine Erkennungsrate von bis
zu 99%, was eine sehr gut trainierte Datenbank voraus setzt. Die Spracherkennungssoftware von Nuance wird hauptsächlich von Rechtsanwälten und
Medizinern verwendet, da Nunace den Wortschatz auf diese Zielgruppe hin
optimiert hat.
Ein besonderes Feature ist die Möglichkeit, während des Diktierens den Satzbau zu ändern und so den schon gesprochenen Satz zu korrigieren. Es lässt
sich mit diesem Programm jedoch nicht nur diktieren, man hat zudem die
Möglichkeit, den Computer selbst durch Sprache zu steuern. Es lassen sich
bestimmte Befehle anlernen, die dann bei erfolgreicher Spracherkennung ausgeführt werden, so kann kinderleicht z.B. der Web-Browser mit der Stimme
31
4.1. KOMMERZIELLE SYSTEME
KAPITEL 4. SOFTWARE FÜR SPRACHERKENNUNG
navigiert werden. Das Programm ist leider jedoch nicht unter Linux lauffähig, es
TM
setzt zwingend ein aktuelles Windows Betriebssystem vorraus. Auch die 1GB
Arbeitsspeicher, welche in den benötigten Systemressourcen genannt werden,
lassen vermuten, dass das Programm sehr ressourcenintensiv arbeitet.
32
KAPITEL 4. SOFTWARE FÜR SPRACHERKENNUNG
4.2. OPEN-SOURCE SYSTEME
4.2 Open-Source Systeme
4.2.1 CMU Sphinx
Sphinx ist ein Open-Source Softwarepaket der
renommierten, amerikanischen Carnegie Mellon
University, welches mit der BSD Open-Source Lizenz vertrieben, oder besser gesagt angeboten wird. Diese Lizenz besagt,
dass jeder die Software benutzen und sogar verkaufen darf, es muss jedoch
erkenntlich gemacht werden, dass es sich um eine Software der CMU handelt.
Die Sphinx Software ist ein aus einem DARPA (Defense Advanced Research
Projects Agency) finanzierten Projekt hervorgegangen. Aktuell wird das Projekt
an der CMU weiterentwickelt und erhält z.B. von SUN Microsystems Unterstützung. [LHR90] Im Grunde ist Sphinx ein sprecherunabhängiges System zur
Spracherkennung mit großem Vokabular, bei dem HMM (Hidden Markov Modelle) zum Einsatz kommen. Eine Besonderheit ist die Möglichkeit zur Erstellung
eigener Sprachmodelle. So ist es für den Anwender möglich, ein persönliches
Sprach- und Akustikmodel für seine individuelle Sprache und auch für seine
individuelle Stimme zu erstellen.
Derzeit werden zwei unterschiedliche Versionen von Sphinx entwickelt:
• Sphinx 3
Diese Version ist für eine höchstmögliche Erkennungsrate ausgelegt. Allerdings sind die verwendeten Algorithmen so komplex, dass die Erkennung,
auch mit aktueller Hardware, nicht in Echtzeit erfolgen kann.
• Sphinx 4
Aufgrund der enormen Hardware Anforderungen und der entstandenen
Unflexibilität von Sphinx3, wurde die Software in der Version 4 komplett
redesigned und in Java neu geschrieben.
Aber auch Sphinx4 ist sehr Ressourcen raubend, einfache Demo Anwendungen
benötigen bereits eine Java Virtual Machine mit 1GB Speicher. Sphinx4 ist aber
auch sehr modular aufgebaut, so dass sich Plugins zur Laufzeit einbinden und
auch wieder lösen lassen. Durch die Modularität kann man in Zukunft sehr
flexibel auf Neuerungen reagieren. [WLK+04]
33
4.2. OPEN-SOURCE SYSTEME
KAPITEL 4. SOFTWARE FÜR SPRACHERKENNUNG
4.2.2 Julius und das HTK Toolkit
Julius
Julius
ist
eine
LVCSR(Large
V ocabulary
Continuous Speech Recognition)-Engine für
Diktate mit einem großen Vokabular. Julius ist
dafür ausgelegt, aus einem sehr großen Vokabular
Sprache zu erkennen, dabei nicht nur einzelne,
sondern auch zusammenhängende Wörter, die zu
einem Satz geformt sind. Dies ist ein wichtiger Aspekt, denn so schafft es Julius,
die Erkennungsrate zu steigern. Denn durch vorgegebene Satzstrukturen
können die möglichen Treffer reduziert werden. Ein großes Vokabular bedeutet
hier, 60 000 Wörter. Julius schafft es, durch ein 2-schichtiges System in
Echtzeit Sprache aus solch einem großen Vokabular zu erkennen.
Julius wird seit 1997 ständig weiterentwickelt und von vielen namhaften
Organisationen unterstützt. Ursprünglich wurde die Software für die Japanische
Sprache entwickelt, es hat sich aber gezeigt, dass sich die Software durch ihre
vielfältige Unterstützung von Standards, wie HMM Modellen, DFA Grammatiken
und N-Gram Modellen auch sehr gut für anders aufgebaute Sprachen eignet.
Mit Julius ist es also möglich, anhand eines vorhandenen Sprachmodells die
Sprache zu erkennen und das mit unglaublicher Geschwindigkeit und Präzision.
[KLTI+04]
Wie entsteht jedoch solch ein benötigtes Sprachmodell?
Dies geschieht mit Hilfe einer Sammlung von Werkzeugen für Hidden Markov
Modelle – dem HTK Toolkit.
HTK Toolkit
Das HTK Toolkit ist eine Sammlung von Werkzeugen zum Erstellen und Modifizieren von HMMs. Es kann nicht nur dazu benutzt werden, um Sprachmodelle
zur Spracherkennung anzufertigen, sondern HTK ist in der Lage jegliche Art
von Modellen zur Mustererkennung, so wie auch die Spracherkennung eine
ist, zu erstellen. So wird das HTK Toolkit z.B. auch dazu eingesetzt, eine DNASequenzanalyse durchzuführen.
Das HTK Toolkit erstellt hier in unserem Fall das Sprachmodell. Eingabe-Daten
sind zum einen die Sprachaufnahmen für die Referenzmuster, zweitens benötigt HTK eine Liste aller in den Mustern vorkommender Phoneme. Als drittes
34
KAPITEL 4. SOFTWARE FÜR SPRACHERKENNUNG
4.2. OPEN-SOURCE SYSTEME
braucht das HTK Toolkit als Input eine Zuordnungstabelle der jeweiligen Wörtern und Phonemen zu den entsprechenden Sprachaufnahmen. Intern erstellt
das HTK Toolkit noch eine Liste der Triphone. [Youn94]
Beispieldaten sind im Anhang zu finden.
Hidden Markov Modelle
In diesem Abschnitt möchte ich kurz auf die eingesetzte Technik der Hidden
Markov Modelle eingehen und diese anhand eines Beispiels darstellen. Das
Hidden Markov Model (kurz: HMM), welches nach dem russischen Mathematiker Andrej Andrejewitsch Markov benannt, ist eine Darstellungsform, ein
statistisches Modell zu repräsentieren.
Dieses Modell beschreibt einen der verbreitetsten und auch sichersten Suchalgorithmen. Der Nachteil bei diesem Algorithmus ist jedoch der hohe Rechenaufwand. Für einen kompletten Durchlauf eines Wortes mit n Phonemen und der
Länge T würde der Rechenaufwand bei 2T 2 n liegen. Da selbst bei einer kleinen
Anzahl von Werten enorme Rechenzeit benötigt wird, bricht man das Verfahren
vorzeitig ab und setzt spezielle Optimierungsalgorithmen (Viterbi-Algorithmus,
Forward-Backward-Algorithmus, Baum-Welch-Optimierungs-Regeln) ein, um
die Verschlechterung des Ergebnisses durch vorzeitigen Abbruch zu eliminieren.
Dadurch wird aber eine Echtzeitberechnung erst möglich.
35
4.2. OPEN-SOURCE SYSTEME
KAPITEL 4. SOFTWARE FÜR SPRACHERKENNUNG
In der Spracherkennung wird das gesuchte Wort als eine Markov Kette beschrieben. Jedes Phonem wird als ein Zustand in der Markov-Kette dargestellt.
Abbildung 4.7: Beispiel einer Markov Kette
In diesem Beispiel sind die Phoneme O, F, E, N, T in einer Markov-Kette dargestellt. Die gerichteten Kanten x1...e12 beschreiben die Lautübergänge von
dem einen zum nächsten Phonem. In Abbildung 4.7 sind nur für dieses Beispiel
relevante Kanten abgebildet, denn eigentlich besitzt jedes Phonem Kanten zu
jedem Phonem. Die Endzustände y1...y5 beschreiben das erkannte Wort. In
dem Beispiel in der Abbildung 4.7 kann das erkannte Wort z.B. „Ofen“ sein, falls
der Endzustand y4 ist, oder es kann auch das Wort „Oft“ sein, falls der Endzustand y5 ist. Es könnte passieren, dass der Sprecher das „e“ nicht ausspricht,
also „Ofn“ sagt, so wie es umgangssprachlich sehr gern gemacht wird. Das
Modell würde trotzdem den richtigen Endzustand y4 für das das Wort „Ofen“ erreichen. Jeder Zustand besitzt auch eine Kante auf sich selbst, so können lang
ausgesprochene Phoneme auch erkannt werden. Wenn der Sprecher das „E“ in
die Länge ziehen würde, welches „Ofen“ zu „Ofe:n“ macht, dann wird auch
diese Situation ebenfalls durch dieses Modell abgedeckt und das richtige Wort
„Ofen“ erkannt.
Jeder Zustand hat Wahrscheinlichkeiten, in den nächsten Zustand überzugehen.
Dabei sind diese gewichtet, z.B. ist die Wahrscheinlichkeit, dass auf ein ‚e‘ ein
‚r‘ folgt sehr viel höher, als dass auf ein ‚s‘ ein ‚r‘ folgt.
36
5 Software für Sprachsynthese
In dieser Arbeit wird das Verwenden des Betriebssystems Linux sowie der
Open-Source Software angestrebt, weshalb in folgender Marktübersicht nur
wenig auf proprietäre und – oder auch kommerzielle Software eingegangen
TM
wird. In diesem Sektor gibt es für Windows wesentlich mehr Software, freie und
gute Produkte für Linux zu finden, ist leider nicht so einfach.
5.1 Kommerzielle Systeme
5.1.1 AT&T Natural Voices SDK
TM
Natural Voices von AT&T ist ein Text-zu-Sprache System. Entstanden ist dieses System aus einem Forschungsprojekt der AT&T Inc. Forschungsabteilung. Die
Software wirbt damit, das beste Text-zu-Sprache System mit der verständlichsten Sprache zu sein. Leider ist das SDK(Software Development K it) nur
kommerziell, für $300 zu beziehen.
5.1.2 FonixTalk 6.1 SDK
FonixTalk ist ein mehrsprachiges Text-zu-Sprache Sys®
tem, welches kommerziell von fonix vertrieben wird.
Glücklicherweise ist aber ein SDK für Linux verfügbar
und könnte somit ideal für das Projekt der Bachelorarbeit verwendet werden.
FonixTalk erzeugt sehr natürlich klingende Sprache und das äußerst ressourcenschonend, sodass FonixTalk auch auf embedded Geräten laufen kann, was
für dieses Projekt sehr nützlich ist. Die Sprachausgabe kann sehr genau bestimmt werden, es gibt zahlreiche Parameter, z.B. für Pausen oder Emotionen,
37
5.2. OPEN-SOURCE SYSTEME
KAPITEL 5. SOFTWARE FÜR SPRACHSYNTHESE
ebenso können auch Fremdwörter in der richtigen Sprache ausgegeben werden, da das System selbsändig zwischen verschiedenen Sprachen wechseln
kann.
5.2 Open-Source Systeme
5.2.1 MBROLA
Ein Beispiel für Open-Source Software ist MBROLA(Multi
Band Resynthesis Overlap and Add), ein Synthesizer für
mehr als 20 Sprachen. Entwickelt wird das System an der
Universität in Mons, Belgien. Die Software ist proprietär,wird
jedoch kostenlos für nicht kommerzielle Zwecke für sehr viele,
auch exotische Plattformen angeboten.
Die Technik hinter MBROLA besteht aus der Verkettung von Diphonen. Jedoch
ist MBROLA nicht ein Text-zu-Sprache System, denn es wird ein Textvorverarbeiter benötigt. Der Input von MBROLA ist eine Liste von Phonemen mit
zusätzlichen Informationen zur Länge der einzelnen Phoneme und eine Beschreibung der Tonhöhe der Phoneme. Daraus generiert das System eine gut
klingende Sprachausgabe.
5.2.2 BOSS - Bonn Open Synthesis System
Das Bonn Open Synthesis System (BOSS) ist ein freies
Open-Source Sprachsynthese-System. Das BOSS-System
basiert auf einer Client-Server-Architektur, die von Entwicklern und Forschern verwendet werden kann, um eigene TextTo-Speech- oder Content-To-Speech-Systeme zu entwickeln.
Das BOSS-System verwendet den Non-Uniform-Unit-Selection-Ansatz und ist
so in der Lage, eine gute Sprachqualität mit hoher Natürlichkeit zu erzielen.
5.2.3 FreeTTS
TM
FreeTTS ist eine in Java geschriebene Programmbibliothek, die zur SprachTM
synthese dient. Wenn jemand eine Sprachausgabe in sein Java Programm
integrieren möchte, ist FreeTTS die erste Wahl. Auch FreeTTS verfolgt den
38
KAPITEL 5. SOFTWARE FÜR SPRACHSYNTHESE
5.2. OPEN-SOURCE SYSTEME
Ansatz der Diphon Synthese. Da FreeTTS aus dem FestVox Projekt entstand,
sind die daraus verfügbaren Sprachen auch hier verwendbar, ebenso können
die MBROLA Sprachen verwendet werden.
5.2.4 Festival und Festival Lite (Flite)
Festival Speech Synthesis Systems wurde in einem Forschungslabor der
Edinburgh University Ende der 90er Jahre entwickelt. Festival ist nicht nur ein
Text-zu-Sprache Synthesizer auf Basis von Diphonen, die durch HTS(Hidden
Markov Model Based Synthesis) zusammengesetzt werden, sondern auch eine
Sammlung von Werkzeugen, um ein eigenes Sprachpaket zu erstellen. So
könnte der Computer mit der eigenen Sprache sprechen. Leider ist trotz dieser
Möglichkeit keine frei verfügbare deutsche Sprache für Festival verfügbar. Für
Festival gibt es eine mächtige C++ Bibliothek und die Möglichkeit, mittels der
Scriptsprache Scheme während Laufzeit das Stimmbild zu beeinflussen.
Flite ist, wie der Name sagt eine light-Version des großen Bruders Festival.
Flite ist sehr schneller, reiner Text-zu-Sprache Synthesierer. Flite kann sogar
auf embedded Geräten, wie einem Palm, Sprache in Echtzeit synthesieren.
In Kombination mit HTS (HMM-based Speech Synthesis System)
ist Flite in der Lage, eine mit einem Hidden Markov Modell trainierte
Sprachdatenbank zu synthesieren und liefert so eine sehr gute
Qualität.
5.2.5 eSpeak
eSpeak, der Nachfolger der schon sehr früh entwickelten
Software speak, ist ein Open Source Projekt des Software
Entwicklers Jonathan Duddington. eSpeak ist ein sehr kleines Programm für Sprachsynthese und kommt mit nur ca.
700Kb Speicher aus. Das Programm nutzt keine Diphon-Synthese, die auf
einer Datenbank vorhandener Samples basiert, sondern erzeugt das Signal
rein durch Signalmodellierung, ähnlich einer Formanten-Synthese. Aus diesem
Grund hört sich eSpeak nicht so natürlich und flüssig an, es ist jedoch durchaus
klar und verständlich. eSpeak stellt zudem eine Bibliothek für C und C++ bereit,
um eSpeak in die eigene Software mit einzubauen. Die API dieser Bibliothek
ist sehr einfach gehalten, trotzdem lassen sich verschiedene Parameter, wie
die Sprache oder auch die Sprechgeschwindigkeit einstellen.
39
5.2. OPEN-SOURCE SYSTEME
KAPITEL 5. SOFTWARE FÜR SPRACHSYNTHESE
40
6 Das Sprachmodell
6.1 Einleitung
Ein Spracherkennungssystem analysiert den Sprachinput, indem es ihn mit
dem Sprachmodell vergleicht. Um beste Ergebnisse zu erhalten, sollte das
Sprachmodell eine möglichst genaue Repräsentation der menschlichen Stimme
darstellen. Ein gutes Sprachmodell in Verbindung mit einer schlechten Software
erzielt trotzdem weitaus bessere Ergebnisse, als ein schlechtes Sprachmodell
mit guter Software. Aus diesem Grund sollte natürlich dafür gesorgt werden,
dass das Sprachmodell qualitativ möglichst gut ist. Ein Sprachmodell besteht
aus einer Zusammenstellung mehrerer Dateien.
Im folgenden wird ein Überblick der Elemente gegeben, aus denen sich die
Daten der Sprachmodells zusammensetzen.
Ziel des Sprachmodells ist die möglichst genaue Repräsentation der möglichen
Satz-Konstrukte auf Laut-Ebene. Wie bereits im Abschitt 2.5 (Mustervergleich)
dargestellt, basiert die Spracherkennung auf einer Statistikrechnung. Diese
Statistikrechnung vergleicht den aktuellen Input mit einem „Set“ an Daten - dem
Sprachmodell.
6.2 Lautschrift
Ein erster Schritt für ein Sprachmodell kann die Bestimmung der Lautschrift
sein, die die Daten der Transkription liefert. Mit der Zeit haben sich unterschiedliche Lautschriftsysteme entwickelt, mit dem Ziel, die Aussprache von Lauten
möglichst exakt zu beschreiben. Lautschriften spielen besonders beim Erlernen
von Fremdsprachen eine große Rolle, aber auch hier in der Computerlinguistik
und der Phonetik dienen diese Lautschriftsysteme zum detailierten Beschreiben
der exakten Aussprache.
Es gibt unterschiedliche Lautschriftsysteme. Weltweit wird die sogenannte IPA
41
6.2. LAUTSCHRIFT
KAPITEL 6. DAS SPRACHMODELL
(International Phonetic Alphabet) Notation eingesetzt.
Die IPA-Zeichentabelle nutzt Buchstaben des lateinischen und griechischen
Alphabets, teilweise in abgewandelter Form und andere Symbole für weitere
Aussprachedetails. Jedes Zeichen bezeichnet dabei einen Laut oder beschreibt
einen bereits angegebenen Laut näher. So finden sich für den Buchstaben A
mehrere Lautschriftzeichen, die jeweils einen anderen phonetischen Charakter
haben:
• a offenes, kurzes a, Beispiel Kamm [kh am]
• 5 dumpfes, etwas helles a, zwischen a und ae, Beispiel besser ["bEs5]
• A dunkles, langes a, Beispiel Bad [bAt]
• 6 dunkles, gerundetes a, Beispiel engl. flop [fl6p]
• æ offenes, etwas hells a zwischen a und ä, Beispiel engl. axe [æks]
• ã nasaliertes a, Beispiel Orange [o"rã:Z@]
• 2 dunkles, ungerundetes a, Beispiel engl. butter [b2th @]
Unter den Symbolen bedeutet z.B. das Zeichen :, dass das vorangestellte
Zeichen lang ausgesprochen wird.
Die Sonderzeichen dieses IPA-Alphabets sind in dem Unicode-Zeichensatz
enthalten. Dies ist ein internationaler Standard für jedes sinntragende Schriftzeichen. Alle Schrift- oder auch andere Zeichen sind mit UTF-8 codiert. Dies ist
die am weitesten verbreitete Methode, Unicode-Schriftzeichen zu speichern.
Die IPA-Notation wird vor allem in der Erstellung und Archivierung von Druckerzeugnissen verwendet.
Das HTK Toolkit und somit auch Julius arbeiten aber der ASCII Codierung.
Zwischen 1987 und 1989 wurde SAMPA(Speech Assessment Methods
Phonetic Alphabet) entwickelt, um die phonemischen Transkriptionen der offiziellen Sprachen der Europäischen Gemeinschaft elektronisch übermitteln
und verarbeiten zu können. Das SAMPA Alphabet wurde von dem britischen
Phonetiker John C. Wells als Auszug des IPA maschinenlesbar und tastaturfreundlich codiert und kann per 7-Bit ASCII dargestellt werden. 1995 veröffentlichte John C. Wells die Erweiterung X-SAMPA (Extendet Speech Assessment
Methods Phonetic Alphabet), in der alle IPA-Zeichen dargestellt werden können. X-SAMPA wird seither zunehmend weltweit verwendet, vor allem auch,
für Spracheingabe- und Sprachausgabe-Systeme sowie für lexikographische
Datenbanken.
42
KAPITEL 6. DAS SPRACHMODELL
6.3. PHONEM
Der Unterschied von IPA zu X-SAMPA wird an dem Wort „Sprache“deutlich:
In der IPA Notation würde so geschrieben werden:
In der X-SAMPA Notation folgendermaßen:
S p ö a: x @
S p r a: x @
Wenn erforderlich, gibt auch Methoden, diese unterschiedlichen Zeichen von
IPA und X-SAMPA jeweils in das andere Format zu konvertieren. [XSP2IPA],
[Wiki]: SAMPA, X-SAMPA, IPA, Liste_der_IPA_Zeichen
6.3 Phonem
So wie der Buchstabe als Zeichen im Schrifttext steht, so werden in der Lautschrift die einzelnen Phoneme dargestellt. Ein Ziel der Phonologie ist, ein
Inventar der Phoneme und ihrer Varianten einer Sprache zu erstellen. Definiert
wird das Phonem als die kleinste, bedeutungsunterscheidende Einheit der Sprache, es gilt als Abstraktion einer konkreten Lautäußerung. Die Realisierung des
Phonems, also das Hörbarmachen, wird Allophon genannt. Für manche Phoneme gibt es Regeln, die durch die Abhängigkeit der Lautumgebung bestimmen,
mit welchem Allophon das Phonem hörbar gemacht wird.
Beispiel: Das Schriftzeichen ch wird je nach Laut-Kontext mit [C] oder [x] angegeben. Als Regel: [x] steht nur nach /a/, /o/, /u/, /au/.
Zwei Wörter, die sich nur in einem Phonem unterscheiden, nennt man ein
Minimalpaar (Beispiel: Tanne / Kanne oder Miete / Mine). Phoneme werden
außerdem eingeteilt in Merkmale wie konsonantisch oder sonorantisch, sie
unterscheiden sich in stimmhaften und aspirierten Merkmalen.
Verschiede Eigenschaften der Phoneme werden auch durch Merkmale aus der
Akustik und der Artikulation bezeichnet. Die Stellung oder die Bewegung der
Sprachorgane bestimmt die artikulatorischen Eigenschaften der Phoneme. Man
unterscheidet:
• Zungenstellung (vorn, neutral, hinten)
• Mundöffnung (offen, halboffen, geschlossen)
• Lippenrundung (gerundet, ungerundet)
• Nasalität (nasal, oral)
• Artikulationsort (labial, inderdental, dental, alveolar, palatal, velar, uvular,
laryngal)
• Artikulationsart (Verschluss, Verschluss mit Reibung, Reibung, nasal,
lateral, Schwingung)
43
6.3. PHONEM
KAPITEL 6. DAS SPRACHMODELL
• Stimmbeteiligung (stimmhaft, stimmlos)
• Quantität (kurz, lang)
Aus der Formantenstruktur der komlexen Schallwellen ergibt sich eine bestimmte akustische Phonem-Eigenschaft. (Als Formant wird in der Akustik die
akustische Energie in einem bestimmten Frqeuenzbereich bezeichnet.) Das
Phonem /u/ kennzeichnet sich z.B. durch einen niedrigen ersten und einen
niedrigen zweiten Formanten.
Wie aus der Abbildung 6.1 zu entnehmen ist, hat das Phonem /u/ durch die
beiden Formantenmerkmale einen dünnen und dunklen Klang. [FIGGEUDO]
Abbildung 6.1: Darstellung zweier Formanten für die Bestimmung akustischer Phonemeigenschaften. Aus [FIGGEUDO]
44
KAPITEL 6. DAS SPRACHMODELL
6.4. BI- UND TRIPHONE
6.4 Bi- und Triphone
Da ein Sprachmodell, das nur aus einzelnen Phonemen besteh, noch sehr
ungenau ist, verwendet man Phonemkombinationen. Jedes Phonem wird je
nach vor- und nachfolgendem Phonem anders ausgesprochen. (Das Phonem
/m/ im Wort „Mama“ klinkt am Anfang anders als in der Mitte.) Diese verknüpften
Informationen werden als Bi- und Triphone auch in unserem Sprachmodell
verwendet. Als Beispiel wieder das Wort Sprache, nun als Triphonkombination
in X-SAMPA Lautschrift:
+-S-p, S-p-r, p-r-a:, r-a:-x, a:-x-@, x-@-*
Durch die fiktiven Phoneme ’+’ und ’*’ an Wortanfang oder -ende wird jedes
Phonem zu einem Triphon, einer Kombination aus 3 Phonemen. Wie man erkennen kann, wird diese Transkription zwar komplexer, versieht aber jeden Laut
mit Kontextinformationen. Ein r-a:-x Triphon repräsentiert trotzdem nur den Laut
„a:“ und nicht „r a: x“.
Durch die erhöhte Laut-Differenzierung steigert wird die Erkennungsrate erheblich gesteigert. All diese Informationen werden in dem HMM (Hidden Markov
Modell) gespeichert.
Da theoretisch jedes Phonem an jedes gereiht werden kann, wären extrem
viele Trainingsdaten notwendig, um alle Kombinationen verlässlich abzudecken.
Deshalb werden Phoneme in Gruppen zusammengefasst. Beispielsweise können alle nasalen Phoneme gruppiert werden. Dies nennt man „clustering“.
Dabei werden die Gruppen der Phoneme von dem HTK Tool HHed zusammengefasst und geclustert. [YEG+06]
6.5 Prosodie
Außer den Phonemen ist Prosodie (griechisch: das Hinzugesungene) maßgeblich für die Spracherkennung. Die Prosodie stellt die spezifischen sprachlichen
Eigenschaften wie der Akzent im Silben-, Wort-, Phrasen- und Satzakzenten mit
Unterschieden in Lautstärke und / oder Tonhöhe. Auch Intonation, Sprechtempo,
Sprechrythmus und -pausen werden durch die Prosodie unterschieden.
Die Schriftauszeichnungen wie fett, kursiv, Schriftgröße geben auf ihre Art
prosodische Merkmale wieder. So korreliert die Interpunktion mit dem Sprecherythmus und den Pausen. Z.B. werden Fragezeichen und Rufzeichen so durch
die Intonation markiert, Pausen korrelierern mit Komma oder Punkt.
45
6.5. PROSODIE
KAPITEL 6. DAS SPRACHMODELL
Die Prosodie beinhaltet ebenfalls die Klangfarbe verschiedener Emotionen, sie
kann personalisierte Merkmale wie Herkunft, Geschlecht, Alter unterscheiden.
Mehrdeutigkeiten können ausgelöst werden durch bestimmte Akzentuierung,
auch wichtige Informationen werden dadurch hervorgehoben.
Prosodische Merkmale haben als Teil der Sprache auch akustisch messbare Eigenschaften – diese können zu Merkmalen für eine Mustererkennung
weiterverarbeitet werden.
Eine durch die Sprachsynthese erzeugte Stimme kann nur natürlich klingen,
wenn sie auch prosodische Merkmale beinhaltet.
46
KAPITEL 6. DAS SPRACHMODELL
6.6. AKUSTIKMODELL
6.6 Akustikmodell
Das Akustikmodell repräsentiert für die Spracherkennungssoftware die Stimme
des Menschen. Es stellt den individuellen Klang der aufgenommenen Stimme
in den einzelnen Laute dar.
Das Akustikmodell wird aus Sprachaufnahmen erstellt, indem es in ein HMM
Modell konvertiert wird. Dieser Vorgang erfordert mehrere Schritte. Angefangen
bei der Filterung der Sprache, wobei die akustischen Grenzen der Äußerung
bestimmt werden und eine Konvertierung in eine spektrale Darstellung der
Aufnahme durchgeführt wird. In einem nächsten Schritt werden die Merkmale (features) extrahiert und in sogennanten MFCC (Mel F requency Cepstral
Coefficients) gespeichert. Zum Schluss werden die so gewonnen Daten in ein
HMM Modell konvertiert.
Als Beispiel hier das Phonem ‚a:‘ aus einem HMM Modell.
~h " a : "
<BEGINHMM>
<NUMSTATES> 5
<STATE> 2
~s " ST_a : _2_1 "
<STATE> 3
~s " ST_a : _3_1 "
<STATE> 4
~s " ST_a : _4_1 "
<TRANSP> 5
0.000000e+00 1.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
0.000000e+00 8.805916e−01 1.194084e−01 0.000000e+00 0.000000e+00
0.000000e+00 0.000000e+00 8.695422e−01 1.304578e−01 0.000000e+00
0.000000e+00 0.000000e+00 0.000000e+00 7.917601e−01 2.082399e−01
0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00 0.000000e+00
<ENDHMM>
Für das Sprachmodell wird eine Liste aller Sprachaufnahmen und den darin
enthaltenen Worten in der Datei prompts gespeichert. Das Programm selbst
speichert die Sprachaufnahmen mit dem ganzen, absoluten Pfad und den darin
enthaltenen Wörtern in der Datei user.samples.
47
6.7. WÖRTERBUCH
KAPITEL 6. DAS SPRACHMODELL
6.7 Wörterbuch
Durch Akustikmodell wird das Spracherkennungssystem an eine bestimmte
Stimme gebunden. Im weiteren geht es um die Auswahl eines Aussprachewörterbuchs.
Im Rahmen dieses Projektes wurde das BOMP (kurz für „Bonn MachineReadable Pronunciation Dictionary“) Wörterbuch der Universität Bonn verwendet. Das BOMP ist ein Aussprachewörterbuch für sehr viele deutsche Wörter,
insgesamt ca. 140 000. Das Wörterbuch verwendet die X-SAMPA-Notation, so
wie wir es für das HTK Toolkit benötigen.
Da das Wörterbuch darf nicht verbreitet werden, muss man es per eMail bei
der Universität Bonn anfragen, und in der Regel erhält man einen Downloadlink.
[BOMP]
Das BOMP Wörterbuch enthält neben dem deutschen Wort und der Übersetzung in die Lautschrift für die Aussprache die Kategorie des Wortes, den
sogenannten Terminal des Wortes. Diese Kategorie gibt an, um welche Wortart
es sich handelt, z.B. NOM für Substantiv (Nomen) oder VRB für ein Verb.
Die Datei ist wie eine Tabelle aufgebaut und wird auch so gespeichert. Die
einzelnen Spalten werden mit einem Tabulator (\t) getrennt.
Wort
...
Sprache
Sprachebene
Sprachen
Sprachfamilie
Sprachfamilien
Sprachlosigkeit
Sprachlosigkeiten
...
Kategorie
...
NOM
NOM
NOM
NOM
NOM
NOM
NOM
...
Aussprache
...
Spra:x@
’Spra:x,?e:b@n@
’Spra:x@n
’Spra:xfa,mi:li@
’Spra:xfa,mi:li@n
’Spra:x,lo:zICkaIt
’Spra:x,lo:zICkaIt@n
...
Tabelle 6.1: Aufbau des BOMP Wörterbuchs
Ziel dieser Arbeit ist, es dem Benutzer zu erleichtern, das sehr komplex aufgebaute Sprachmodell selbst zu erstellen. Das Spracherkennungssystem erkennt
eine Auswahl an Wörtern, alle neuen Wort müssen angelernt werden. Das
BOMP Wörterbuch wird nun dazu verwendet, eine Liste an Übersetzungen in
die X-SAMPA Lautschrift bereit zu halten. Nun kann der Benutzer auch ohne die
Kenntnis der X-SAMPA Lautschrift weitere Wörter auswählen und zum Sprachmodell hinzufügen. Die gewählten Wörter werden in der Datei model.lexicon
und in der Datei user.words gespeichert.
48
KAPITEL 6. DAS SPRACHMODELL
6.8. JULIUS VOKABULAR
6.8 Julius Vokabular
Die vom Benutzer aus dem Aussprachewörterbuch gewählten Wörter, oder
eigens definierte Wörter werden in einem speziellen Format für Julius bzw
HTK gespeichert. Das Julius Vokabular wird nicht in Tabellenform gespeichert,
vielmehr wird hier eine Liste mit Abschnitten verwendet.
Jeder Abschnitt ist durch die Kategorie, bzw Terminal mit führendem %
gekennzeichnet, die Sortierung spielt dabei keine Rolle.
% NOM
Sprache
Sprachfamilie
...
% VRB
sprechen
zeigen
...
Spra:x@
’Spra:xfa,mi:li@
...
’SprE|C@n
’tsaI|g@n
...
Tabelle 6.2: Aufbau einer Julius Vokabeldefinition
6.9 Julius Grammatik
Die Julius Grammatik definiert mögliche Wortfolgen in Form ihrer Kategorie.
S:NS_B:
Kategorie
Kategorie
NS_E
Tabelle 6.3: Aufbau einer Julius Grammatikdefinition
Jeder Satz wird mit „S:“eingeleitet. „NS_B“ und „NS_B“ sind zusätzliche
Satzstart- und Satzstop-Kennzeichnungen.
So wird aus dem Satz „Das ist ein Test“ folgende Julius Grammatikdefinition:
S:NS_B ART:PRO VRB ART:NUM:QAV:TME NOM NS_E
Tabelle 6.4: Beispiel einer Julius Grammatik Definition
Mehrdeutige Wörter sind durch ein „:“ getrennt.
So wird deutlich, dass das Wort „Das“ sowohl ein Artikel (ART), als auch ein
Pronomen (PRO) sein kann. Die Funktionsweise dieser Grammatikverwaltung
ist im Abschnitt 8.2.3 GrammarManager erklärt.
49
6.10. TRAININGSDATEN
KAPITEL 6. DAS SPRACHMODELL
6.10 Trainingsdaten
Die Trainingsdaten sind RIFF-Wave Aufnahmen mit einer Samplerate von 16kHz
und einer Bitrate von 16Bit. Diese Sprachaufnahmen bestimmen die Qualität des
Sprachmodells. Umso besser diese Aufnahmen sind, desto besser funktioniert
die Spracherkennung.
Es sollten jegliche Hintergrundgeräusche vermieden werden, jede Art von
Störung wie z.B. ein vorbeifahrendes Auto bei offenem Fenster, sollten nicht in
diesen Aufnahmen vorkommen. Auch Hall ist nicht erwünscht, die Aufnahmen
klingen dann nicht mehr klar und natürlich, und dies hat zur Folge, dass es
die Erkennungsrate des Programms verschlechtert. Auch wenn der Hall in den
Aufnahmen nicht zu hören ist, ist er trotzdem vorhanden. Hall entsteht, wenn die
Schallwellen von glatten Flächen zurückgeworfen werden. Aus diesem Grund
sollte darauf geachtet werden, dass alle großen und glatten Flächen im Raum
reduziert werden. Hilfsmittel hierfür sind Teppiche, Vorhänge für die Fenster, die
ebenfalls sehr viel Hall erzeugen, und Möbel oder Pflanzen. In jedem Fall muss
für eine schallabsorbierende Oberfläche gesort werden.
Jedoch nicht nur die Räumlichkeit, sondern auch das Mikrofon spielt eine
sehr große Rolle. Bei Mikrofonen unterscheidet man zwischen gerichteten
und ungerichteten Mikrofonen. Die Richtcharakteristik spielt vor allem bei den
Hintergrundgeräuschen eine wichtige Rolle.
Ungerichtete Mikrofone weisen eine Kugelcharakteristik auf. Das heißt, sie nehmen den Schall von
allen Seiten gleich stark auf. Nebengeräusche werden gleichwertig in die Aufnahme mit aufgenommen, weshalb diese Mikrofone in der professionellen Audiotechnik wenig verwendet werden.
Das Richtmikrofon ist ein Mikrofontyp, der Schall
aus einer gewissen Richtung viel stärker aufnimmt
als Schall aus allen anderen Richtungen. So kann
gewährleistet werden, dass in einer Sprachaufnahme der Sprecher am besten zu hören ist.
Abbildung 6.2:
Ungerichtetes und
gerichtetes Mikrofon
50
KAPITEL 6. DAS SPRACHMODELL
6.10. TRAININGSDATEN
Sennheiser Headset
Um nun selbst hochqualitative Sprachaufnahmen durchführen zu können und
um auch in Zukunft die Spracherkennung am Roboter machen zu können
wurde ein passendes Mikrofon gesucht. Die Eigenschaften dieses gesuchten
Mikrofons sollten sein, dass es eine gerichtete Charakteristik aufweisen soll, so
dass nur wenig Nebengeräusche zu hören sind. Um nun auch gleichzeitig die
Sprachausgabe hören zu können schien es sinnvoll, ein Headset zu benutzen.
In einem Headset sind Mikrofon und Kopfhörer kombiniert und durch die Form,
die ein Headset mit sich bringt, ist das Mikrofon sehr dicht vor dem Mund
positioniert und somit weist es ein wenig den Charakter eines gerichteten
Mikrofons auf.
Sennheiser ist ein Produzent von professioneller Audiotechnik wie Mikrofonen und Kopfhörer. Durch die langjährige Forschung und Entwicklung von Mikrofonen kann
man sich auf die Zuverlässigkeit und die Qualität dieser Produkte verlassen,
dies wurde mit dem Kauf eines Headsets bestätigt.
Abbildung 6.4: Verwendetes Sennheiser Mikrofon, PC136
51
6.10. TRAININGSDATEN
KAPITEL 6. DAS SPRACHMODELL
52
7 Eingesetzte Komponenten
7.1 C++
C++ ist eine höhere Programmiersprache. Da das Team des Labors der Hochschule ebenfalls sehr viele Anwendungen mit dieser Sprache entwickelt und ich
bereits Erfahrung mit C++ gesammelt habe, entschloss ich mich das Programm
mit dieser Sprache zu schreiben. Es gibt jedoch einige weitere Gründe sich
für C++ zu entscheiden, es ist eine sehr weit verbreitete, ausgereifte Programmiersprache mit sehr wenig Overhead. Die Objektorientiertheit dieser Sprache
macht sie zudem sehr Modular
7.2 Qt
©
Qt ist ein Toolkit zur Entwicklung mit der Sprache C++. Es hat
eine sehr simple und konstante API und deckt sehr viele Bereiche ab. Der Hauptvorteil liegt aber bei der sehr einfachen
Möglichkeit der Gestaltung der grafischen Bedienungsoberfläche. Mit Qt lassen sich sehr viele Dinge vereinfachen. Man
kann unter anderem sehr einfach Threads, Netzwerkkommunikation und Observer Pattern durch Signals und Slots mit
Leichtigkeit verwenden.
©
Der Slogan von Trolltecs Qt beschreibt das Toolkit treffend:
„Code less. Create more.“
Bei dieser Arbeit musste ich mich auf ein etabliertes und frei verfügbares
Toolkit verlassen können, so dass ich mich ganz auf die Entwicklung des
Programms konzentrieren konnte, außerdem wird gewährleistet, dass in der
weiteren Verwendung und Weiterentwicklung dieses Programms auf die einfa©
che Handhabung und die gute Dokumentation von Qt zurückgegriffen werden
kann.
53
7.3. ADVANCED LINUX SOUND ARCHITECTURE
KAPITEL 7. EINGESETZTE KOMPONENTEN
7.3 Advanced Linux Sound Architecture
ALSA (Advanced Linux Sound Architecture) ist die am weitesten verbreitete Soundarchitektur für Linux. ALSA stellt dabei eine Abstraktionsebene zur Hardware dar, die zusätzlich
direkt in den Kernel von Linux integriert ist. Dem Programmierer werden zahlreiche Schnittstellen zur Soundhardware
angeboten, über die er nicht nur Sound abspielen und aufnehmen, sondern auch z.B. Lautstärke abfragen und einstellen
kann.
Diese Low-Level API bringt jedoch auch seine Schwierigkeiten mit sich, so
erfordern selbst die simpelsten Aufgaben unzählige Methodenaufrufe.
Nach der Prüfung von Phonon, Portaudio und Pulseaudio habe ich mich trotzdem für ALSA entschieden, da die weite Verbreitung und die Mächtigkeit dieser
Bibliothek unschlagbar ist.
7.4 Julius, HTK und eSpeak
Da dieses Projekt mit der Sprache C++entwickelt werden sollte war klar, dass
Sphinx nicht in Frage kommt, da die aktuelle Version 4 von Sphinx mit der
Sprache Java entwickelt wurde. Als Spracherkennungs-System kommt nun
Julius zum Einsatz und mit Hilfe des HTK Toolkits wird das Sprachmodell erstellt,
welches Julius für die Erkennung benötigt. Die Erstellung des Sprachmodells
ist ein sehr komplexer und aufwendiger Vorgang und mit Simon hatte ich die
Möglichkeit, diesen Schritt extern durchführen zu lassen. So musste ich nur die
Input-Daten vorbereiten und an Simon übergeben und nicht die vielzähligen
Schritte zum Sprachmodell selbst durchführen.
Für die Sprachsynthese habe ich mich für eSpeak entschieden. Die leicht
zu bedienende Bibliothek hat mich von Anfang an überzeugt und da die Verständlichkeit als Kriterium ausreichend ist und die Natürlichkeit der klingenden
Sprache in unserem Fall nicht so erheblich ist, konnte auf kommerzielle Software
(z.B. Fonix) verzichtet werden.
54
KAPITEL 7. EINGESETZTE KOMPONENTEN
7.5. SIMON LISTENS
7.4.1 Installation von eSpeak
eSpeak kann bei den meisten Linux Distributionen über die Softwareverwaltung
installiert werden. Falls dies nicht der Fall ist, kann eSpeak auf der Projektseite
auf SourceForge heruntergeladen, entpackt und installiert werden
cd /usr/local/src
wget http://dl.sourceforge.net/sourceforge/espeak/espeak-1.40.02-source.zip
unzip espeak-1.40.02-source.zip
Prompt
cd espeak-1.40.02-source/src && make && make install
7.5 Simon Listens
Simon Listens ist ein Projekt, welches behinderten Menschen den Umgang mit Computern erleichtern soll. Simon bietet als SpracherkennungsSuite dem Benutzer die Möglichkeit, sich ein eigenes Sprachmodell zu erstellen und zu dieses
auch zu verwenden. Bedient wird Simon über eine
sehr einfache grafische Benutzeroberfläche. Der
Anwender hat hier die Möglichkeit, Wörterbücher zu importieren, eigene Wörter
hinzuzufügen und die Wörter zu trainieren.
Simon fungiert als Vorbild dieser Arbeit, denn beide Projekte haben ein ähnliches Ziel. Es soll ein Spracherkennungs-Programm mit Hilfe von Julius entstehen. Viele der in Simon verfügbaren Features sind auch in diesem Projekt
wiederzufinden.
Dadurch, dass Simon sehr modular aufgebaut ist, hat es eigene Bibliotheken,
z.B. zum Erstellen der Sprachmodelle oder zum Anfertigen von Aufnahmen.
Durch das Vorhandensein dieser Bibliotheken hatte ich die Möglichkeit, Simon
für das aufwendig zu erstellende Sprachmodell zu nutzen.
Der ModelCompilationManager – der Teil von Simon, der das Modell für Julius
generiert – wird in diesem Projekt verwendet, um die Wort- und Aufnahmedaten
in das HMM Modell zu konvertieren.
Bevor Simon installiert werden kann, müssen das HTK Toolkit und Julius installiert werden, da dies Abhängigkeiten sind, ohne diese Simon nicht gelinkt
werden kann.
55
7.5. SIMON LISTENS
KAPITEL 7. EINGESETZTE KOMPONENTEN
7.5.1 Installation von HTK
Wie bemerkt, wird das HTK Toolkit wird zwingend benötigt. Nicht nur Julius nutzt
es für die Spracherkennung, auch Simon verwendet das Toolkit zum Erstellen
der Sprachmodelle. Die Installation dieses Toolkits ist denkbar einfach, da es
keine weiteren Abhängigkeiten besitzt, es kann nach einer kurzen Registrierung
auf der Homepage, heruntergeladen werden. [HTK]
cd /usr/local/src
wget http://htk.eng.cam.ac.uk/ftp/software/HTK-3.4.tar.gz
wget http://htk.eng.cam.ac.uk/ftp/software/HTK-samples-3.4.tar.gz
tar -zxf HTK-3.4.tar.gz
Prompt
tar -zxf HTK-samples-3.4.tar.gz
cd htk && ./configure && make && make install
7.5.2 Installation von Julius
Die Spracherkennungs-Engine Julius zu installieren, nimmt ein wenig mehr Zeit
in Anspruch. Es müssen zuerst einige Abhängigkeiten aufgelöst werden. Julius
benötigt zum einwandfreien Betrieb neben dem HTK Toolkit einige Bibliotheken
und Headerfiles. Diese sind, neben den Betriebssystem gängigen: libiconv,
libsndfile und flex.
Julius muss mindestens in der Version 4.1.1 installiert werden, diese kürzlich
erschienene Version ist auf der Homepage von Julius zu finden. [Julius]
cd /usr/local/src
wget http://osdn.dl.sourceforge.jp/julius/36530/julius-4.1.1.tar.gz
Prompt
cd julius4 && ./configure && make && make install
7.5.3 Installation von Simon
Die Quellen von Simon sind frei verfügbar und können von der Projektseite auf
SourceForge herunter geladen werden. [Simon]
Da Simon sich an dem Entwicklungsstand von KDE Version 4.1 orientiert,
müssen viele Komponenten dieser grafischen Benutzeroberfläche für Linux
installiert werden. Diese unterscheiden sich je nach Betriebssystem.
56
KAPITEL 7. EINGESETZTE KOMPONENTEN
7.6. JULIUS CONTROL CENTER
Für Ubuntu und andere Debian Derivate können mit folgendem Befehl die
fehlenden Pakete nachinstalliert werden:
sudo apt-get install \
kdebase-bin kdebase-data kdebase-runtime \
kdebase-workspace kdelibs-bin kdelibs5 kdelibs5-data kdelibs5-dev \
Prompt
portaudio19-dev libportaudio2
TM
®
Wenn als Betriebssystem openSUSE von Novell eingesetzt wird, muss mindestens die Version openSUSE 11.1 installiert sein, dann sind alle Abhängigkeiten für Simon im Vorraus erfüllt.
Als Nutzer von Fedora in der Version 9 hat man die Möglichkeit, passende
Pakete für KDE 4.1 zu installieren. Falls Version 10 eingesetzt wird, kann man
diesen Schritt überspringen. [FCKDE4]
Für die Installation von Simon läd man die Sourcen von SourceForge herunter,
entpackt diese und kompiliert anschließend Simon mit folgenden Befehlen:
[Simon]
cd /usr/local/src
wget http://dl.sourceforge.net/speech2text/simon-0.2-beta-1-Source.tar.bz2
Prompt
tar -jxf simon-0.2-beta-1-Source.tar.bz2
cd simon/simonsource && ./build.sh
7.6 Julius Control Center
Nach der Installation aller benötigten Teile kann nun das Julius Control Center
installiert werden. [JCC]
cd /usr/local/src
wget http://www.julian-hochstetter.de/jcc/jcc-1.0.tar.bz2
tar -jxf jcc-1.0.tar.bz2
Prompt
cd jcc && ./build.sh
Mit diesen Befehlen wird das Archiv, in welchem das Julius Control Center
enthalten ist, heruntergeladen, entpackt und kompiliert. Auch benötigte Skripte
für die Erstellung des Sprachmodells mittels HTK sind enthalten und werden
in das Dateisystem an den entsprechenden Platz installiert. Die ausführbare
Datei, also das Programm befindet sich nach dem Kompiliervorgang im Unterverzeichnis jcc/bin und wird in den $PATH unter /usr/local/bin verlinkt, so dass
das Programm von überall aus gestartet werden kann.
57
7.6. JULIUS CONTROL CENTER
KAPITEL 7. EINGESETZTE KOMPONENTEN
58
8 Das Julius Control Center
Das Julius Control Center ist in erster Linie eine grafische Bedienoberfläche für
Julius – die Spracherkennungs-Software. Neben der Spracherkennung kann
dieses Programm auch Sprache ausgeben – synthetisieren.
Die Hauptaufgaben dieses Programms sind, dem Benutzer die Möglichkeit zu
geben, auf einfache Art und Weise vorhandene Wörter und Sprachaufnahmen
zu verwalten und Wörter und Sprachaufnahmen zur „Datenbank“ hinzuzufügen.
Die gesammelten Informationen, Sprachaufnahmen, Wörter und Grammatiken
werden dann mit Hilfe von Simon zu einem Sprachmodell umgewandelt. Das
so entstandene Modell benutzt Julius dann für die Spracherkennung.
Für die Sprachausgabe wird mit Hilfe der eSpeak Bibliothek beliebiger Text
in Sprache gewandelt. Über das Julius Control Center ist es möglich, viele
Parameter der auszugebenden Sprache einzustellen.
Damit das Programm auch mit anderen Programmen kommunizieren kann,
gibt es die Möglichkeit, sogar über das Netzwerk das Julius Control Center zu
steuern.
Auf den folgenden Seiten werden die Klassen, das Programm und seine Architektur dargestellt.
In der sehr ausführlichen DoxyGen Dokumentation sind viele weitere nützliche Informationen zu finden, dort sind alle Klassen, Methoden und Member
beschrieben.
Für die Weiterentwicklung der Software, die im Rahmen dieser Arbeit entstanden ist, kann diese Dokumentation neben dieser Arbeit eine weitere Anlaufstelle
sein. Zu finden ist diese Dokumentation im Verzeichnis doc/ des Hauptverzeichnisses dieses Programms oder auf der Internetseite dieses Projektes. [JCC]
59
8.1. DIE GUI - MAINWINDOW
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.1 Die GUI - MainWindow
Der Mainthread, also das Hauptprogramm, ist eine Instanz von MainWindow.
Das ist auch der einzige Thread, der auf der GUI (Graphical User Interface)
zeichnen darf. Aus diesem Grund müssen alle Interaktionen mit dem Benutzer
in dieser Klasse bzw in diesem Thread stattfinden.
In dieser Klasse werden auch alle benötigten Objekte erstellt. Dazu gehören nicht nur GUI Elemente, wie z.B. das TrayIcon sondern auch alle anderen Objekte, die benötigt werden. Beispiele hierfür sind, der Textsynthesizer
(Speaker ) oder der JuliusServer, welcher Clientverbindungen entgegen nimmt.
Das TrayIcon wird bei Programmstart erstellt und
sorgt dafür, dass das Programm in die Systray
minimiert werden kann. Immer wenn man versucht das Programm über das
X zu schließen, wird es in die Systray minimiert und kann über einen Klick
auf das Symbol wieder in den Vordergrund geholt werden. Wenn das Programm entgültig geschlossen werden soll, muss man über das Menü den
Punkt Datei→Beenden anwählen. In MainWindow werden die erzeugten Instanzen nun mit einem so genannten Signal/Slot Konzept verbunden. Dies
realisiert einen ereignisgesteuerten Programmabfluss zwischen Objekten. Das
ursprüngliche Konzept kann man als spezielle Form des Observer Design Pattern betrachten.
Der Signal/Slot Mechanismus in Qt lässt sich mit den häufig eingesetzten Callback Funktionen vergleichen. Es gibt einen Sender und ein oder auch mehrere
Empfänger von Nachrichten, möglich ist jedoch auch, dass es einen Empfänger
gibt, der durch mehrere Sender benachrichtigt wird. Oft werden diese Signale
und Slots eingesetzt, um GUI Elemente miteiner zu verbinden, z.B. wenn ein
Button gedrückt wird, sodass eine bestimmte Funktion ausgeführt wird.
Die meisten Einstellungen und Aktionen werden in der Klasse MainWindow
behandelt. Ausgenommen davon ist die Trainings-Ansicht. Diese Klasse kann
man als Erweiterung der MainWindow Klasse sehen, auch wenn sie nicht direkt
von dieser abgeleitet ist. Da in dem Teild er Trainings-Ansicht sehr viel Logik
gefordert ist, ist diese in einem separaten Teil, dem TrainingView ausgelagert.
60
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.2. DIE VERWALTUNG
8.2 Die Verwaltung
Die Verwaltung des Sprachmodells geschieht in 3 Tabs. Jeder Tab repräsentiert
eine der drei Komponenten des Sprachmodells. Diese sind in den folgenden
Abschnitten erläutert.
8.2.1 TrainingView
Die Klasse TrainingView ist so gesehen eine Ergänzung zu MainWindow. Alle
Interaktionen mit dem Benutzer in der Ansicht des Trainings- Tabs werden in
dieser Klasse behandelt.
Im Konstruktor der Klasse werden alle benötigten Instanzen erzeugt, wobei alle
Operationen auf Dateien über ein globales Semaphor, bzw Mutex abgesichert
sind.
GUIReimplementations
Hier wurden GUI Elemente neu definiert. Es war notwendig, eigene Operationen
wie z.B. Drag & Drop Aktionen auslösen zu können. So ist es nun möglich,
Elemente aus einer Tabelle in eine einzelne Textzeile zu ziehen oder durch
einen Doppelklick diese zu der Textzeile hinzuzufügen. Die erweiterten GUI
Elemente kommen in der Ansicht der Grammatik und im AddWordWizard zum
Einsatz, hier können aus einer Liste Elemente – bzw hier Worte – per Drag &
Drop oder per Doppelklick zu einem Satz zusammengesetzt werden.
Abbildung 8.2: Reimplementierung von QTreeWidget und QLineEdit
61
8.2. DIE VERWALTUNG
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.2.2 WordManager
Die Klasse WordManager ist dafür zuständig, die
vom Benutzer gewählten Wörter zu verwalten. Die
Singleton-Instanz von WordManager hält zur Laufzeit alle Wörter mit ihren dazugehörigen Lautschrift und Kategorie in einer Liste bereit. Diese
einzelnen Komponenten sind mit einem Tabulator getrennt und können so über Stringfunktionen
wie split zerlegt werden. Dieses Format wurde
gewählt, da mit dem gleichen Format auch die
Dateien gespeichert werden. Der WordManager
speichert seine Daten in user.words (alle vom Benutzer gewählten Wörter) und user.lexicon (das Abbildung 8.3:
importierte Bomp-Wörterbuch). Für die Erstellung
Die Klasse WordManager
des Sprachmodells hält der WordManager die Dateien model.lexicon und model.voca bereit. Der WordManager hat zudem die Funktion das Wörterbuch
dem Benutzer anzubieten. Dies hat den Vorteil, dass der Benutzer nur dem
Wörterbuch unbekannte Wörter selbst in die X-SAMPA Lautschrift übersetzen
muss. Das zu importierende Wörterbuch (BOMP) enthält bereits über 140 000
deutsche Wörter. Falls nun aber z.B. ein englisches Wörterbuch eingebunden
werden soll, geschieht dies am besten indem man die Klasse WordManager
erweitert.
Codeauszug 8.1: Beispiel von WordManager
1
2
3
4
5
6
// Erzeugen bzw holen der Instanz von WordManager
WordManager * wm = WordManager :: theInstance () ;
// Holen des Pointers der benutzerdefinierten Woerter
QStringList * words = wm - > getWords () ;
// Holen des Pointers des Lexikons
QStringList * lexicon = wm - > getLexicon () ;
7
8
9
// Neues Wort : Apfel
QString word = new QString ( " Apfel \ t ␣ apf@l \ t ␣ NOM " ) ;
10
11
12
13
14
15
16
17
18
19
20
21
22
if ( wm - > addWord ( word ) ) {
// Hinzufuegen des Wortes Apfel war erfolgreich
// Das Wort ist nicht schon vorhanden .
}
wm - > saveWords () ;
// ermitteln der Position des Wortes Apfel in der Liste
int pos = words - > indexOf ( word ) ;
if ( pos != -1 && wm - > removeWord ( words - > at ( pos ) ) ) {
// Entfernen des Wortes Apfel war erfolgreich
}
// Loeschen der Instanz wm
wm - > destroyTheInstance () ;
62
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.2. DIE VERWALTUNG
8.2.3 GrammarManager
Die Klasse GrammarManager ist dafür zuständig, die vom Benutzer gewählten Grammatiken zu
verwalten. Auch hier kommt wieder die SingletonDesignwahl zum Einsatz um mögliche Doppelinstanzierungen dieser Klasse zu vermeiden. Der
GrammarManager verwaltet alle vom Benutzer
gewählten Sätze zur Laufzeit in einem speziellen
Container und speichert diese Daten in die Datei user.grammar sowie für die Modellerstellung
in die Datei model.grammar. Der Benutzer kann
hier selbst Satzstrukturen erstellen und muss kei-
Abbildung 8.4: Die
GrammarManager
Klasse
ne Kenntnis des Terminals des Wortes haben, er kann aus einer Liste aller
bekannten Wörter wählen und sich so den gewünschten Satz konstruieren. Die
Umsetzung und Konvertierung in das Format für HTK bzw Simon übernimmt
der GrammarManager.
Durch die Verwendung einer speziellen Liste (QMap<QString, QString>) gibt es
die Möglichkeit Wertepaare unterschiedlichen Typs zu speichern. Die Besonderheit ist, dass alle Worte einer Kategorie zu finden sind, weitaus interessanter
ist es aber, ein und das selbe Wort in verschiedenen Kategorien zu speichern.
Dies hat den Vorteil, dass nicht mittels einer Stringvergleichsfunktion gearbeitet
werden muss, sondern dass die gewünschten Werte direkt aus dieser Liste
geholt werden können. Dies ist besonders bei sehr großen Listen platzsparend
und zudem sehr schnell.
Codeauszug 8.2: Beispiel von GrammarManager
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
// Erzeugen bzw holen der Instanz von GrammarManager
GrammarManager * gm = GrammarManager :: theInstance () ;
// Holen des Pointers auf die Saetze
QStringList * sentences = gm - > getSentences () ;
// Holen der QMap mit der Grammatik
QMap < QString , QString > * grammar = gm - > getGrammar () ;
// Hole alle Nomen , die GrammarManager kennt .
QStringList nomen = grammar - > values ( " NOM " ) ;
// Hole alle Kategorien bzw Terminale , die
GrammarManager zu " Ein " kennt : NOM : NUM : QAN
QStringList cats = grammar - > keys ( " Ein " ) ;
if ( gm - > addGrammarSentence ( " Nehme ␣ ein ␣ Apfel " , " VRB ␣ NUM ␣
NOM " ) ) { // Hinzufuegen der Gram . VRB NUM NOM war
erfolgreich Der Satz war noch nicht aufgenommen
}
int pos = sentences - > indexOf ( " Nehme ␣ ein ␣ Apfel \ tVRB ␣ NUM ␣
NOM " ) ;
if ( gm - > deleteGrammar ( pos ) { // Entfernen des Satzes war
erfolgreich
}
63
8.2. DIE VERWALTUNG
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.2.4 SampleManager
Die Klasse SampleManager ist dafür zuständig,
die Sprachaufnahmen zu verwalten. Immer wenn
ein neues Wort zum Sprachmodell hinzugefügt
wurde, wird die Sprachaufnahme und die darin enthalten Wörter an den SampleManager
übergeben (insertSample(QString path, QString
words)). Die eigentliche Aufgabe des SampleManagers ist, für das Sprachmodell die Datei
prompts bereit zu halten und die Möglichkeit
anzubieten vorhandene Sprachaufnahmen zu
löschen.
Abbildung 8.5:
Die Klasse SampleManager
Codeauszug 8.3: Beispiel von SampleManager
1
2
3
4
5
6
7
8
// Erzeugen bzw holen der Instanz von SampleManager
SampleManager * sm = SampleManager :: theInstance () ;
// Holen des Pointers auf die Sprachaufnahmen . In
dieser Liste sind die vollstaendigen Pfade zu den
Wave Aufnahmen gespeichert .
QStringList * wavs = sm - > getSamples () ;
// Die Aufnahme / tmp / wavRec1 . wav , die die Woerter
" Nehme Ein Apfel " enthaelt in die Verwaltung
aufnehmen
sm - > insertSample ( " / tmp / wavRec1 . wav " ," Nehme ␣ Ein ␣ Apfel " ) ;
// Instanz loeschen und Speicher freigeben
sm - > destroyTheInstance () ;
64
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.2. DIE VERWALTUNG
8.2.5 ModelManager
Die Klasse ModelManager ist dafür zuständig, mit
Hilfe von Simon und dessen ModelCompilationManager das Sprachmodell zu generieren. Der
ModelManager übergibt alle benötigten Daten und
Dateien an den ModelCompilationManager und
empfängt Statusmeldungen von diesem. Diese
gibt er auf der Konsole als Statusmeldung aus,
Fehler werden mit einer genauen Fehlerbeschreibung in einem Dialog dem Benutzer angezeigt.
Ansonsten wird das Sprachmodell erstellt gespeichert und kann von nun an mit Julius zur Spra- Abbildung 8.6:
Die Klasse ModelManager
cherkennung eingesetzt werden.
Abbildung 8.7: Detailierter Fehler bei Erstellung des Sprachmodells.
Hier: no proto for birn@ was bedeutet, dass keine Sprachaufnahme für
das Wort „Birne“gefunden wurde.
65
8.3. ADDWORDWIZARD
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.3 AddWordWizard
Wizards oder Assistenten sind Dialoge, die den Benutzer durch eine bestimmte
Reihe von Benutzereingaben führen. Der Teil des Programms stellt dem Benutzer mehrere Wizards zur Verfügung, die an unterschiedlichen Stellen aufgerufen
werden können. Dieser Wizard ist so aufgebaut, dass er unterschiedliche Seiten in beliebiger Reihenfolge anzeigen kann und darüber hinaus Informationen
über Seiten hinweg austauschen kann. So kann man z.B. das hinzuzufügende
Wort auf der zweiten Seite eingeben und muss es nicht in einer extra Variable
speichern, wenn man es auf der nächsten Seite des Wizards benötigt, sondern
kann ganz einfach das GUI Feld in dem das Wort steht abfragen.
In diesem Projekt wird ein Wizard für das Hinzufügen von neuen Wörtern und
das Trainieren der schon vorhandenen Wörter durch neue Sprachaufnahmen
eingesetzt. Je nachdem welche Aufgabe der Wizard erledigen soll, ist die
Reihenfolge der Seiten anders. Wenn ein schon vorhandenes Wort durch
Sprachaufnahmen ergänzt werden soll, muss ein Dialog erscheinen, wo das,
oder die aufzunehmenden Wörter spezifiert werden und nicht ein Dialog, wo
das Wort erneut hinzugefügt wird, so wie es der Fall ist wenn der Dialog über
den Standardkonstruktor aufgerufen wird.
In diesem Dialog findet das gleiche grafische Element, hier eine Baumstruktur
mit Wörtern sortiert nach ihrer Kategorie Anwendung, wie auch in der Ansicht
der Grammatik zur Erstellung von Sätzen. Dieses GUI Element wurde schon im
Abschnitt 8.2.1 GUIReimplementations erläutert. Durch die Wiederverwendung
solcher GUI Elemente an unterschiedlichen Stellen im Programm kann sich der
Benutzer leichter zurecht finden.
66
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.4. DER SERVER - JULIUSSERVER
8.4 Der Server - JuliusServer
8.4.1 Der Clientsocket
Das Julius Control Center besitzt eine Socket-Schnittstelle, um mit fremden
Programmen kommunizieren zu können. So kann man z.B. aus einem anderen
Programm heraus das Julius Control Center dazu veranlassen, einen Text zu
synthetisieren, oder z.B. die erkannten Worte in einem anderen Programm
zu empfangen, dort auszuwerten und darauf zu reagieren. Die Klasse JuliusServer ist hierfür zuständig. JuliusServer ist von QTcpServer abgeleitet und
reimplementiert somit einen einfachen TCP Server. Der Port, an dem die Clients
connecten können, kann in der grafischen Bedienoberfläche, oder in der Datei
/.config/JuliusControlCenter/julian.ini eingestellt werden.
In der bisherigen Serverstruktur kann nur ein Client zum Server verbinden, um
dies zu erweitern, müsste man einen multithreaded Server implementieren, der
bei jedem neuen Verbindungsversuch einen Thread startet und in diesem den
Client bedient.
Der JuliusServer ist sehr modular aufgebaut, sodass leicht neue Kommandos
hinzugefügt werden können, dies ist im Abschnitt JuliusProtocol erklärt.
Für das einfachere Handling habe ich ein Protokoll für die Kommunikation
zwischen JuliusServer und dem Client implementiert, das 8.4.2 JuliusProtocol.
Eine Clientanfrage könnte folgendermaßen aussehen:
Codeauszug 8.4: Anfrage von Client an JuliusServer
1
2
3
4
5
6
7
8
9
output = JuliusProtocol :: IsSpeakerEnabled ;
write ( socket , output , sizeof ( ouput ) ;
read ( socket , input , sizeof ( input ) ) ;
if (! strncmp ( input , JuliusProtocol :: Okay , 3) ) {
output = JuliusProtocol :: StartStopSpeaker ;
write ( socket , output , sizeof ( ouput ) ;
}
output = JuliusProtocol :: SynthText + " ␣ Ich ␣ kann ␣ sprechen " ;
write ( socket , output , sizeof ( ouput ) ;
In dieser Anfrage stellt der Client, fest ob die Sprachausgabe aktiviert ist,
falls nicht, wird sie aktiviert und dann der Satz „Ich kann sprechen“an den
JuliusServer geschickt, der den Satz dann synthetisiert und über die Soundkarte
ausgibt.
67
8.4. DER SERVER - JULIUSSERVER
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.4.2 Das JuliusProtocol
Das Protokoll ist so aufgebaut, dass eine Integerzahl voransteht, dann ein Whitespace kommt und dann ein benutzerdefinierter, zum Kommando passender
Text. Bis jetzt sind folgende Kommandos möglich.
Zahl
100
101
102
103
104
105
200
201
255
Kommando
Parameter Beschreibung
Kommunikations-Richtung Client =⇒ Server
StartStopSpeaker
Startet bzw stopt die Sprachausgabe
StartStopRecognizer Startet bzw stopt die Spracherkennung
IsSpeakerEnabled
Fragt, ob die Sprachausgabe
aktiviert ist. Antwort ist 200 True
oder 255 False
IsRecognizerEnabled Fragt, ob die Spracherkennung
aktiviert ist. Antwort ist 200 True
oder 255 False
SynthText
Text
Der Text wird am Server synthetisiert
Kommunikations-Richtung Server =⇒ Client
RecognizedWords
Words
Meldet dem Client die erkannten Wörter
Kommunikations-Richtung Server ⇐⇒ Client
True
Statusmeldung für z.B. Die
Sprachausgabe ist aktiv
False
Statusmeldung für z.B. Die
Spracherkennung ist nicht aktiv
Error
Es ist ein Fehler aufgetreten
Tabelle 8.1: JuliusProtocol
Durch das JuliusProtocol ist es in Zukunft sehr einfach, weitere Befehle zu
implementieren. Dies geschieht, indem man ein neues Kommando in der Datei protocol.h definiert und dieses dann in die switch-Umgebung in der Datei
JuliusServer einbaut. Für das Kommando Neueskommando könnte es folgendermaßen aussehen:
Codeauszug 8.5: Kommandoimplementierung
1
2
3
4
5
case JuliusProtocol :: Neueskommando : {
// do something ...
write ( socket , output , sizeof ( output ) ) ;
break ;
}
68
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.5. DER SPRACHERKENNER - JULIUSCONTROL
8.5 Der Spracherkenner - JuliusControl
Die Klasse JuliusControl ist für das Handling des
externen Programms Julius zuständig. Diese Klasse erzeugt einen neuen Prozess mit dem Programmnamen des Spracherkenners aus dem Softwarepacket von Julius. Als Parameter werden einige feste, sich nicht ändernde Einstellungen und
Pfadangaben für das Sprachmodell übergeben.
Wenn man die Spracherkennung aktiviert, wird
über die Methode JuliusControl::startJulius() der
Prozess gestartet. Immer wenn der Prozess
auf stdout schreibt, wird dieser Output in Abbildung 8.8:
JuliusControl::processOutput() gelesen und aus- Die Klasse JuliusControl
gewertet.
Werden in dieser Ausgabe erkannte Wörter und die Wahrscheinlichkeit für die
Richtigkeit dieser erkannten Wörter erkannt, so werden diese mit einem Signal
an das Hauptprogramm übermittelt.
69
8.6. DER SYNTHESIZER - SPEAKER
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.6 Der Synthesizer - Speaker
Der Text, welcher in Sprachausgabe umgewandelt, also synthetisiert werden soll, wird
in der Klasse Speaker mit Hilfe von der eSpeak Bibliothek synthetisiert.
Aus Sicherheitsgründen ist nur eine Instanz
möglich. Dies geschieht mit dem so genannten Singleton Design Pattern. Es wird dabei
sichergestellt, dass der Konstruktor nur einmal aufgerufen wird.
In dem Konstruktor der Klasse Speaker
wird eine so genannte callback Funktion registriert, indem ein Zeiger auf diese Funktion an die eSpeak Bibliothek
übergeben wird. Solche callback Funktionen können asynchron aufgerufen werden,
d.h dass dies unvorhergesehen geschehen
kann. Diese asynchrone callback Funktion
(int Speaker::callback_synth) kann von der
eSpeak Bibliothek immer dann aufgerufen Abbildung 8.9:
Die Klasse Speaker
werden, wenn neue Audiodaten zum Abholen bereit sind. Die Daten werden
dann in einen internen Puffer (wavBuffer ) zwischengespeichert.
Die synthetisierten Audiodaten liegen im Rohdaten-Format vor und müssen
daher noch in ein gültiges Format eingepackt werden. Am einfachsten geschieht
das, indem man diese Rohdaten in einen RIFF-Wave Container packt. Wenn
eSpeak mit dem Synthetisieren fertig ist, werden alle Daten aus dem Puffer in
der Funktion Speaker::finalizeWave in den RIFF-Wave Container gepackt und
nun als gültiges Wave (wavData) an die Soundausgabe gesendet.
Die Methode Speaker::synthesize wird genutzt, um einen Text mittels eSpeak
zu synthetisieren und anschließend an die Soundausgabe zum Abspielen zu
senden.
Codeauszug 8.6: Beispiel von Speaker
1
2
3
4
5
6
// Erzeugen bzw holen der Instanz von Speaker
Spreaker * speak = Speaker :: theInstance () ;
// Den Satz " Das ist ein Test " sprechen
speak - > synthesize ( " Das ␣ ist ␣ ein ␣ Test " ) ;
// Das Objekt wieder loeschen
speak - > destroyTheInstance () ;
70
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.7. DIE SOUNDAUSGABE - SOUNDOUTPUT
8.7 Die Soundausgabe - SoundOutput
Die SoundOutput Klasse ist für die Ausgabe von Audiodaten zuständig. Mit Hilfe von
ALSA (Advanced Linux Sound Architecture)
wird es ermöglicht, Audiodaten an die Soundkarte zu senden.
Damit andere Aufgaben nicht blockiert werden, während Audiodaten abgespielt werden,
läuft die Ausgabe in einem eigenen Thread
(SoundOutput::run). Immer wenn Daten im
Puffer vorhanden sind, wird der Thread gestartet, der dann die Daten abarbeitet, indem
er alle Daten nacheinander an ALSA übergibt.
Der interne Puffer ist ein Array aus Puffern
(QList<QByteArray> buffers), denn es kann
sein, dass, während noch Audiodaten abgespielt werden, schon die nächsten Daten zur
wiedergabe bereit sind. Diese werden dann
in das Array eingereiht. So können beliebig
viele Daten eingereiht und nacheinander abgespielt werden.
An eine Instanz von SoundOutput können
Abbildung 8.10:
Die Klasse SoundOutput
nicht nur Wave-Daten übergeben werden,
es kann durch die Überladung der Funktion SoundOutput::play auch ein Dateiname angegegeben werden.
Im Beispiel des Codeauszugs 8.3 wird eine Instanz von SoundOutput mit 16kHz
und Mono initialisiert und dann werden sowohl Daten als auch ein Dateiname an
diese übergeben, wobei Daten und Datei jedoch Daten mit einer Samplerate von
16kHz mit einem Kanal(Mono) enthalten müssen. Beide werden nacheinander
abgespielt.
Codeauszug 8.7: Verwendung von Soundoutput
1
2
3
4
5
SoundOutput * output = new SoundOutput ( " default "
,16000 ,1) ;
output - > setEnabled ( true ) ;
output - > play ( data , data - > length () ) ;
output - > play ( " / tmp / test . wav " ) ;
delete ( output ) ;
71
8.8. WAVRECORDER
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.8 WavRecorder
WavRecorder wird eingesetzt, um über die Soundkarte Audio-Daten aufzunehmen. Die aufgenommenen Daten werden erst in einem internen Puffer
bereit gehalten und auf Wunsch in eine Datei inklusive Header gespeichert. Die Aufnahme findet
in einem eigenen Thread statt und beginnt sobald
dieser gestartet wird. Der WavRecorder speichert
die Daten in einem Format, wie es für die Modellerstellung benötigt wird, in einer Samplerate von
16kHz und einer Auflösung von 16Bit.
Da die Aufnahme in einem Puffer gehalten wird,
kann dieser bei Nichtgefallen auch vorzeitig gelöscht werden und die Aufnahme kann erneut von
vorne beginnen. Dies Möglichkeit wurde geschaffen, da die Sprachaufnahmen von guter Qualität
Abbildung 8.11:
Die Klasse WavRecorder
sein sollen.
Im unteren Beispiel ist die Verwendung dieser Klasse veranschaulicht.
Codeauszug 8.8: Verwendung von WavRecorder
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
// Erzeugen des Recorders
WavRecorder * rec = new WavRecorder ( " / tmp / test . wav " ) ;
// Starten des Threads , der die Audiodaten aufnimmt
rec - > start () ;
// 1 Sekunde schlafen um 1 Sekunde aufzunehmen
sleep (1) ;
// Die Aufnahme stoppen
rec - > stopRecording () ;
// Nun kann die Aufnahme ueberprueft werden indem z . B
// mit dem SoundOutput die Aufnahme angehoert wird
// QBuffer * buf = rec - > getBuffer () ;
// sound - > play ( buf , buf - > length () ) ;
// Speichern der Aufnahme in Datei
rec - > saveFile () ;
// Oder loeschen des Puffers fuer eine weitere Aufnahme
rec - > deleteFile () ;
// Loeschen von WavRecorder
delete ( rec ) ;
72
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.9. DIE MIKROFONREGELUNG - MICCONTROL
8.9 Die Mikrofonregelung - MicControl
MicControl ermittelt mit Hilfe von ALSA die aktuelle Mikrofonlautstärke und übermittelt diese an den
Hauptthread, das Objekt MainWindow. MicControl
läuft in einem eigenen Thread, um die grafische
Bedienoberfläche nicht zu blockieren. Jedes mal
wenn von 32 Frames die Durchschnittslaustärke
ermittelt wurde, wird diese über das Signal micVolume(int) übermittelt. Die floatingpoint Zahl wird
zuvor so konvertiert, dass das Resultat eine Ganzzahl zwischen 0 und 100 ist.
Eine weitere Aufgabe von MicControl ist, die Lautstärke des Mikrofons einzustellen. Dazu wird ein
Mixerelement bei ALSA registriert für welches die
Lautstärke eingestellt werden kann. Mit den Methoden setVolume und getVolume kann die Lautstärke dann eingestell und abgefragt werden. Das
zu regelnde Mikrofon kann im Programm unter Abbildung 8.12:
Einstellungen gewählt werden. Das gewählte Mikrofon wird mit Hilfe von Settings dauerhaft gespeichert, so geht die Wahl bei mehreren vorhandenen
Mikrofonen nicht verloren.
73
Die Klasse MicControl
8.10. EINSTELLUNGEN DAUERHAFT SPEICHERN - SETTINGS
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.10 Einstellungen dauerhaft speichern - Settings
Die Klasse Settings speichert z.B. Einstellungen
dauerhaft auf der Festplatte. So gehen diese
beim Beenden des Programms nicht verloren
und können beim Start ganz einfach geladen
werden. Das Handling ist zudem sehr einfach.
Nach der Initialisierung können die Settings im
ganzen Programm verwendet werden, da die
eigentliche Speicherung (Settings::settings) ein
statisches Objekt vom Typ QSettings und somit
Abbildung 8.13:
Die Klasse Settings
immer verfügbar ist.
Die Einstellungen werden in der Datei ~/.config/JuliusControlCenter/julian.ini
gespeichert und bei jedem Schreibzugriff (Settings::set) synchronisiert.
Codeauszug 8.9: Verwendung von Settings
1
2
// Initialisieren der Settings
Settings :: initSettings () ;
3
4
5
// Einstellung speichern . Schluessel ist Einstellungen /
Port
Settings :: set ( " Einstellungen / Port " , 4446) ;
6
7
8
9
// Einstellung von Schluessel Einstellungen / Port laden .
// Hier int port = 4446
int port = Settings :: getValue ( " Einstellungen / Port " ) ;
8.11 Weitere Dokumentation
Die hier dargestellte Dokumentation der Klassen ist eine
kleine Einführung darin, z.B. welche Aufgabe die Klasse
erfüllt. Dem Projekt liegt eine DoxyGen Dokumentation
bei, die alle Elemente und die Klassen selbst beschreiben.
74
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.12. DIE BENUTZUNG DES PROGRAMMS
8.12 Die Benutzung des Programms
In diesem Abschnitt werden alle Funktionen des Programms dargestellt.
8.12.1 Allgemeines
Abbildung 8.15: Ansicht des Programms nach dem Start
Menü Einfaches Menü zum Beenden des Programms und zur Ansicht von Hilfe
und Programmversion.
Reiter Spracherkennung In dieser Ansicht ist der Spracherkenner zu beobachten. Es werden Statusmeldungen und erkannte Wörter angezeigt.
Reiter Training In dieser Ansicht kann das Sprachmodell trainiert und erweitert
werden.
Reiter Sprachausgabe In dieser Ansicht werden Einstellungen und Tests zur
Sprachausgabe eingestellt.
Reiter Einstellungen In dieser Ansicht können allgemeine Einstellungen vorgenommen werden.
75
8.12. DIE BENUTZUNG DES PROGRAMMS
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.12.2 Spracherkennung
Abbildung 8.16: Ansicht der Spracherkennung
Spracherkenner aktivieren Mit diesem Button kann der Spracherkenner aktiviert werden. Erst wenn dies geschehen ist, können auch Wörter über
das Mikrofon erkannt werden.
Sprachausgabe aktivieren Mit diesem Button wird die Sprachausgabe aktiviert.
Statusmeldungen und erkannte Wörter In diesem Textfeld werden erkannte
Wörter mit der Erkennungsrate bzw Erkennungswahrscheinlichkeit, sowie
Statusmeldungen angezeigt.
Aktuelle Mikrofonlautstärke Anhand dieses Fortschrittbalken, kann die Mikrofonlautstärke erkannt und gegebenfalls angepasst werden.
Einstellen der Mikrofonlautstärke Mit diesem Schieberegler lässt sich die
Mikrofonlautstärke einstellen.
Lautstärke in % Die eingestelle Mikrofonlautstärke wird hier angezeigt.
76
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.12. DIE BENUTZUNG DES PROGRAMMS
8.12.3 Training - Sprachmodell
Abbildung 8.17: Ansicht von Training - Sprachmodell
Tabelle mit Wort, X-SAMPA und Kategorie In dieser Tabelle werden alle
Wörter aufgelistet, die erkannt werden sollen. In der Spalte Wort erscheinen die Einzelwörter in Buchstaben. In der Spalte Lautschrift ist das
Wort in der X-SAMPA Notation, und die Spalte Kategorie sagt aus, um
was für eine Wortart es sich handelt.
Wort hinzufügen Mit diesem Button wird ein Dialog zum Hinzufügen von Wörtern geöffnet. Training - Wort hinzufügen.
Wort löschen Über diesen Button wird das aktuell in der Liste ausgewählte
Wort ohne Nachfrage gelöscht.
Wörter speichern Nach Ändern der Liste, durch Hinzufügen oder Löschen
von Wörtern muss die Liste manuell gespeichert werden.
Erkennungsdatenbank neu generieren Hier wird der Vorgang, die Erkennungsdatenbank zu generieren, ausgelöst. Dies sollte immer durchgeführt
werden, wenn neue Wörter oder Aufnahmen hinzufügt wurden.
77
8.12. DIE BENUTZUNG DES PROGRAMMS
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.12.4 Training - Akustikmodell
Abbildung 8.18: Ansicht von Training - Akustikmodell
Tabelle mit Wave Datei und Wörter In dieser Tabelle sind alle Sprachaufnahmen gelistet. Die erste Spalte gibt den Speicherpfad der Aufnahme an,
und die zweite Spalte ist eine Liste von Wörtern, die in der Aufnahmen
vorkommen.
Wort trainieren Mit Drücken dieses Knopfes wird ein Dialog geöffnet, um
schon vorhandene Wörter zu trainieren, damit die Erkennungsgenauigkeit
gesteigert wird. Training - Wort trainieren.
Aufnahmen löschen Mit Drücken dieses Knopfes kann die aktuell ausgewählte Sprachaufnahme gelöscht werden.
Liste Speichern Nach Ändern der Liste, durch Löschen oder Hinzufügen von
Wörtern muss die Liste manuell gespeichert werden.
Erkennungsdatenbank neu generieren Hier wird der Vorgang, die Erkennungsdatenbank zu generieren, ausgelöst. Dies sollte immer durchgeführt
werden, wenn neue Wörter oder Aufnahmen hinzufügt wurden.
78
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.12. DIE BENUTZUNG DES PROGRAMMS
8.12.5 Training - Grammatik
Abbildung 8.19: Ansicht von Trainging - Grammatik
In dieser Ansicht können Sätze gebildet und gespeichert werden.
Die gespeicherten Sätze kann das Spracherkennungprogramm erkennen.
Durch Doppelklicken oder per Drag&Drop können Wörter aneinander gereiht
und so Sätze gebildet werden.
Filterzeile In diesem Textfeld kann ein Filter zur Suche in der Liste mit vohandenen Wörtern gesetzt werden.
Liste mit vorhandenen Wörtern In dieser Liste sind alle vorhandenen Wörter
aufgelistet. Jedes Wort ist in seiner Kategorie zu finden, unter Alles sind
alle Wörter nochmals gelistet.
Zeile für Wörter In diese Zeile werden per Doppelklick oder mit Drag&Drop
Wörter aus der Liste der vorhandenen Wörter in dieser Zeile aneinander
79
8.12. DIE BENUTZUNG DES PROGRAMMS
KAPITEL 8. DAS JULIUS CONTROL CENTER
gereiht und ein Satz gebildet.
Satz übernehmen Mit diesem Button kann der gebildete Satz in die Liste von
gespeicherten Sätzen übernommen werden.
Zurücksetzen Durch Drücken dieses Buttons wird das Textfeld zum Bilden von
Sätzen gelöscht.
Liste mit Sätzen In dieser Liste sind alle zu erkennenden Sätz aufgelistet.
Ausgewählten Satz löschen Mit diesem Button kann der aktuell in der Liste
ausgewählte Satz gelöscht werden.
Liste speichern Hiermit werden Änderungen dauerhaft gespeichert.
Erkennungsdatenbank neu generieren Hier wird der Vorgang, die Erkennungsdatenbank zu generieren, ausgelöst. Dies sollte immer durchgeführt
werden, wenn neue Wörter oder neue Aufnahmen hinzugekommen sind.
80
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.12. DIE BENUTZUNG DES PROGRAMMS
8.12.6 Training - Wort hinzufügen
Training - Wort hinzufügen Teil I
Abbildung 8.20: Dialog, der angezeigt wird, wenn ein Wort hinzugefügt
wird.
Wenn ein Wort zur Datenbank hinzuzufügen ist, sodass es in Zukunft durch
das Programm erkannt werden soll, muss man in der Ansicht Training - Sprachmodell auf den Button Wort hinzufügen klicken.
Wenn ein schon vorhandenes Wort trainiert werden soll, um die Erkennungsgenauigkeit zu steigern, wählt man unter Training - Akustikmodell den Button
Wort trainieren.
81
8.12. DIE BENUTZUNG DES PROGRAMMS
KAPITEL 8. DAS JULIUS CONTROL CENTER
Training - Wort hinzufügen Teil II
Abbildung 8.21: Dialog, der angezeigt wird, wenn ein Wort ausgewählt
werden soll.
In diesem Dialog müssen kann ein Wort ausgewählt werden, welches zum
Sprachmodell hinzuzufügen ist. Dazu wird das Wort in das oberste Textfeld
eingegeben und auf Wort suchen geklickt.
Nun erscheint eine Liste mit Vorschlägen zu dem gesuchten Wort.
Wenn das Wort ausgewählt ist, kann man auf Weiter klicken um das Wort im
folgenden Dialog zu trainieren.
Falls das gewünschte Wort nicht in der Liste vorhanden ist, kann man das
Wort selbst spezifizieren. Dazu gibt man das Wort, das Wort in der X-SAMPA
Lautschrift und die Kategorie selbst in die dafür vorgesehenen Textfelder ein
und bestätigt den Dialog mit Drücken auf Weiter.
So kann man einfach, auch fremdsprachige Wörter, zur Datenbank hinzufügen.
Meist ist die Lautschrift in der IPA Notation angebeben, deshalb muss man in
diesem Dialog auf die X-SAMPA Lautschrift achten. Wie diese unterschiedliche
Lautschriften konvertiert werden, ist auf folgender Seite zu finden. [XSP2IPA]
82
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.12. DIE BENUTZUNG DES PROGRAMMS
Training - Wort hinzufügen Teil III
Abbildung 8.22: Dialog, der Angezeigt wird, um ein vorhandene Wörter zu
trainieren.
Dieser Dialog wid nur angezeigt, wenn man schon vorhandene Wörter erneut
trainieren möchte.
Hier kann man aus der Liste mit vorhandenen Wörter per Drag&Drop oder mit
einem Doppelklick Wörter in das Textfeld hinzufügen und den so gebildeten
Satz im nächsten Dialog aufnehmen.
83
8.12. DIE BENUTZUNG DES PROGRAMMS
KAPITEL 8. DAS JULIUS CONTROL CENTER
Training - Wort hinzufügen Teil IV
Abbildung 8.23: Dialog zum Aufnehmen der zuvor gewählten Wörter.
Hier kann man die zuvor gewählten Wörter aufnehmen. Dazu muss sichergestellt sein, dass das Mikrofon gut eingestellt, d.h. der Pegel richtig ist, sodass
kein Rauschen oder eine Übersteureung mit in der Aufnahme zu hören ist. Auch
Atem- oder Hintergrundgeräusche sind zu vermeiden.
Bereit, klickt man auf Aufnehmen und nachdem die Aufnahme fertig gesprochen
ist, erneut auf den gleichen Button.
84
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.12. DIE BENUTZUNG DES PROGRAMMS
Training - Wort hinzufügen Teil V
Abbildung 8.24: Dialog zum Bestätigen der aufgenommenen Wörter.
Zur Überprüfung kann man nun die erstellte Aufnahme anhöhren. Falls die
Aufnahme wiederholen werden soll, da Fehler oder Hintergrundgeräusche zu
hören sind, löscht man die erstellte Aufnahme und hat die Möglichkeit, die
gewählten Wörter erneut aufzunehmen.
Falls man jedoch mit der Aufnahme zufrieden ist, kann dieser Dialog bestätigt
und somit die Aufnahme in die Datenbank übernommen werden.
85
8.12. DIE BENUTZUNG DES PROGRAMMS
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.12.7 Sprachausgabe
Abbildung 8.25:
In dieser Ansicht des Programms kann man alle Einstellungen für die
Sprachausgabe einstellen.
Ausgabedevice Hier steht der Name der Soundkarte, über welche der synthetisierte Text ausgegeben wird.
Ausgabesprache Hier wird die Sprache, in der der Text synthetisiert wird,
eingestellt.
Geschwindigkeit Dieser Parameter legt die Sprechgeschwindigkeit fest.
Pitch Dieser Parameter legt die mittlere Tonhöhe fest.
Pitchrange Dieser Parameter legt die Variation der Tonhöhe, also wie weit von
der Standardtonhöhe abgewichen wird fest.
Zwischenraumpause Dieser Parameter bestimmt die Pause in ms, die zwischen den Wörtern liegt.
Testsatz sagen Mit diesem Button wird der Text, welcher in der Textbox eingetragen ist, synthetisiert und ausgegeben.
Werte zurücksetzen Mit diesem Button können alle Einstellungen und auch
die Textbox für den Testsatz zurückgesetzt werden.
86
KAPITEL 8. DAS JULIUS CONTROL CENTER
8.12. DIE BENUTZUNG DES PROGRAMMS
8.12.8 Einstellungen
Abbildung 8.26:
Allgemeine Einstellungen, hier werden allgemeine Einstellungen für das
Programm bestimmt.
Speicherpfad Hier wird der ausgewählte Speicherpfad angezeigt.
Durchsuchen Mit Hilfe dieses Buttons öffnet sich ein Dialog, um den Speicherort für alle abgelegten Dateien dieses Programms festzulegen.
Aufnahme Device Falls mehrere Mikrofoneingänge vorhanden sind, kann hier
bestimmt werden, mit welchem Eingangsdevice aufgenommen wird.
Server Port Mit dieser Einstellung wird der Port festgelegt, an dem das Programm für Clients lauscht.
BOMP Lexikon Importieren Mit diesem Button öffnet sich ein Dialog, mit welchem das Bomp Lexikon importiert werden kann. In diesem Dialog wird
man dazu aufgefordert, das zuvor heruntergeladene BOMP Lexikon auszuwählen. Dieses wird dann in das Programm importiert und kann in
Zukunft dazu verwendet werden, den Benutzer beim Hinzufügen von
Wörtern zu unterstützen.
87
9 Schlussbetrachtung
Das Ziel, eine sprecherunabhägige Spracherkennung für das Robocup Labor
und die Forschungsgruppe AMSER der Hochschule Ravensburg-Weingarten zu
erstellen, wurde dadurch erreicht, dass jeder Mitarbeiter einen Beitrag für das
sprecherunabhägige Sprachmodell leisten kann, indem er eigene, individuelle
Sprachaufnahmen mit diesem Programm erstellen kann.
Es ist jedoch nicht ausgeschlossen, dass wenn das Sprachmodell nur durch
eine einzige Stimme trainiert wird, auch andere Personen erfolgreich erkannt
werden. Dies wird besonders der Fall sein, wenn die Ähnlichkeit des Stimmbildes groß ist.
Durch Versuche wurde deutlich, dass die Einzelwortekennung bessere Ergebnisse liefert als koninuierlich gesprochene Sprache. Gerade bei der Steuerung
eines Roboters ist aber die Erkennungsgenauigkeit ein wichtiger Punkt, da es
sich oft um kritische Befehle handelt, wie z.B. „Halt!“. Ein mit mehreren Sprachaufnahmen trainiertes Sprachmodell liefert bei einer Einzelworterkennung eine
Genauigkeit von fast 100%.
Die nicht so guten Werte der koninuierlich gesprochenen Sprache, also von
ganzen Sätzen ist wahrscheinlich auf die Spracherkennungs-Engine Julius
zurückzuführen, die Erkennung wird schon nach einer sehr kurzen Sprechpause abgebrochen, so dass die darauf folgenden Wörter einzeln und nicht als
zusammenhängender Satz erkannt werden. Durch eine Vielzahl der Einstellungsmöglichkeiten von Julius lässt sich dieses Verhalten vielleicht eindämmen.
Das Programm arbeitet ungefähr mit der 10x Geschwindigkeit, erfüllt somit
während der Spracherkennung und der Sprachausgabe die Bedingungen der
Echtzeit und arbeitet sehr ressourcenschonend (unter 10% CPU Auslastung).
Auch durch die Modularität, die unter anderem die objektorientierte Sprache
C++ und das von mir streng eingehaltene, generelle Programmdesign mit sich
bringt, können in Zukunft sehr schnell und effizient auch neue Techniken oder
z.B. ein fremdsprachiges Wörterbuch in das Programm integriert werden.
Wenn das Programm nicht nur in der Teaching-Box zur Unterstützung des Lernvorgangs eingesetzt wird, sondern direkt in der Software des konditionierten
Roboters Anwendung findet, kann es dazu beitragen, den Serviceroboter auch
verbal zu steuern.
88
89
KAPITEL 9. SCHLUSSBETRACHTUNG
Klassendiagram
90
KAPITEL 9. SCHLUSSBETRACHTUNG
91
92
A Literaturverzeichnis
[Brand08] Markus Brandau, „Implementation of a real-time voice encryption system“, Fachhochschule Köln, Master Thesis, 2008
[Dude08] Langenscheidt Duden - Das Universalwörterbuch, 2008
[Eule06] Stephen Euler, „Grundkurs Spracherkennung“, Vieweg+Teubner
Verlag, Wiesbaden, 2006
[HAH01] Xued01Xuedong Huang, Alex Acero and Hsiao-Wuen Hon,
„Spoken Language Processing: A Guide to Theory, Algorithm
and System Development“, Prentice Hall PTR, 2001
[Holm91] John N. Holmes, „Sprachsynthese und Spracherkennung“, Oldenbourg Verlag, München, 1991
[Hrom07] Juraj Hromkovic, „Theoretische Informatik - Formale Sprachen,
Berechenbarkeit, Komplexitätstheorie, Algorithmik, Kommunikation und Kryptographie“, Vieweg+Teubner Verlag, Wiesbaden,
2007
[KLTI+04] Tatsuya Kawahara, Akinobu Lee, Kazuya Takeda, Katsunobu
Itou and Kiyohiro Shikano, „Recent Progreess of Open-Source
LVCSR engine Julius and Japanese Model repository“, Kyoto
University, ACCMS, KyoNara Institute of Science and Technology, Nagoya University, 2004,
http://www.ar.media.kyoto-u.ac.jp/EN/bib/intl/KAWICSLP04.pdf
[PK08] Beat Pfister, Tobias Kaufmann, „Sprachverrbeitung - Grundlagen und Methoden der Sprachsynthese und Spracherkennung“,
Springer Verlag, Heidelberg, 2008
[LHR90] K.-F. Lee, H.-W. Hon, and R. Reddy, „An overview of the SPHINX
speech recognition system“, IEEE Trans. ASSP-38, 1990
93
[RJ04] L. R. Rabiner, B. H. Juang, „Automatic Speech Recognition – A
Brief History of the Technology Development“, Georgia Institute
of Technology, Atlanta, Rutgers University and the University of
California, Santa Barbara, 2004
[Schr93] Manfred Robert Schroeder, „A brief history of synthetic speech“,
in: Speech Communication 13, Seite 231–237, Elsevier, 1993
[Schu95] Ernst Günter Schukat-Talamazzini, „Automatische Spracherkennung. Grundlagen, statistische Modelle und effiziente Algorithmen“, Vieweg+Teubner Verlag, Wiesbaden, 1995
[Spaa04] Mike A. Spaans, „On developing acoustic models using HTK“,
Master of Science thesis, Delft University of Technology, 2004
[Suse99] Axel Susen, „Spracherkennung. Kosten, Nutzen, Einsatzmöglichkeiten“, VDE Verlag, Berlin, 1999
[Vary98] Peter Vary, Ulrich Heute, Wolfgang Hess, „Digitale Sprachsignalverarbeitung“, Vieweg+Teubner Verlag, Wiesbaden, 1998
[Wahl00] Wolfgang Wahlster, „Verbmobil: Foundations of Speech-toSpeech Translation“, Springer Verlag, Berlin, 2000
[WLK+04] Willie Walker, Paul Lamere, Philip Kwok, Bhiksha Raj, Rita
Singh, Evandro Gouvea, Peter Wolf, Joe Woelfel, „Sphinx-4:
A Flexible Open Source Framework for Speech Recognition“,
SUN Microsystems Inc., 2004,
http://research.sun.com/techrep/2004/smli_tr-2004139.pdf
[YEG+06] Steve Young, Gunnar Evermann, Mark Gales und andere, „The
HTK Book (for HTK Version 3.4)“, Cambridge University, Engineering Department, 2006
[Youn94] Steve Young, „The HTK Hidden Markov Model Toolkit: Design
and Philosophy“,Cambridge University, Engineering Department,
September, 1994
[Zink97] Prof. Dr. Joachim Zinke, „Verfahren zur Sprechererkennung“,
FH Gießen-Friedberg, 1997,
http://www.fh-friedberg.de/fachbereiche/e2/telekomlabor/zinke/digiaudi/diss/node1.htm
94
Internet Quellen
[BOMP] Bomp Wörterbuch,
http://www.ifk.uni-bonn.de/forschung/abteilungsprache-und-kommunikation/phonetik/sprachsynthese/
bomp/
[Burk05] Felix Burkhardt, „Deutsche Sprachsynthese“,
http://ttssamples.syntheticspeech.de/deutsch
[FIGGEUDO] Udo L. Figge, Vorlesung „Grundlagen der romanischen
Sprachwissenschaft“
http://homepage.ruhr-uni-bochum.de/Udo.L.Figge/texte/
phonem.html
[FCKDE4] KDE Packaging Project for Fedora
http://kde-redhat.sourceforge.net/
[HTK] HTK Homepage
http://htk.eng.cam.ac.uk/
[IBMHistory] Historie der Spracherkennungs-Forschung bei IBM,
http://www.research.ibm.com/hlt/html/body_history.
html
[JCC] JCC – Julius Control Center
http://www.julian-hochstetter.de/jcc/index.html
[Julius] Julius Homepage
http://julius.sourceforge.jp/en_index.php
[Simon] Simon Projektseite auf SourceForge.net
http://sourceforge.net/project/speech2text
[SimonL] Simon Listens Homepage
http://www.simon-listens.org
[Verb00] Verbmobil Homepage,
http://verbmobil.dfki.de/
[VoxFor] VoxForge Homepage
http://www.voxforge.org
95
[VoxFo+] Ken MacLean, „Create Speaker Dependent Acoustic Model“,
http://voxforge.org/home/dev/acousticmodels/linux/
create
[Wiki] Wikipedia Deutschland
http://de.wikipedia.org
[XSP2IPA] X-SAMPA zu IPA konvertieren
http://www.theiling.de/ipa/
96
B Tabellenverzeichnis
2.1 Anforderungen an die Spracherkennung . . . . . . . . . . . . . . 21
2.2 Beispiel eines Mustervergleichs . . . . . . . . . . . . . . . . . . . 22
6.1 Aufbau des BOMP Wörterbuchs . . . . . . . . . . . . . . . . . . 48
6.2 Aufbau einer Julius Vokabeldefinition . . . . . . . . . . . . . . . . 49
6.3 Aufbau einer Julius Grammatikdefinition . . . . . . . . . . . . . . 49
6.4 Beispiel einer Julius Grammatik Definition . . . . . . . . . . . . . 49
8.1 JuliusProtocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68
F.1 user.words Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . 103
F.2 user.lexicon Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . 103
F.3 model.lexicon Beispiel . . . . . . . . . . . . . . . . . . . . . . . . 103
F.4 model.voca Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . 103
F.5 user.grammar Beispiel . . . . . . . . . . . . . . . . . . . . . . . . 104
F.6 model.grammar Beispiel . . . . . . . . . . . . . . . . . . . . . . . 104
F.7 prompts Beispiel . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
F.8 user.samples Beispiel . . . . . . . . . . . . . . . . . . . . . . . . 104
97
C Abbildungsverzeichnis
1.1 Pioneer P3-AT Roboter mit Katana Arm . . . . . . . . . . . . . . 11
2.1 Spektrogramm einer 9-Kanal Filterbankanalyse . . . . . . . . . . 15
2.2 Verlauf eines DP Pfades . . . . . . . . . . . . . . . . . . . . . . . 16
2.3 Negativbeispiel des DP Versuchs . . . . . . . . . . . . . . . . . . 17
2.4 DFKI Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
2.5 Eine typische Spracherkennung, anhand eines Mustervergleichs
23
3.1 Nachbau der Sprechmaschine von Kempelen . . . . . . . . . . . 25
3.2 Ein typischer Aufbau eines Sprachsynthesesystems . . . . . . . 27
4.1 IBM Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
4.2 IBM 4341 Mainframe Rechner mit 233MHz . . . . . . . . . . . . 30
4.3 Philips Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31
4.4 Dragon NaturallySpeaking Logo . . . . . . . . . . . . . . . . . . . 31
4.5 CMU Sphinx Logo . . . . . . . . . . . . . . . . . . . . . . . . . . 33
4.6 Julius Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
4.7 Beispiel einer Markov Kette . . . . . . . . . . . . . . . . . . . . . 36
5.1 AT&T Natural Voices Logo . . . . . . . . . . . . . . . . . . . . . . 37
5.2 Fonix Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.3 MBROLA Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.4 BOSS Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.5 HTS Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
5.6 espeak Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
6.1 Darstellung zweier Formanten . . . . . . . . . . . . . . . . . . . . 44
6.2 Ungerichtetes und gerichtetes Mikrofon . . . . . . . . . . . . . . 50
6.3 Sennheiser Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.4 Verwendetes Sennheiser Mikrofon, PC136 . . . . . . . . . . . . . 51
7.1 Trolltec Qt Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
7.2 ALSA Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54
7.3 ALSA Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
98
8.1 TracIcon . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60
8.2 Reimplementierung von QTreeWidget und QLineEdit . . . . . . . 61
8.3 Die Klasse WordManager . . . . . . . . . . . . . . . . . . . . . . 62
8.4 Die Klasse GrammarManager . . . . . . . . . . . . . . . . . . . . 63
8.5 Die Klasse SampleManager . . . . . . . . . . . . . . . . . . . . . 64
8.6 Die Klasse ModelManager . . . . . . . . . . . . . . . . . . . . . . 65
8.7 Detailierter Fehler bei Erstellung des Sprachmodells . . . . . . . 65
8.8 Die Klasse JuliusControl . . . . . . . . . . . . . . . . . . . . . . . 69
8.9 Die Klasse Speaker . . . . . . . . . . . . . . . . . . . . . . . . . 70
8.10 Die Klasse SoundOutput . . . . . . . . . . . . . . . . . . . . . . . 71
8.11 Die Klasse WavRecorder . . . . . . . . . . . . . . . . . . . . . . 72
8.12 Die Klasse MicControl . . . . . . . . . . . . . . . . . . . . . . . . 73
8.13 Die Klasse Settings . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.14 DoxyGen Logo . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.15 Ansicht des Programms . . . . . . . . . . . . . . . . . . . . . . . 75
8.16 Ansicht der Spracherkennung . . . . . . . . . . . . . . . . . . . . 76
8.17 Ansicht von Training - Sprachmodell . . . . . . . . . . . . . . . . 77
8.18 Ansicht von Training - Akustikmodell . . . . . . . . . . . . . . . . 78
8.19 Ansicht von Trainging - Grammatik . . . . . . . . . . . . . . . . . 79
8.20 Training - Wort hinzufügen I . . . . . . . . . . . . . . . . . . . . . 81
8.21 Training - Wort hinzufügen II . . . . . . . . . . . . . . . . . . . . . 82
8.22 Training - Wort hinzufügen III . . . . . . . . . . . . . . . . . . . . 83
8.23 Training - Wort hinzufügen IV . . . . . . . . . . . . . . . . . . . . 84
8.24 Training - Wort hinzufügen V . . . . . . . . . . . . . . . . . . . . . 85
8.25 Ansicht der Sprachausgabe . . . . . . . . . . . . . . . . . . . . . 86
8.26 Allgemeine Einstellungen . . . . . . . . . . . . . . . . . . . . . . 87
99
D Abkürzungsverzeichnis
ALSA
Advanced Linux Sound Architecture
AMSER
Autonome mobile Serviceroboter
ASCII
American Standard Code for Information Interchange
ASE
Automatischr Sprach Erkennung
ASR
Automatic Speech Recognition
BMBF
Bundesministerium für Bildung und Forschung
BOMP
Bonn Machine-Readable Proncunation Dictionary
BOSS
Bonn Open Synthesis System
CMU
Carnegie Mellon University
DARPA
Defense Advanced Research Projects Agency
DFA
Deterministic Finite Automation
DFKI
Deutsches Forschungszentrum für Künstliche Intelligenz
DP
Dynamische Progammierung
DSP
Digital Speech Processing
DTW
Dynamic Time Warping
GUI
Graphical User Interface
HMM
Hidden Markov Model
HTK
Hidden Markov Model Tool kit
HTS
HMM Based Speech Synthesis System
IPA
International Phonetic Alphabet
KDE
K Desktop Environment
LVCSR
Large Vocabulary Continuous Speech Recognition
MBROLA
Multiband Resynthesis Overlap and Add)
MFCC
Mel Frequency Cepstral Coefficients
N-Gram
Folge aus N Zeichen
NLP
Natural Language Processing
RIFF-WAVE
Resource Interchange File Format WAVE
SAMPA
Speech Assessment Methods Phonetic Alphabet
SDK
Software Development Kit
TCP
Transmission Control Protocol
TTS
Text-to-Speech
100
UTF
Unicode Transformation Format
WAVE
Windows Audio Video Excellence
X-SAMPA
Extended Speech Assessment Methods Phonetic Alphabet
101
E Quellcode Verzeichnis
8.1 Beispiel von WordManager . . . . . . . . . . . . . . . . . . . . . 62
8.2 Beispiel von GrammarManager . . . . . . . . . . . . . . . . . . . 63
8.3 Beispiel von SampleManager . . . . . . . . . . . . . . . . . . . . 64
8.4 Anfrage von Client an JuliusServer . . . . . . . . . . . . . . . . . 67
8.5 Kommandoimplementierung . . . . . . . . . . . . . . . . . . . . . 68
8.6 Beispiel von Speaker . . . . . . . . . . . . . . . . . . . . . . . . . 70
8.7 Verwendung von Soundoutput
. . . . . . . . . . . . . . . . . . . 71
8.8 Verwendung von WavRecorder . . . . . . . . . . . . . . . . . . . 72
8.9 Verwendung von Settings . . . . . . . . . . . . . . . . . . . . . . 74
102
F Beispieldaten
WordManager Dateien
Maus
Computer
Übung
Test
Buchen
Buchen
maUs
kOmpju:t@r
y:bUN
tEst
bu:x@n
bu:x@n
NOM
NOM
NOM
NOM
VRB
NOM
...
Maus
Computer
Übung
Buchen
...
Tabelle F.1:
user.words Beispiel
APFEL
BIRNE
COMPUTER
MAUS
SENT-END
SENT-START
TEST
ÜBUNG
[Apfel]
[Birne]
[Computer]
[Maus]
[]
[]
[Test]
[Übung]
Tabelle F.2:
user.lexicon Beispiel
apf@l
bIrn@
kOmpju:t@r
maUs
sil
sil
tEst
y:bUN
Tabelle F.3:
model.lexicon Beispiel
% NS_B
<s>
% NS_E
<s>
% NOM
Übung
Computer
Maus
...
maUs
kOmpju:t@r
y:bUN
bu:x@n
...
sil
sil
y:bUN
kOmpju:t@r
maUs
Tabelle F.4:
model.voca Beispiel
103
...
NOM
NOM
NOM
VRB:NOM
...
GrammarManager Dateien
Computer
Maus
Test
Buchen
Buchen
Computer Maus
NOM
NOM
NOM
NOM
VRB
NOM NOM
S:NS_B NOM NS_E
S:NS_B VRB NS_E
S:NS_B NOM NOM NS_E
S:NS_B VRB NOM NOM NS_E
S:NS_B NOM VRB NOM NS_E
Tabelle F.6:
model.grammar Beispiel
Tabelle F.5:
user.grammar Beispiel
SampleManager Dateien
Computer_2008-12-18_15-38-04
Maus_2008-12-18_15-38-20
Computer_Maus_2008-12-18_15-38-40
Maus_Computer_2008-12-18_15-38-53
Test_2008-12-18_15-40-35
Übung_2008-12-18_15-41-16
Computer_Maus_Test_Übung_. . .
COMPUTER
MAUS
COMPUTER MAUS
MAUS COMPUTER
TEST
ÜBUNG
COMPUTER MAUS TEST ÜBUNG
Tabelle F.7: prompts Beispiel
(. . . )/samples/Computer_2008-12-18_15-38-04.wav
(. . . )/samples/Maus_2008-12-18_15-38-20.wav
(. . . )/samples/Computer_Maus_(. . . ).wav
(. . . )/samples/Maus_Computer_(. . . ).wav
(. . . )/samples/Test_2008-12-18_15-40-35.wav
(. . . )/samples/Übung_2008-12-18_15-41-16.wav
(. . . )/samples/Computer_Maus_Test_(. . . ).wav
(. . . )/samples/samples/Computer_Test_(. . . ).wav
Tabelle F.8: user.samples Beispiel
104
Computer
Maus
Computer Maus
Maus Computer
Test
Übung
Computer Maus Test Übung
Computer Test