Что нового

Распознование речи и вызов функций из скрипта

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
Версия AutoIt: 3.

Описание: Приветствую всех,нашёл исходник для распознавания речи и вызова функций из скрипта по определённым условиям,проверил - работает,но 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
 
Автор
S

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
Кто знает,где русский для SDK найти?
 

CreatoR

Must AutoIt!
Команда форума
Администратор
Сообщения
8,673
Репутация
2,486
Sergey2210 [?]
Знает кто нибудь ответ?
Не нужно так часто поднимать тему. Тем более таким нетрадиционным способом (удаление своего сообщения и отправка точно такого же).

Если кто то заинтересуется в твоей теме, то обязательно ответит, наберись терпения.
 

kaster

Мой Аватар, он лучший самый
Команда форума
Глобальный модератор
Сообщения
4,020
Репутация
626
надо полагать никто. за столько времени уже ответили бы
 
Автор
S

Sergey2210

Осваивающий
Сообщения
263
Репутация
31
Ясно,буду ждать,вроде бы где то слышал что русскоязычный модуль скоро уже выпустят,да и в тех поддержу отправил сообщение на www.microsoft.ru ....
 
Верх