Sergey2210
Осваивающий
- Сообщения
- 263
- Репутация
- 31
Версия AutoIt: 3.
Описание: Приветствую всех,нашёл исходник для распознавания речи и вызова функций из скрипта по определённым условиям,проверил - работает,но Microsoft Speech SDK 5.1 плохо распознаёт слово и выводит несколько вариантов того что услышал,и ещё один минус,говорить должны на английском языке,так вот,хочется узнать возможно сделать распознавание чётче для нормальной работы и как локализовать SDK под русский язык...
Пример:Главный скрипт
Пример:TTSList его скомпилировать
Источник: Оф.форум
Или вот ещё один пример:
Источник: Оф.форум,там же нашёл ссылку,где есть языки для SDK
Описание: Приветствую всех,нашёл исходник для распознавания речи и вызова функций из скрипта по определённым условиям,проверил - работает,но Microsoft Speech SDK 5.1 плохо распознаёт слово и выводит несколько вариантов того что услышал,и ещё один минус,говорить должны на английском языке,так вот,хочется узнать возможно сделать распознавание чётче для нормальной работы и как локализовать SDK под русский язык...
Пример:Главный скрипт
Код:
AutoItSetOption ( "TrayAutoPause", 0)
Local $o_speech = ObjCreate ("SAPI.SpVoice")
$voice = $o_speech.GetVoices().Item(0)
$o_speech.Voice = $voice
$speed = 0
Global $text
While 1
gettext()
TrayTip ( "Voice Commander:", $text, 5, 1 )
Select
Case $text = "Microsoft"
MsgBox(0,'',@OSType&' '&@CRLF&@OSServicePack&' '&@CRLF&@OSVersion&' '&@CRLF&@OSArch)
$o_speech.Speak ('<rate speed="'& $speed &'">' & 'You windows system informations' & '</rate>', 8)
Exit
Case $text = "slow down"
$speed = $speed - 3
$o_speech.Speak ('<rate speed="'& $speed &'">' & 'I will talk slower for you' & '</rate>', 8)
Case $text = "speed up"
$speed = $speed + 3
$o_speech.Speak ('<rate speed="'& $speed &'">' & 'I will talk faster for you' & '</rate>', 8)
Case $text = "And"
MsgBox(0,'',"Функция работает...")
Sleep(300)
Case $text = "Since"
MsgBox(0,'',"Вторая функция работает...")
Sleep(300)
Case $text = "or Sam"
$o_speech.Speak ('<rate speed="'& $speed &'">' & 'Anna, Mary, Mike, or Sam' & '</rate>', 8)
gettext()
changevoice()
Case $text = "what time is it" or $text = "what's the time" or $text = "Give me the time"
$o_speech.Speak ('<rate speed="'& $speed &'">' & "The time is now " & @HOUR & @MIN & '</rate>', 8)
Case $text = "How are you" or $text = "How're you"
$o_speech.Speak ('<rate speed="'& $speed &'">' & "Well I have to listen to this stupid human" & '</rate>', 8)
gettext()
if $text = "what" Then
$o_speech.Speak ('<rate speed="'& $speed &'">' & "Yeah I said it, what are you going to do bitch" & '</rate>', 8)
gettext()
if $text = "kill you" Then $o_speech.Speak ('<rate speed="'& $speed &'">' & "haha, fuck off" & '</rate>', 8)
EndIf
case $text = "memory load"
$mem = MemGetStats()
$memory = $mem[0] & " percent load"
TrayTip ( "memory load", $memory, 5, 1 )
$o_speech.Speak ('<rate speed="'& $speed &'">' & $memory & '</rate>', 8)
case $text = "available memory"
$mem = MemGetStats()
$memory = $mem[2] & " kilobytes available"
TrayTip ( "available memory", $memory, 5, 1 )
$o_speech.Speak ('<rate speed="'& $speed &'">' & $memory & '</rate>', 8)
case else
TrayTip ( $voice.GetAttribute("Name"), $text, 5, 1 )
$o_speech.Speak ('<rate speed="'& $speed &'">' & $text & '</rate>', 8)
EndSelect
WEnd
Func OnAutoItExit ( )
FileDelete ( @ScriptDir & "\voice.tmp" )
EndFunc
Func gettext()
RunWait(@ScriptDir & "\TTSList.exe")
$file = FileOpen ( "voice.tmp", 0 )
$text = FileRead ($file )
FileClose ( $file )
$file = FileOpen ( "voice.tmp", 2 )
FileWrite ($file, "")
FileClose ( $file )
Пример:TTSList его скомпилировать
Код:
;COMPILE THIS TO write.exe
#NoTrayIcon
$RecoContext=ObjCreate("SAPI.SpSharedRecoContext")
$SinkObject=ObjEvent($RecoContext,"MYEvent_")
$Grammar = $RecoContext.CreateGrammar(1)
$Grammar.DictationLoad
$Grammar.DictationSetState(1)
sleep(5000)
$Grammar.DictationSetState(0)
Func MYEvent_Recognition($StreamNumber,$StreamPosition,$RecognitionType,$Result)
$file = FileOpen ( "voice.tmp", 2)
FileWrite ( $file, $Result.PhraseInfo.GetText )
FileClose ( $file )
exit
EndFunc
Источник: Оф.форум
Или вот ещё один пример:
Код:
Global $h_Context = ObjCreate("SAPI.SpInProcRecoContext")
Global $h_Recognizer = $h_Context.Recognizer
Global $h_Grammar = $h_Context.CreateGrammar(1)
$h_Grammar.Dictationload
$h_Grammar.DictationSetState(1)
;Create a token for the default audio input device and set it
Global $h_Category = ObjCreate("SAPI.SpObjectTokenCategory")
$h_Category.SetId("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput\TokenEnums\MMAudioIn\")
Global $h_Token = ObjCreate("SAPI.SpObjectToken")
$h_Token.SetId("HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Speech\AudioInput\TokenEnums\MMAudioIn\")
$h_Recognizer.AudioInput = $h_Token
Global $i_ObjInitialized = 0
Global $h_ObjectEvents = ObjEvent($h_Context, "SpRecEvent_")
If @error Then
ConsoleWrite("ObjEvent error: " & @error & @CRLF)
$i_ObjInitialized = 0
Else
ConsoleWrite("ObjEvent created Successfully!" & @CRLF)
$i_ObjInitialized = 1
EndIf
While $i_ObjInitialized
Sleep(5000)
;Allow the Audio In to finalize processing on the last 5 second capture
$h_Context.Pause
;Resume audio in processing
$h_Context.Resume
;Reset event function allocation (what is this? I think its garbage collection or something, needs clarification)
$h_ObjectEvents = ObjEvent($h_Context, "SpRecEvent_")
WEnd
Func SpRecEvent_Hypothesis($StreamNumber, $StreamPosition, $Result)
ConsoleWrite("Hypothesis(): Hypothized text is: " & $Result.PhraseInfo.GetText & @CRLF)
EndFunc ;==>SpRecEvent_Hypothesis
Func SpRecEvent_Recognition($StreamNumber, $StreamPosition, $RecognitionType, $Result)
$temp = $Result.PhraseInfo.GetText
ConsoleWrite($RecognitionType & "||" & $Result.PhraseInfo.GetText & @CRLF)
Switch $temp
Case 'microsoft'
ShellExecute('www.microsoft.com')
Case 'music'
Run('C:\Program Files (x86)\foobar2000\foobar2000.exe')
Case 'and'
Run('calc.exe')
EndSwitch
EndFunc ;==>SpRecEvent_Recognition
Func SpRecEvent_SoundStart($StreamNumber, $StreamPosition)
ConsoleWrite("Sound Started" & @CRLF)
EndFunc ;==>SpRecEvent_SoundStart
Func SpRecEvent_SoundEnd($StreamNumber, $StreamPosition)
ConsoleWrite("Sound Ended" & @CRLF)
EndFunc ;==>SpRecEvent_SoundEnd
Источник: Оф.форум,там же нашёл ссылку,где есть языки для SDK