Tonis Bastelkeller - Sprachsteuerung für Jedermann oder: Die Siri Alternative

Sprachsteuerung ist cool und liegt voll im Trend, keine Frage. Ob sie immer sinnvoll ist mag dabei jeder für sich selbst entscheiden. Eigentlich wollte ich den Hype, der grad nicht nur durch unser Forum weht, mal aufs Korn nehmen und schauen was da mit einem schmalen Budget und geringen Anforderungen mit Bordmitteln so zu realisieren ist. Denn ich hab ehrlich gesagt keine Lust gehabt mir einen Raspberry Pi zuzulegen um daraus mit etwas Linux Know-How einen Siri-Proxy zu machen, der dann irgendwie an IPS angebunden werden muss und im Dauerbetrieb neben meinem Server her läuft und Strom verbraucht - auch wenns nur wenig ist. Wer sich für diese Lösung interessiert findet mehrere zum Teil lange und ausführliche Threads hier im Forum.

Aber ich musste schnell feststellen dass ich zwei grundlegenden Vorurteilen aufgesessen bin. Erstens, und da ist Siri sicherlich im Vorteil, aktiviert man nicht „mal eben“ die Windows Spracherkennung und schaut wie gut die ist. Ich hab 5 Abende und zusammen fast 2 Sixpacks feinsten Gerstensafts damit verbracht mir die Grundlagen für dieses Einsteigertutorial zu erarbeiten. Und Zweitens ist der schlechte Ruf der Windows Spracherkennung völlig unberechtigt. Ich war über die Möglichkeiten und die Qualität, die ich am Ende erreicht hatte wirklich erstaunt. Und gerade weil die Möglichkeiten so immens sind will ich hier auch nur ne Starthilfe geben. Das würde sonst jeden Rahmen sprengen. Ich werde in dieser Bastelstunde also am Beispiel meines auf Win7 basierenden IPS-Server einmal eine Alternative zu Siri aufzeigen.

Was wollen wir hier heute erreichen?

Am Ende dieser Bastelstunde werden wir einen relativ frei formulierbaren Text in ein Mikro sprechen können, den Windows auf Schlüsselworte wie „Licht“, „Wohnzimmer“, „einschalten“ analysiert, eine Ansage hören damit wir wissen, dass es uns verstanden hat und eine Aktion in IPS auslösen. Dafür werden wir zunächst eine deutsche Sprachausgabe (TTS) installieren und in Betrieb nehmen. Dann werden wir die Spracherkennung von Windows in Betrieb nehmen und sie etwas trainieren. Im Gegensatz zu Siri oder Alice, ihre kleine Android-Schwester, ist das Training für einen sauberen Betrieb sehr wichtig. Aber keine Angst, es dauert nicht mehr so lange wie früher. Aber ihr werdet dennoch sicher den ganzen Abend zum nachbasteln brauchen.

Zuletzt installieren wir noch Microsofts WSRMacros um die Sprachbefehle an IPS durchzureichen. Dazu werden wir eine XML Datei erstellen mit der es möglich ist von einfachen Input/Output-Geschichten bis hin zu komplexen Unterhaltungen eine Vielzahl von Anwendungsfällen abzubilden. Da kann man echt viel Zeit verbrennen. :wink:

Fangen wir mit dem Einfachsten an. Die Sprachausgabe.

Wer schon eine funktionierende TTS (text-to-speech) Sprachausgabe installiert hat kann diesen Punkt überspringen.

Das wichtigste bei der Sprachausgabe ist die Engine, also „die Stimme“. Man ist sich hier im Forum größtenteils einig, dass „Steffi“ unter den kostenlosen Engines eine der Besten, wenn nicht die Beste, ist. Sie kommt aber mit den viel neueren und fortschrittlicheren Kostenpflichtigen nicht mit. Da brauchen wir uns nichts vor machen. Leider ist es schwierig geworden sie zu bekommen. Sie scheint so langsam aus dem Netz zu verschwinden. Ich hab sie aber auf der Seite von Balabolka (Unterpunkt SAPI5) noch zum download gefunden. Die Installation sollte keine Fragen offen lassen. Danach lässt sich Steffi in der Systemsteuerung unter „Erleichterte Bedienung“ - „Spracherkennung“ - „Text-zu-Sprache“ auswählen. Mit der Stimmenvorschau kann man sich schon mal einen Vorgeschmack auf die Engine verschaffen.

