Spracherkennung und Sprachsteuerung

[toc]

Die Faszination dafür, Gegenstände nur durch die eigene Stimme zu steuern, hat mittlerweile zu einer merklichen Schwerpunktverlagerung in der Weiterentwicklung technischer Geräte geführt, wie zum Beispiel die Feature Liste des iPhone 4S jüngst zeigte. So wurde die Sprachsteuerung zu einem der wichtigsten Aspekte Multimodaler Interaktion. In diesem Artikel soll ein Überblick über Möglichkeiten zur Spracherkennung bzw. Sprachsteuerung vermittelt werden, dazu werden auch Webdienste behandelt. Möglichkeiten zur Implementierung beziehungsweise Einbindung für Software-Projekte, also vorhandene Programmbibliotheken[ref]http://de.wikipedia.org/wiki/Programmbibliothek[/ref] werden sofern vorhanden vorgestellt. Er soll einen groben Umriss über aktuell Produkte bieten. Der Schwerpunkt liegt in diesem Artikel auf der Android-Entwicklung und wurde im Zusammenhang mit dem Projekt ELISA erstellt. Es soll eine Erleichterung der Bedienbarkeit von Tablets unter anderem durch Sprachsteuerung erreicht werden.  Zunächst werden grundlegende Begriffe sowie Mechanismen erklärt, bevor im weiteren Verlauf Webdienste und Produkte im Einzelnen behandelt werden. Sie sind dabei unterteilt in den Kategorien “kommerziell” und “Open Source”. Im abschließenden Vergleich werden sie einander tabellarisch gegenübergestellt.

Grundlagen

Zu unterscheiden ist neben Text-to-Speech (TTS) und Speech-to-Text (STT) vor allem zwischen Spracherkennung und Sprachsteuerung. TTS ist die künstliche Erzeugung (Synthese) von Sprache. Bei STT findet eine Digitalisierung der analogen Sprachsignale statt, welche mit Hilfe von akustischen Modellen, Wörterbücher und Sprachmodellen erkannt werden.

Bei der Spracherkennung werden eingegebene Sprachinformationen durch computerbasierte Systeme analysiert.[ref]http://www.itwissen.info/definition/lexikon/Spracherkennung-voice-recognition.html[/ref] Natürliche oder auch fließende Spracherkennung ist dabei die Fähigkeit des Systems nicht nur unterbrochene (diskrete) Sätze, sondern einen gesamten Sprachfluss zu erkennen. Es ist also bei modernen System nicht notwendig eine Pause zwischen den Wörtern einzulegen.

Als Sprachsteuerung hingegen bezeichnet man die Eingabe von Befehlen in technische Geräte per Stimme.  Diese baut direkt auf Spracherkennung auf, denn das gesprochene Wort muss erst erkannt werden, bevor es einem bestimmten Befehl zugeordnet werden kann.

[singlepic id=627 w=600 h=440 float=]

Mechanismen zur Spracherkennung

Hidden Markov Model

Als stochastisches Model der Spracherkennung wird unter anderem das Hidden-Markov-Model[ref]https://de.wikipedia.org/wiki/Hidden_Markov_Model[/ref] verwendet und in der Spracherkennungssoftware implementiert.

Das Hidden-Markov-Model ist die einfachste Form eines dynamischen Bayes’schen Netzes und ist durch Zustände und Übergangswahrscheinlichkeiten gekennzeichnet. Es entscheidet abhängig von den bisherigen Eingaben welches Wort, oder auch welches Phonem, mit größerer Wahrscheinlichkeit gemeint ist.[ref]http://en.wikipedia.org/wiki/Speech_recognition#Algorithms[/ref]

Beispiel:

Otto möchte seinen Bekannten Charlie anrufen.
“Charlie” wird im Optimalfall wie “t-sch-a-r-l-i” ausgesprochen.
Aufgezeichnet wird jedoch eine Tonspur die sich eher anhört wie “d-sch-a-o-l-ü”.
Das gemeinte Wort “Charlie” ist für das Spracherkennungsprogramm also keineswegs direkt erkennbar, “t-sch-a-r-l-i” ist hidden.

