Ошибка в голосовом помощнике, Python
#Кузя
import os
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
from fuzzywuzzy import process
import pyttsx3
import datetime
opts = {
'alias': ('кузя'),
'tbr': {'объясни', 'скажи', 'расскажи', 'объяснуй', 'произнеси', 'сколько', ''},
'cmds': {
'ctime': ('который час', 'время', 'время', 'време', 'сколько время', 'сколько сейчас времени', 'какой сейчас час'),
'radio': ('включи музыку', 'радио', 'включи радио', 'воспроизведи радио')
}
}
# Функции
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 as e:
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))
elif cmd == 'radio':
# Включается песня
os.system('E:\\Users\\Wottsan\\Desktop\\Кеша\\Love.mp3')
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()
#Если есть скачанный голос
# voices = speak_engine.getProperty('voices')
# speak_engine.setProperty('voice', voices[4].id)
speak('Слушаю...')
stop_listening = r.listen_in_background(m, callback)
while True: time.sleep(0.1)# infinite Loop
Ошибка заключается в том, что после команды 'speak('Сейчас ' + str(now.hour) + ':' + str(now.minute))' Код перестаёт слушать, тоесть, больше не выполняет другие команды
P.S После ' os.system('E:\Users\Wottsan\Desktop\Кеша\Love.mp3') ' Код может выполнять/повторять другие команды