Entgegen der gängigen Meinung ist die gute alte Steffi sehr wohl auch für 64Bit Betriebsysteme geeignet. Ich selbst setze sie auf meinem 64Bit Win7 ein. Es ist nur so, dass das Einstellungspanel für die Sprachausgabe von Windows in der 64Bit-Version fehlerhaft ist und darum nur 64Bit Engines zur Auswahl anbietet. Für den Kompatibilitätsmodus ist die alte 32Bit Version des Panels aber noch auf der Platte versteckt. Ihr findet es unter „C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl“. Das Panel öffnet sich durch einen Doppelklick und die Einstellungen werden wie gewohnt übernommen. Allerdings wird sie wieder überschrieben wenn man am originalen Panel herumfummelt um vielleicht etwas völlig anderes einzustellen.

Der zeitraubende Part. Die Windows Spracherkennung.

Vorab will ich ein paar Worte zum richtigen Equipment verlieren. Versucht erst gar nicht mit einem klapprigen alten sogenannten „Computer Mikrofon“ zu arbeiten. Es ist auch mit einem guten Mikro schon nervig und zeitraubend genug Windows an seine Sprechweise zu gewöhnen. Mein altes Headset, dass für Teamspeak und Spiele noch völlig ausreichend ist, hat nur mäßig gut funktioniert. Nehmt ein paar Euro in die Hand und kauft euch ein ordentliches Headset oder Mikro. Ich hatte noch ein Sony F-V33 liegen. Ist zwar unpraktisch aber hierfür reichte es vollkommen. Mir wurde ein Sennheiser Bluetooth-Headset empfohlen, dass etwa um die 50 Euro kosten soll, kann aber zu diesem Zeitpunkt noch nichts dazu sagen.

Die Einrichtung der Spracherkennung lässt kaum Fragen offen. Am besten arbeitet man sich im von oben nach unten durch das Spracherkennungspanel vor, dass in der Systemsteuerung unter „Erleichterte Bedienung“ - „Spracherkennung“ zu finden ist. Wenn man aufgefordert wird etwas zu sagen um dann zu sehen was es bewirkt ist man versucht mal etwas anderes zu sagen um zu schauen ob das bereits Gelernte auch wirklich funktioniert. Aber da müssen wir an dieser Stelle noch etwas warten. Wir befinden uns noch in der Lernphase und wenn wir etwas anderes sagen als Windows erwartet bringen wir es nur durcheinander.

Nachdem wir uns da durch gekämpft haben ist man natürlich neugierig. Ich habe an dieser Stelle ein Schreibprogramm geöffnet und versucht das gelernte anzuwenden. Und genau an dieser Stelle wird einem plötzlich bewusst woher die Sprachsteuerung ihren schlechten Ruf hat. Ständig werden falsche Worte erkannt und statt ein Wort zu korrigieren schreibt er den Befehl in den diktirten Text hinein. Wenn man das Schreibprogramm verlässt wird es noch schlimmer. Aber es lernt stätig dazu und nach einiger Zeit kann man sogar normal und ungestelzt sprechen und erzielt eine brauchbare Quote. Mein Tip: So oft wie möglich falsch erkannte Worte neu anlernen indem wir ihm das Wort nennen und „korrigieren“ sagen. Also „Spargel korrigieren“. Wir nennen ihm die beiden Worte und Windows analysiert worin der Unterschied in unserer Aussprache liegt. Es lernt also nicht mühselig jedes einzelne Wort sondern die Art und Weise wie wir sprechen. Feintuning sozusagen.

Jetzt wird es ernst. Befehle beibringen.

Microsoft bietet zu diesem Zweck ein Tool namens WSRMacros. Es ist schnell installiert. Nach dem Start setzt es sich unten rechts neben der Uhr fest. Es bietet allerhand Assistenten, auf die ich jetzt nicht näher eingehen will. Wenn man es rechts klickt und auf „Explore Speech Macros…“ klickt, landet man in einem Ordner in dem die Makros gespeichert werden. Ich hab unten meine Testmakros für euch zum Spielen angehängt.

Es handelt sich um eine XML-Datei deren Aufbau hier dokumentiert ist. Hier bin ich, muss ich gestehen, nicht bis in die Tiefe eingestiegen. Die Möglichkeiten sind unüberschaubar vielfältig. Ich hab an dieser Stelle das bekannte IPSCommand von meiner Webseite verwendet um in IPS Variablen zu setzen und Scripte zu triggern. Drei kleine Beispiele wollen wir noch eben näher betrachten.

  
  <command>
    <listenFor>Kali Licht Wohnzimmer an</listenFor>
    <speak>Ich schalte das Licht im Wohnzimmer jetzt an</speak>
    <run command="c:\IP-Symcon\IPSCommand.exe" params="-Set 28547 "Licht Wohnzimmer AN""/>
  </command>

