[Tutorial] Spracherkennung in AutoIt (WinXP)

11/08/2010 10:43 Evil_Warlock#1
Einleitung
Für längere Zeit suchte Ich verzweifelt nach einer Möglichkeit, einem AutoIt Skript über ein Headset mündliche Befehle zu erteilen. Ich wollte wenn möglich nicht auf überteuerte zusätzliche Programme wie z.B. "Dragon Naturally Speaking" zurückgreifen, und hatte auch standartmäßig auf Win XP keine windowseigene Spracherkennung. Nachdem mir mehrmals in verschiedenen Skriptercommunitys versichert wurde, dass so etwas nicht möglich sei, wurde Ich durch Zufall in [Only registered and activated users can see links. Click Here To Register...] fündig. Es ist nämlich sehr wohl möglich und funktioniert sehr gut.

Das braucht man:
[Only registered and activated users can see links. Click Here To Register...]
[Only registered and activated users can see links. Click Here To Register...]

So funktioniert es:
Zuerst einmal müsst ihr das Microsoft Speech SDK installieren.
Ab dann könnt ihr die das oben verlinkte Script wie gewohnt in jedes andere Skript einbinden:
Code:
#include <SAPIListBox.au3>
Die SAPIListBox.au3 ermöglicht es euch dann in erster Linie, in eure GUI eine spezielle "SAPI"-ListBox einzubauen. Diese unterscheidet sich optisch nicht von der normalen ListBox, ist jedoch Voice sensitive. Sie makiert wenn aktiviert automatisch (durch Zugriff auf das Microsoft Speech SDK) denjenigen ihrer Einträge, welchen Sie gehört zu meinen glaubt. Zunächst braucht ihr dafür eine GUI, in welche ihr includen könnt:
Code:
#include <GuiConstantsEx.au3>
[COLOR="Red"]#include <SAPIListBox.au3>[/COLOR]


$fester = GUICreate("Beispiel zur Spracherkennung",400,300)

GUISetState()

While 1
	$msg = GUIGetMsg()

	
	switch $msg
	case $GUI_Event_Close
		ExitLoop
	EndSwitch
WEnd
Nun müsst ihr in diese GUI die erwähnte SAPIListBox einbauen:
Code:
$fester = GUICreate("Beispiel zur Spracherkennung",400,300)
[COLOR="Red"]$wortbox = _GUICtrlSAPIListBox_Create(10, 10, 380, 280)[/COLOR]
Nun müsst ihr noch angeben, welche Wörter die SAPIListBox erkennen soll, und sie enabeln (damit sie anfängt darauf zu achten was gesagt wird):
Code:
#include <GuiConstantsEx.au3>
#include <SAPIListBox.au3>

[COLOR="Green"]dim $msg, $wortbox_array[5] = ["Up","Down","Left","Right","Wait"][/COLOR]

$fester = GUICreate("Beispiel zur Spracherkennung",400,300)
$wortbox = _GUICtrlSAPIListBox_Create(10, 10, 380, 280)

GUISetState()