Das Programm verfügt über zwei Wahrscheinlichkeitstabellen,
die es sich nun zuhilfe nimmt.
Die eine Tabelle enthält Information, die unter Anderem besagen, dass
ein hidden-t mit einer gewissen Wahrscheinlichkeit auch als “d”,
ein hidden-r mit einer gewissen Wahrscheinlichkeit auch als “o” und
ein hidden-i mit einer gewissen Wahrscheinlichkeit auch als “ü” beobachtet werden kann.
Die andere Tabelle enthält Information, die unter Anderem besagen, dass
ein hidden-t wahrscheinlicher einem hidden-sch vorrausgeht als ein hidden-d,
ein hidden-r wahrscheinlicher zwischen einem hidden-a und einem hidden-l vorkommt als ein hidden-o und
ein hidden-i wahrscheinlicher auf ein hidden-l folgt als ein hidden-ü.

Dank dieser Informationen  wird das Programm nach einer etwas aufwändigen Berechnung unter Beachtung vieler weiterer Informationen aus den Tabellen in der Lage sein, “t-sch-a-r-l-i” als wahrscheinlicher anzunehmen, “d-sch-a-o-l-ü” also zu verwerfen und die Tonspur als “Charlie” richtig zu erkennen.

Kommerzielle Dienste und Produkte

Nuance

Nuance bietet neben verschiedenen Spracherkennungsprodukten für Desktopanwendungen auch einen Webdienst zur serverbasierten Spracherkennung zum Beispiel für mobile Apps. Es unterstützt sowohl iOS als auch Android. Zur Entwicklung solcher Apps wird ein entsprechendes Software Development Kit (SDK) bereitgestellt, das im Folgenden kurz erläutert wird.

Dragon Mobile SDK

[singlepic id=742 w=320 h=240 float=]

Das Dragon Mobil SDK ist eine eigener Werkzeugsatz zur Integration von Spracherkennung in bestehende Applikationen und zur Erstellung eigener Anwendungen und nutzt eine serverbasierte Spracherkennung. Sogenannte Back-End-Systeme haben den Vorteil dass eine Verbesserung der Spracherkennung durchgeführt werden kann, ohne dass die Anwendung selbst aktualisiert werden muss.

Ein Codebeispiel:

 // Use the same handler for both buttons
 final Button dictationButton = (Button)findViewById(R.id.btn_startDictation);
 Button websearchButton = (Button)findViewById(R.id.btn_startWebsearch);
 Button.OnClickListener startListener = new Button.OnClickListener()
 {
 @Override
 public void onClick(View v) {
 _listeningDialog.setText("Initializing...");   
 showDialog(LISTENING_DIALOG);
 _listeningDialog.setStoppable(false);
 setResults(new Recognition.Result[0]);

 if (v == dictationButton)
 _currentRecognizer = MainView.getSpeechKit().createRecognizer(Recognizer.RecognizerType.Dictation, Recognizer.EndOfSpeechDetection.Long, "en_US", _listener, _handler);
 else
 _currentRecognizer = MainView.getSpeechKit().createRecognizer(Recognizer.RecognizerType.Search, Recognizer.EndOfSpeechDetection.Short, "en_US", _listener, _handler);
 _currentRecognizer.start();
 }
 };
 dictationButton.setOnClickListener(startListener);
 websearchButton.setOnClickListener(startListener);

Apple

