@Kenis

Голосовой ассистент принимает команду только 1 раз, как это исправить?

Дело в том, что он работает, но только один раз можно ему что-то сказать, потом он зависает, не останавливается, а просто зависает. А нужно что бы после выполнения первого запроса он продолжал слушать и выполнять команды, как это сделать? Да да, у Хауди Хо. Это не весь код, но вроде только она связана с этим. Также забавно то, что, в момент, когда у меня распознается тип команды и дальше идут действия, которые должны для него выполнится, зависает только если есть команда 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)
  • Вопрос задан
  • 50 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы