Вопрос Крашит голосовой ассистент

Начинающий
Статус
Оффлайн
Регистрация
9 Мар 2019
Сообщения
26
Реакции[?]
4
Поинты[?]
0
qq all. В общем, захотел я сделать себе персонального голосового ассистента (хз зачем просто делать нечего). По итогу ctrl+c, ctrl+v настроил под себя и тот сурс, который я вставил, отвечал только один раз и больше не отвечал. Я сделал так, чтобы он отвечал много раз, но при старте он иногда крашит, а иногда нет:
NVIDIA_Share_qMpN3CMaxw.png

Товарищи питонисты, выручайте.
Сам код:


Python:
import os
import time
import speech_recognition as sr
from fuzzywuzzy import fuzz
import pyttsx3
import datetime
import eel

# настройки

token = "."

opts = {
    "alias": ('слышь', 'пёрл', 'перлуша', 'перловка', 'perl'),
    "tbr": ('скажи','расскажи','сколько','запусти'),
    "cmds": {
        "ctime": ('текущее время','сейчас времени','который час'),
        "radio": ('включи музыку','воспроизведи радио','включи радио'),
        "stupid1": ('расскажи анекдот','рассмеши меня','ты знаешь анекдоты'),
        "csgo":('ксго', 'cs go', 'csgo'),
        "steam":('стим', 'steam'),
        "discord":('дискорд', 'дс', 'discord', 'ds'),
        "taskmgr":('диспетчер', 'диспетчер задач')
    }
}

# функции
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("D:\\perl\\perl\\perl\\res\\radio_record.m3u")
   
    elif cmd == 'stupid1':
            # рассказать анекдот
            speak("Я не знаю шуток, клоун")

    elif cmd == 'csgo':
            #запуcтить кс
            speak("Запускаю ксго")
            os.system('D:/Steam/steamapps/common/"Counter-Strike Global Offensive"/csgo.exe')

    elif cmd == 'steam':
            #запустить стим
            speak("Запускаю стим")
            os.system('D:/Steam/steam.exe')

    elif cmd == 'discord':
            #запустить дискорд
            speak("Запускаю дискорд")
            os.system('C:/Users/pk/AppData/Local/Discord/app-0.0.308/Discord.exe')

    elif cmd == 'taskmgr':
            #запустить диспетчер задач
            speak("Запускаю диспетчер задач")
            os.system('taskmgr.exe')

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

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

with sr.Microphone(device_index = 1) as source:
    r.adjust_for_ambient_noise(source)

speak_engine = pyttsx3.init()

# Смена голоса
voices = speak_engine.getProperty('voices')
speak_engine.setProperty('voice', voices[1].id)

# forced cmd test
#speak("looooool")

speak("Добро пожаловать, сэр")
speak("Пёрл слушает")

stop_listening = r.listen_in_background(sr.Microphone(device_index = 1), callback)
while True:
    with sr.Microphone(device_index = 1) as source:
        audio = r.listen(source)
        callback(r, audio)
    time.sleep(5)
 
Сверху Снизу