Hier habe ich die Stichworte „Kali“, „Licht“, „Wohnzimmer“ und „an“ verwendet. „Kali“ hab ich willkürlich gewählt und eingebaut um meinen Rechner mit Namen ansprechen zu können. Es soll verhindern dass ein völlig anderer Satz versehendlich eine Aktion ausführt. Es lief grad Carly Rae Jepsen im Radio und die deutsche Spracherkennung hat halt „Kali“ draus gemacht :).

Wird ein zusammenhängender Satz erkannt, der alle diese Schlüsselworte enthält reagiert Kali mit dem in definierten Satz. So wissen wir, dass sie uns verstanden hat. Anschließend wird die angegebene Exe mit den Parametern aufgerufen. In diesem Beispiel wird ein Script getriggert. Wichtig ist dabei, dass ein Leerzeichen als Trennzeichen verstanden wird. Ein zusammenhängender Satz, der natürlich Leerzeichen enthält, muss in der Kommandozeile mit Anführungszeichen umschlossen werden. Blöderweise haben die Anführungszeichen hier bereits eine andere Bedeutung weshalb sie durch " escaped werden müssen. Nicht drüber nachdenken. Einfach " statt eines Anführungszeichens verwenden.

  
  <command>
    <listenFor>Kali Temperatur Wohnzimmer [Temperatur]</listenFor>
    <speak>Ich regele im Wohnzimmer auf {[Temperatur]} Grad</speak>
    <run command="c:\IP-Symcon\IPSCommand.exe" params="-Set 50322 {[Temperatur]}"/>
  </command>
  
  <numbers name="Temperatur" start="17" stop="23" />

Hier soll ein Integer Wert gesprochen, erkannt und an IPS übergeben werden. Dazu müssen wir einen Gültigkeitsbereich festlegen damit Kali es einfacher hat zu erkennen welche Zahl wir wohl gemeint haben könnten. Grade kurze Worte wie „Elf“ fallen ihr sonst schwer. Den Gültigkeitsbereich hab ich einfach mal „Temperatur“ genannt. Der Rest unterscheidet sich nicht vom vorigen Beispiel.

Damit Kali ein Minimum an Persönlichkeit bekommt bauen wir uns noch ein kleines Gimmick ein. :smiley:


  <command>
    <listenFor>Danke</listenFor>
    <speak>Kein Problem</speak>
  </command>

Bitte betrachtet dies als Einstieg in die Windows Sprachsteuerung. Irgendwo hatte ich im Netz eine ziemlich große, leider kostenpflichtige, Sammlung von XML-Files gesehen, die eine Art Chatbot mit eigener kleiner Persönlichkeit bereit stellt. Es gibt eine umfangreiche fertige Library, die einem das aktuelle Wetter aus dem Internet holt und vorließt. Es ist noch so unendlich viel mehr möglich.

Ich wünsche euch gutes Gelingen und viel Spaß mit eurer eigenen kleinen Sprachsteuerung, die es vielleicht nicht direkt mit Siri aufnehmen aber doch bestimmt beeindrucken kann.

Gruß,

Toni

Links:
TTS Steffi
Microsoft WSRMacros
WSRMacros Wiki

Makros.zip (678 Bytes)

Ich sag’s mal mit Mr.Spocks Worten: Faszinierend.
Das werde ich die Tage bei mir ausprobieren und gebe Rückmeldung.

Vielen, vielen Dank für Deine Bemühungen.

Gruß
Mitch

In der Tat: Faszinierend! :wink:

Die Mikrofonanforderungen machen das Ganze leider etwas unhandlich, ein in den Raum gerufener Befehl wird wahrscheinlich nicht erkannt, oder?

Als Alternative dazu noch ein Zitat aus meinem privaten IPS-Wiki:

Danach mit der Datei C:\Windows\SysWOW64\Speech\SpeechUX\sapi.cpl die Datei C:\Windows\System32\Speech\SpeechUX\sapi.cpl ersetzen. Dazu vorher von der zu ersetzenden Datei und deren Ordner jeweils den Besitz übernehmen.

Grüße
galleto

Es gibt Mikrofone, die speziell für diesen Anwendungsfall konzipiert sind. Aber die sind groß und teuer. Wie gut Sie für uns funktionieren kann ich nicht sagen und dann sind ja auch Nebengeräusche wieder ein Thema.

Ich tendiere zum Knopf im Ohr. Hab da aber noch keine praktischen Erfahrungen mit. Alternativ könnte ich mir vorstellen, dass man vor sein Terminal/Touchscreen treten muss um einen Sprachbefehl abzusetzen. Nicht ganz so StarTrek like, aber bestimmt Alltagstauglich.

