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