Голосовой помощник срабатывает только один раз, как исправить?
Я решил написать голосового помощника, по видео Хауди Хо. Вроде все нормально, ни каких ошибок нет, но при запуске он отрабатывает только одну мою команду и все. Не знаю в чем проблема, буду благодарен если поможете
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)