Hab eben zu dem Thema mal gegoogelt.

Mal bei ebay nach Richtrohrmikrofon suchen - nicht Richtmikrofon, das ist ein Unterschied. Dabei darauf achten, dass man keines mit Phantomspeisung erwischt. Die benötigen zusätzlich eine Art Vorverstärker.

[Edit]Wer zum Beispiel billig an eine defekte Videokamera mit so einem „Monstermikrofon“ zum oben draufschrauben bekommt, das sind genau diese Teile. Oft stecken sie in einem dicken Schaumstoff oder Fell, das als Windschutz bei Außenaufzeichnungen dient. Gern sind sie auch mal im Fernsehen zu sehen wenn der Tontechniker nicht aufpasst und seinen „Mob“ zu dicht in die Kamera hält ;). Gibts in allen Größen.[/Edit]

Gruß,

Toni

Ich hatte auch mal dazu gegoogelt und das Stichwort „Raummikrofon“ gefunden. Sicher gibt es da Unterschiede, aber hinsichtlich der Nebengeräusche soll das einige Vorteile bieten. Allerdings müsste man wohl mehrere einsetzen, um die Nebengeräusche rausrechnen zu können. Da hätte ich auch Bedenken, was die dauerhafte CPU-Last angeht.

Grüße
galleto

Raummikrofon ist keine Bauform sondern ein Verwendungszweck. Wenn du dein Handy auf den Tisch legst und damit versuchst alles aufzuzeichnen, dann ist es automatisch ein Raummikrofon, auch wenn es nicht dafür gebaut wurde.

Ein Richtrohrmokrofon kann man sehr gut auf einen Punkt/Bereich ausrichten. Alles was ausserhalb dieses Bereiches passiert wird sehr gut rausgefiltert. So sind gute Aufnahmen auch über eine gewisse Distanz möglich. Dafür ist die sogenannte Keulen-Richtcharakteristik verantwortlich. Darum werden sie gern auf Videocameras eingesetzt weil sie nur das aufnehmen sollen was auch im Bild ist und nicht was hinter oder neben dir passiert.

Alternativ gibt es, neben einigen anderen, auf der anderen Seite die Nieren-Richtcharakteristik, die alles was direkt vor dem Mikro, auch rechts und links daneben, aufnimmt. Und zwar alles, alles. Auch Hund, Freundin, Fernseher. Die Reichweite ist also nicht von der Richtcharakteristik abhängig sondern von der Vorverstärkung. Je weniger Unsinn von der Seite reinstört desto weiter kannst du den Vorverstärker auf regeln und desto weiter wird das Mikro dich verstehen. Eine Niere müsste also weniger Vorverstärkt werden um die Reichweite auf ein sinnvolles Maß zu reduzieren. Ideal geeignet um vor einem Terminal zu stehen oder einem PC zu sitzen da es egal ist ob man leicht seitlich steht oder den Kopf wegdreht beim Sprechen.

Genau wie auf dem Wiedergabeweg. Je weiter du den Verstärker aufreisst desto weiter kannst du deine Boxen hören. Es spielt keine Rolle auf welche Art oder mit welcher Technologie sie die Musik erzeugen. Allerdings hörst du, wenn du den Verstärker zu weit aufgeregelt hast, deine Freundin nicht mehr richtig, was zu Problemen führen kann ;). Es gibt also irgendwo einen Mittelweg. Das Problem gibts bei Mikros halt auch.

Egal wie mans macht. Ein Mikro fürs ganze Hhaus wird nie klappen, es sei denn du nimmst es mit (Bluetooth Freisprecheinrichtung oder schnurloses Skype-Headset zum Beispiel). Ist dein Wohnzimmer größer brauchst du Zwei oder Drei. Niemand kann dir das ausrechnen. Probieren.

Toni

Sorry, wenn ich mal nachhaken muss aber ich finde die Stimme „Steffi“ leider unter dem angegebenen Link nicht :frowning: Kann mir mal jemand einen Tipp geben.

Edit:

Wer lesen kann ist auch hier wieder klar im Vorteil :cool: Ich habs gefunden. Ich hatte die ganze Zeit mit dem 64 Bit Original Panel rum probiert und Steffi nicht gefunden

ich habe mit dem ECM-302B von Monacor gute Erfahrungen gemacht.

In einem Raum von ca. 8 x 8 meter konnte man jedes Wort verstehen.

Toni du bist der Hammer. Super Teil :loveips:.

Du heisst nicht rein zufällig „Stark“ mit Nachnamen oder :o?

Gruß Nick

Danke dir für dieses Tolle Idee und Anleitung :slight_smile: