Распознавание речи в автономном режиме в qpython3
Я пытался сделать программу qpython, которая использует sl4a.Android.recognizeSpeech
функция. Функциональность отлично работает в Интернете.
В настройках телефона я включил и загрузил распознавание речи в автономном режиме, и теперь Google отлично работает в автономном режиме, но речь на python не работает вообще, поэтому каждый раз предлагается повторить попытку.
Образец кода:
import sl4a
import time
droid = sl4a.Android()
def speak(text):
droid.ttsSpeak(text)
while droid.ttsIsSpeaking()[1] == True:
time.sleep(1)
def listen():
return droid.recognizeSpeech('Speak Now',None,None)
def login():
speak('Passphrase, please')
try:
phrase = listen().result.lower()
except:
phrase = droid.dialogGetPassword('Passphrase').result
print(phrase)
if phrase == 'pork chops':
speak('Welcome')
else:
speak('Access Denied')
exit(0)
login()
1 ответ
Решение
droid.recognizeSpeech("foo", None, None)
возвращает массив с распознанной речью в индексе № 1. Так что, если вы хотите получить к нему доступ, вы должны набрать
return droid.recognizeSpeech("foo", None, None)[1]
На самом деле ничего из вышеперечисленного у меня не сработало. Я решил это так:
x, result, error = droid.recognizeSpeech("Speak")
В переменной result хранится речь, распознанная пользователем.
Пример:
import sl4a
import time
droid = sl4a.Android()
def Speak(talk):
try:
droid.ttsSpeak(talk)
while droid.ttsIsSpeaking()[1] == True:
time.sleep(2)
except:
droid.ttsSpeak("nothing to say")
def listen():
global result,error
time.sleep(1)
x, result, error = droid.recognizeSpeech("Speak")
while True:
try:
listen()
except:
print(error)
try:
if len(str(result)) > 0:
print(result)
if result == "how old are you":
Speak("I'm 1 year old")
elif result is None:
break
else:
Speak("I heard " + result)
except Exception as e:
print(e)
break