0
0 Комментариев

Господа, прошу помощи. Проблема в следующем: Ассистент запускается, происходит цикл прослушки до тех пор, пока он не выполнит команду. Далее ассистент перестаёт слушать. Задача в том, чтобы после выполнения команды прослушка в фоне продолжалась. Один маленький момент: у ассистента присутствует функция открытия Яндекс.радио «radio». После выполнения именно этой команды, он всё ещё прослушивает и выполняет другие команды, но как только он выполнит «ctime» или «stupid1», он перестаёт работать. Подскажите в чём конкретно проблема. Заранее благодарен.

Python 3.7.4

Windows

Сам код:

#Голосовой ассистент Sheldon 2.0
import os
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime

opts = {
«alias»: («шелдон», «купер»),
«tbr»: («скажи», «расскажи», «покажи», «сколько», «произнеси», «который»,»включи»),
«cmds»: {
«ctime»: («текущее время», «сейчас времени», «который час»),
«radio»: («включи музыку»,»воспроизведи радио», «включи радио»),
«stupid1»: («расскажи анекдот», «расскажи историю», «рассмеши меня»)
}
}

#Функции

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’:
# воспроизвести радио
print(«Включаю…»)
os.system(r»C:\\Users\\Alexander^ S\\Desktop\\Радио.url»)

elif cmd == ‘stupid1’:
# рассказать анекдот
speak(«Мой разработчик не научил меня анекдотам … Ха ха ха»)

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’, ‘ru’)

# Попробовать установить предпочтительный голос

for voice in voices:

if voice.name == ‘Aleksandr’:

speak_engine.setProperty(‘voice’, voice.id)

speak(«Шелдон на связи»)
speak(«Что нужно сделать?»)

stop_listening = r.listen_in_background(m, callback)
while True: time.sleep(0.1) # infinity loop


Добавить комментарий