Голосовой помощник срабатывает только один раз, как исправить?

Я решил написать голосового помощника, по видео Хауди Хо. Вроде все нормально, ни каких ошибок нет, но при запуске он отрабатывает только одну мою команду и все. Не знаю в чем проблема, буду благодарен если поможете


import os
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import webbrowser
import datetime
from pyowm.owm import OWM
from pyowm.utils.config import get_default_config

opts = {
    "alias": ('марка','марк', 'маркуша', 'марик',  'мастер'),
    "tbr": ('скажи', 'расскажи', 'покажи', 'сколько', 'произнеси', 'включи', 'запусти', 'открой'),
    "cmds": {
        "ctime": ('текущее время', 'сейчас времени', 'который час', 'произнеси', 'запусти бетон', 'включи бетон'),
        "stupid1": ('расскажи анекдот', 'рассмеши меня', 'покажи', 'ты знаешь  анекдоты'),
        "youtube": ('открой ютуб', 'открой youtube', 'запусти ютуб', 'запусти youtube'),
        "discord": ('открой дискорд','запусти дискорд', 'открой discord', 'запусти discord'),
        "hello": ('привет', 'здарова', 'здравствуй', 'ало', 'ку'),
        "vk": ('открой вк','запусти вк', 'открой vk', 'запусти vk', 'открой вконтакте', 'запусти вконтакте'),
        "weather": ('какая погода сейчас', "сколько градусов на улице", "скажи погоду"),
        "music": ('включи музыку', 'запусти музыку', 'включи музон', 'включи мою музыку'),
        "python": ('запусти питон', 'открой питон',  'запусти python', 'открой python')
    }
}

# функции
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.RequestError as e:
        print("[Марк] Неизвестная ошибка!")


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))

    elif cmd == "hello":
        speak("Здравствуй! Мой господин")

    elif cmd == 'discord':
        # дискорд
        os.system('C:\\Users\\aleks\\AppData\\Roaming\\Microsoft\\Windows\\"Start Menu"\\Programs\\"Discord Inc"\\Discord.lnk')

    elif cmd == 'python':
        # питон
        os.system('C:\\"Program Files"\\JetBrains\\"PyCharm Community Edition 2021.3"\\bin\\pycharm64.exe')

    elif cmd == 'stupid1':
        # рассказать анекдот
        speak("знаешь почему в африке много болезний? Таблетки нечем запивать.  Ха-ха")

    elif cmd == 'youtube':
        # открыть ютуб
        webbrowser.open('https://www.youtube.com', new=0, autoraise=True)
        speak("Открываю ютуб")

    elif cmd == 'vk':
        # открыть вк
        webbrowser.open('https://vk.com', new=0, autoraise=True)
        speak("Открываю вконтакте")

    elif cmd == 'music':
        # включить музыку
        webbrowser.open('https://music.apple.com/library/songs', new=0, autoraise=True)
        speak("Открыл ваш плей-лист музыки")

    elif cmd == "weather":
        # погда
        config_dict = get_default_config()
        config_dict['language'] = 'ru'
        owm = OWM('', config_dict)
        speak("Программа еще не доступна! " )
        w = owm.weather_manager()

    else:
        print('Команда не распознана, повторите!')

# запуск
r = sr.Recognizer()
m = sr.Microphone(device_index = 1)

with m as source:
    r.adjust_for_ambient_noise(source)

speak_engine = pyttsx3.init()

speak("Добрый день!")

stop_listening = r.listen_in_background(m, callback)

while True:
    time.sleep(0.1)


Ответы (0 шт):