Apple hat spätestens seit dem iPhone 4S [ref](https://www.apple.com/de/iphone)[/ref] und ihren Plänen zu Sprachsteuerung von TV-Geräten [ref](http://www.iptv-anbieter.info/iptv-news/apple-stost-auf-tv-markt-vor-fernseher-mit-sprachsteuerung-in-arbeit)[/ref] wieder eine wichtige Rolle in der Spracherkennung eingenommen. Es unterhält dementsprechend eigene Server zur Spracherkennung und -steuerung, limitiert deren Nutzung jedoch bisweilen stark.

SIRI

[singlepic id=743 w=320 h=240 float=]

Siri ist eine Software von Apple, die der Erkennung und Verarbeitung von natürlich gesprochener Sprache dient. [ref](https://de.wikipedia.org/wiki/Siri_%28Software%29)[/ref] Apple hat durch den Kauf vin Siri[ref](http://www.macnotes.de/2010/04/29/apple-kauft-siri-virtueller-assistent-fur-intelligente-suche-im-iphone-os/)[/ref]  bewiesen, wie interessant Sprachesteuerung für Kunden ist.

Microsoft

Tellme

Von Microsoft für Windows-Phone entwickelt Software Tellme bietet durch die Cloud eine ständige Verbesserung der Spracherkennung [ref](https://www.microsoft.com/en-us/Tellme/technology/default.aspx#tab=engines)[/ref].

[singlepic id=781 w=320 h=240 float=]

Es soll ein Konkurrent zu Siri sein, schnitt jedoch in vielen subjektiven Tests als deutlich schlechter und weniger intelligent ab.[ref]http://www.ifrick.ch/2011/11/microsoft-tellme-gegen-apple-siri-noch-fragen/[/ref]

WSR Macros

Dies ist ein kostenfreies Tool zum herunterladen, welches einem eine einfache Möglichkeit gibt die Sprachsteurung von Windows zu erweitern, ohne weitgreifende Programmierkenntnisse zu besitzen. Jedoch bleibt es weit hinter den Möglichkeiten anderer Anbieter zurück.

Google VoiceActions

[singlepic id=753 w=320 h=240 float=]

Auch Google hat mit Google Voice Actions[ref]http://www.google.com/mobile/voice-actions/[/ref] eine Möglichkeit entwickelt das Mobiltelefon oder das Tablet per Sprache zu bedienen. Anders als andere Anbieter braucht es den Vergleich mit Siri nicht zu scheuen, obwohl es in der Umsetzung einen deutlich anderen Weg gewählt hat. Anders als beim Produkt von Apple wird weniger in Oberfläche von Siri angezigt, sondern auf die Suchmaschine von Google gesetzt. Es wirkt zwar dadurch technischer, aber häufig auch detaillierter. Es stehen also auf der einen Seite ein Dialog-Ansatz und Styling von Apple und auf der anderen Seite klare Anweisungen und aufgelistete Ergebnisse von Google.[ref]http://t3n.de/news/apple-siri-google-voice-actions-funktioniert-besser-337314/[/ref]

Iris

Die erste Version von Iris soll innerhalb weniger Stunden entstanden sein und wurde später durch updates immer genauer und zuverlässiger. Dexetras Versuch Siri zu klonen stellt zur Zeit noch nicht eine ausgereifte Software dar, man kann aber vermuten, dass durchaus noch weitere Updates folgen werden.[ref]http://www.businessvalue24.de/iris-die-sprachsoftware-im-test[/ref] Iris benötigt Google Voice Search[ref]http://www.golem.de/1008/77191.html[/ref] und TTS, welche aber frei im Android Market erhältlich sind. Da es keine Softwarebibliothek, sondern eine prototypische Implementierung  auf Basis des unten erläutertem Android SDK ist und kein Quellcode erhältlich ist, kann es nicht in eigenen Programmen verwendet werden.

Android SDK

Android bietet den Vorteil, dass es frei und kostenlosnlos ist und zusäzlich der Quellcode eingesehen und studiert werden kann. Beides erleichtert die Implementierung neuer Applikationen. Die SDKs sind umfangreich und schon mit verschieden Tests vorhanden. Mit der aktuellen Version 4.0 Ice Cream Sandwich soll zudem auch ein Front-End-System, also einer Erkennung auf dem Client, der Spracherkennung möglich sein. Es ist damit unabhängig von den Servern der Anbieter, die Anwendung muss aber zur Verbesserung manuelle aktualisiert werden.

ein Codebeispiel:

/**
 * A very simple application to handle Voice Recognition intents
 * and display the results
 */
public class VoiceRecognitionDemo extends Activity
{

    private static final int REQUEST_CODE = 1234;
    private ListView wordsList;

    /**
     * Called with the activity is first created.
     */
    @Override
    public void onCreate(Bundle savedInstanceState)
    {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.voice_recog);

        Button speakButton = (Button) findViewById(R.id.speakButton);

        wordsList = (ListView) findViewById(R.id.list);

        // Disable button if no recognition service is present
        PackageManager pm = getPackageManager();
        List<ResolveInfo> activities = pm.queryIntentActivities(
                new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH), 0);
        if (activities.size() == 0)
        {
            speakButton.setEnabled(false);
            speakButton.setText("Recognizer not present");
        }
    }

    /**
     * Handle the action of the button being clicked
     */
    public void speakButtonClicked(View v)
    {
        startVoiceRecognitionActivity();
    }

    /**
     * Fire an intent to start the voice recognition activity.
     */
    private void startVoiceRecognitionActivity()
    {
        Intent intent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH);
        intent.putExtra(RecognizerIntent.EXTRA_LANGUAGE_MODEL,
                RecognizerIntent.LANGUAGE_MODEL_FREE_FORM);
        intent.putExtra(RecognizerIntent.EXTRA_PROMPT, "Voice recognition Demo...");
        startActivityForResult(intent, REQUEST_CODE);
    }

    /**
     * Handle the results from the voice recognition activity.
     */
    @Override
    protected void onActivityResult(int requestCode, int resultCode, Intent data)
    {
        if (requestCode == REQUEST_CODE && resultCode == RESULT_OK)
        {
            // Populate the wordsList with the String values the recognition engine thought it heard
            ArrayList<String> matches = data.getStringArrayListExtra(
                    RecognizerIntent.EXTRA_RESULTS);
            wordsList.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1,
                    matches));
        }
        super.onActivityResult(requestCode, resultCode, data);
    }
}