[COLOR="Red"]_GUICtrlSAPIListBox_EnableSpeech($wortbox, 1)[/COLOR]
[COLOR="Green"]_GUICtrlSAPIListBox_AddArray($wortbox, $wortbox_array)[/COLOR]
Und ganz zum Schluss müsst ihr noch angeben, was passieren soll, wenn die SAPIListBox ein bestimmtes Wort erkannt hat (in diesem Fall die Maus bewegen:
Code:
While 1
	$msg = GUIGetMsg()
	[COLOR="Red"]$mausposition = MouseGetPos()[/COLOR]
	
	[COLOR="Red"]if _GUICtrlSAPIListBox_CurSelChanged($wortbox) = True Then
		
		if StringCompare(_GUICtrlSAPIListBox_GetText($wortbox), "Up") = 0 Then
			MouseMove($mausposition[0],$mausposition[1]-50)
		EndIf
		
		if StringCompare(_GUICtrlSAPIListBox_GetText($wortbox), "Down") = 0 Then
			MouseMove($mausposition[0],$mausposition[1]+50)
		EndIf
		
		if StringCompare(_GUICtrlSAPIListBox_GetText($wortbox), "Left") = 0 Then
			MouseMove($mausposition[0]-50,$mausposition[1])
		EndIf
		
		if StringCompare(_GUICtrlSAPIListBox_GetText($wortbox), "Right") = 0 Then
			MouseMove($mausposition[0]+50,$mausposition[1])
		EndIf
	EndIf[/COLOR]

	
	switch $msg
	case $GUI_Event_Close
		ExitLoop
	EndSwitch
WEnd
Umfangreiche Beispielskripts findet ihr im oben verlinkten Thread.

UDF Befehle

Troubleshooting & FAQ
Q: Funktioniert das ganze auch für Vista und/oder Win7?
A: Dem englischen Forum nach nicht - ich habe es aber auch noch nicht getestet.

Q: Obwohl ich das Microsoft Speech SDK installiert habe, bekomme ich sobald Ich mein Skript ausführen möchte einen "Could not create SAPI List Box control. Ensure you have installed the Microsoft Speech SDK 5.1..." Error?!
A: Man muss in diesem Fall von Hand die "SAPI51ListBox.ocx" Active X control auf seinem Computer registrieren. Dazu klickt man auf "Start" > "Ausführen", gibt den Pfad zur .ocx Datei an ("C:\Programme\Microsoft Speech SDK 5.1\Bin\SAPI51ListBox.ocx") und drückt OK. Nun sollte es funktionieren.

Credits
Die UDF (SAPIListBox.au3) sowie teile des Tutorials stammen von seangriffin von autoitscript.com. Ich habe nur zusammengefasst und auf Deutsch übersetzt.
11/09/2010 18:46 Fruschel#2
Und da ich mal annehme, dass hier kaum Profis in Sachen Programmierung rumlaufen, frage ich Dich, oh heiliger [Only registered and activated users can see links. Click Here To Register...], wie denn sowas schickes machbar ist, wenn wir uns Lehrlinge an das Skript selber ransetzen? :)

[Only registered and activated users can see links. Click Here To Register...]

MfG, Understood.
11/09/2010 18:52 iDunnoi#3
aber so kuhl is das jetz auch wieder nich...
11/09/2010 21:38 Evil_Warlock#4
Quote:
Originally Posted by Fruschel View Post
Und da ich mal annehme, dass hier kaum Profis in Sachen Programmierung rumlaufen, frage ich Dich, oh heiliger [Only registered and activated users can see links. Click Here To Register...], wie denn sowas schickes machbar ist, wenn wir uns Lehrlinge an das Skript selber ransetzen? :)
^^

EDIT:
Ok, ich hoffe jetzt ist es etwas verständlicher :)
11/26/2012 17:52 Skripter#5
Sry fürs Ausgraben aber ich glaube das ist ein wirklich seehr interessantes Thema!
Ich hab die SDK installiert jedoch kann ich eben diese Active X Control nicht aktivieren!
Keine Ahnung Windows kann die Datei nicht öffnen und erwartet halt von mir das ich ihm sage welches Programme es dazu nutzen soll...
Hat da jemand eine Lösung für?
11/26/2012 18:20 GodHacker#6
Tutorials zum Thema Coding kommen hier rein -> [Only registered and activated users can see links. Click Here To Register...]
11/27/2012 20:01 Skripter#7
Was hat das mit Coding zu tun?
Ich möchte wissen wie ich die Active X Control
11/27/2012 21:42 lolkenschlol#8
10-8-2010 :facepalm: :facepalm: :facepalm:
11/28/2012 13:23 Skripter#9
Ich nehme das mal als:
"Nein hier kann mir keiner helfen"