Дело в том, что он работает, но только один раз можно ему что-то сказать, потом он зависает, не останавливается, а просто зависает. А нужно что бы после выполнения первого запроса он продолжал слушать и выполнять команды, как это сделать? Да да, у Хауди Хо. Это не весь код, но вроде только она связана с этим. Также забавно то, что, в момент, когда у меня распознается тип команды и дальше идут действия, которые должны для него выполнится, зависает только если есть команда speak(''), а если print или что-то другое, то софт не зависает и работает как нужно
def speak(what):
print(what)
speak_engine.say(what)
speak_engine.runAndWait()
speak_engine.stop()
def callback(recognizer, audio):
try:
voice = recognizer.recognize_google(audio, language = 'ru-RU').lower()
print('[log] Распознано: ' + voice)
if voice.startswith (opts['alias']): #Обращение к помощнику
cmd=voice
for x in opts['alias']:
cmd=cmd.replace(x,'').strip()
for x in opts['tbr']: #Убираем вводное слово
cmd=cmd.replace(x,'').strip()
#распознаем и выполняем команду
cmd = recognize_cmd(cmd)
execute_cmd(cmd['cmd'])
except sr.UnknownValueError:
print('[log] Голос не распознан ')
except sr.RequestError:
print('[log] Неизвестная ошибка с отправкой запроса')
def recognize_cmd(cmd):
RC = {'cmd': '', 'percent': 0}
for c, v in opts['cmds'].items():
for x in v:
vrt = fuzz.ratio(cmd,x)
if vrt > RC['percent']:
RC['cmd'] = c
RC['percent'] = vrt
return RC
def execute_cmd(cmd): # Определяет вид команды
if cmd == 'ctime': #Текущее время
now = datetime.datetime.now()
speak('Сейчас ' + str(now.hour)+':' + str(now.minute))
print('нуу ну')
elif cmd == 'telega':
os.startfile(r'C://Users//zeell//AppData//Roaming//Telegram Desktop//Telegram.exe')
speak('Открыл сэр')
elif cmd == 'osadki':
rain="w.rain"
if rain=="{}":
speak ("Сэр, не беспокойтесь, дождя нет")
else:
speak("Сейчас идет дождь сэр")
elif cmd == 'pogoda':
owm = pyowm.OWM('8cf05dc80ff5b9360a3bd16e44b4148a')
owm.config["language"] = "ru"
observation = owm.weather_manager().weather_at_place("Саранск")
w = observation.weather
temp = w.temperature('celsius')["temp"]
speak('Сейчас '+str(temp) + ' по цельсию сэр')
elif cmd == 'brauzer':
os.startfile(r'C://Users//zeell//AppData//Local//Programs//Opera GX//launcher.exe')
speak('Открыл сэр')
else:
speak('Я не смог распознать команду, повторите еще раз')
print('Я не смог распознать команду, повторите еще раз')
# запуск
r=sr.Recognizer()
m=sr.Microphone(device_index=1)
with m as source:
r.adjust_for_ambient_noise(source)