Vlingo

[singlepic id=745 w=320 h=240 float=]

Vlingo ist eine kostenfreie App, welche Nachrichten oder Mails sendet, Anrufe und Websuche durch einfache Sprachbefehle startet – welche aber beim ersten Start eingestellt werden müssen. Es ist nur mit Android Versionen ab 2.0 kompatibel. Im Hauptmenü werden alle verfügbaren Befehle aufgelistet und neben dem erstellen von SMS, ist es auch möglich andere Applikationen wie zum Beispiel Skype aufrufen. Die Spracherkennung wurde in mehreren Test als überraschend gut beschrieben und bietet auch einen inCar-Modus, welcher eine Steuerung mit fast gar keinem Berühren erlaubt.[ref]http://www.cnet.de/blogs/mobile/android-app/41555152/vlingo_fuer_android_das_smartphone_per_sprachbefehl_steuern.htm[/ref]

Open Source Projekte

Neben kommerziellen Webdiensten und Produkten gibt es auch Open Source Projekte, die sich ebenfalls mit Spracherkennung (vordergründig) sowie zum Teil mit Sprachsteuerung befassen.
Durch eine freie und kostenlose Veröffentlichung eines Quelltextes fördern diese die Weiterentwicklung und erleichtern die Verbreitung. Es kann somit eine große Anzahl an Personen an einer Aufgabe arbeiten und jeder profitiert von den Erfolgen anderer.

CMU Sphinx

CMU Sphinx ist ein Open Source Projekt[ref]http://cmusphinx.sourceforge.net/[/ref] zur Spracherkennung der Carnegie Mellon University. Es ist unabhängig vom Nutzer und bietet die Erkennung von ununterbrochenem Sprachfluss.[ref](http://sourceforge.net/projects/cmusphinx/)[/ref]

Julius

[singlepic id=783 w=320 h=240 float=]

Julius ist eine Spracherkennungs-Engine, welche Open Source ist und sowohl ununterbrochene Sprachflüsse versteht, als auch mit großen Wortschätzen umgehen kann. Es basiert auf Hidden Markov Modellen und läuft auf modernen PCs nahezu in Echtzeit.[ref](https://de.wikipedia.org/wiki/Julius_%28Software%29)[/ref] Neben dem vollständigen Quelltext bietet es zusätzlich noche eine Anleitung in Englisch und Japanisch.

VoxForge

[singlepic id=770 w=320 h=240 float=]

VoxForge erstellt akustische Modelle für die Verwendung mit Spracherkennungs-Engines wie Sphinx oder Julius. Es sammelt dafür eingereichte Sprachdateien von Benutzern. [ref]http://julius.sourceforge.jp/en_index.php[/ref] Aus den Sprachaufnahmen wir dann ein akustisches Modell erstellt, welches aber eine große Menge von Sprachaufnahmen benötigt.

RWTH ASR

[singlepic id=793 w=320 h=240 float=]

RASR ist ein open source Spracherkennungs-Werkzeugsatz. Es wurde von der “Human Language Technology and Pattern Recognition Group” an der Universität in Aachen entwickelt.

Nutzungsmöglichkeiten

[singlepic id=630 w=600 h=420 float=]

Das Ziel ist es im Schwerpunkt eine Verkürzung der Funktionsaufrufe um damit die Erleichterung der Bedienbarkeit zu erreichen. So soll es möglich sein vom Hauptmenü aus, mit nur einem Befehl, eine Person aus der Kontaktliste des Tablets anzurufen. Es entfallen also zum Teil lange Befehlsketten und werden durch  einzelne Befehle ersetzt. Es ist unter anderem für ältere Menschen, der Zielgruppe von ELISA, von Bedeutung.

In diesem Zusammenhang soll eine Beispielkontakliste auf einem Tablet erstellt und dem Nutzer ermöglicht werden sich einen dieser Kontakte durch einen Sprachbefehl anzuzeigen.

Vergleich

In dieser Tabelle können die vorgestellten Produkte und Webdienste nun miteinander verglichen werden.

[singlepic id=834 w=816 h=240 float=]

Zusammenfassung

Der Artikel zeigt, dass es bereits eine Vielzahl an Webdiensten, Produkten und Open Source Projekten zur Spracherkennung und Sprachsteuerung gibt, welche sich in vielen Gesichtspunkten jeweils sehr von einander unterscheiden. So wird die potentielle Nutzbarkeit zum Teil stark dadurch eingeschränkt, welche Betriebssysteme unterstützt werden, unter was für einer Lizenz die Veröffentlichung läuft, welche Sprachen erkannt werden und ob überhaupt Sprachsteuerung oder das Entwickeln eigener Anwendungen (SDK) vorgesehen ist. Dies wird in obiger Tabelle deutlich.

Die Spracherkennung derer Technologien, die sich für Android nutzen lassen findet bisweilen serverseitig statt. Die aufgezeichnete Eingabe wird an einen Server weitergeleitet und von diesem zu Text bzw. Befehlen verarbeitet.
Somit funktionieren jene nur, solange die Verbindung zwischen Gerät und Internet steht. Lediglich Google ließ verlauten, dass sein Android 4.0, welches Anfang Januar 2012 erscheinen soll, erstmals über eine autonom arbeitende Spracherkennung verfügt.

Unabhängig davon soll unbestätigten Berichten zufolge Anfang 2012 Googles Antwort auf Siri erscheinen. So berichtet der Fachblog androidandme, derzeit arbeite das Entwicklerteam an einer neuen Android-Sprachsteuerung mit Codenamen Majel. Auch heise.de zitierte den englischsprachigen Bolg in einem entsprechenden Artikel.
Majels Spracherkennung solle jedoch serverseitig stattfinden, hieß es, was wiederum mit Goggels offizieller Ankündigung einer autonom arbeitende Spracherkennung nicht ganz in Einklang zu bringen ist. Ein Google-Sprecher wiegelt Nachfragen indess damit ab, dass sie “keine Gerüchte und Spekulationen kommentieren”.
Man darf gespannt sein.

Über Benjamin Prost

Abitur im Jahr 2007 mit anschließendem einjährigem Wehrdienst. Seit 2009 Student Universität der Bundeswehr in München.
Dieser Beitrag wurde unter Integrationsebenen, Projekte, Ubiquitäre Natural User Interfaces abgelegt und mit , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.