проблема с голосовым ассистентом python

Теперь вылетает ошибка с чем это связано и как это исправить???

C:\Users\ПК\Desktop\python>python jarvis.py
Доброе утро
Слушаю
[log] Распознано: команда номер 1
Exception in thread Thread-1:
Traceback (most recent call last):
  File "C:\Users\ПК\AppData\Local\Programs\Python\Python39\lib\threading.py", line 973, in _bootstrap_inner
    self.run()
  File "C:\Users\ПК\AppData\Local\Programs\Python\Python39\lib\threading.py", line 910, in run
    self._target(*self._args, **self._kwargs)
  File "C:\Users\ПК\AppData\Local\Programs\Python\Python39\lib\site-packages\speech_recognition\__init__.py", line 697, in threaded_listen
    if running[0]: callback(self, audio)
  File "C:\Users\ПК\Desktop\python\jarvis.py", line 27, in callback
    voice = recognizer.recognize_google(audio, language = "ru-RU").lower()
  File "C:\Users\ПК\AppData\Local\Programs\Python\Python39\lib\site-packages\speech_recognition\__init__.py", line 858, in recognize_google
    if not isinstance(actual_result, dict) or len(actual_result.get("alternative", [])) == 0: raise UnknownValueError()
speech_recognition.UnknownValueError

import os
import time
import speech_recognition as sr 
from fuzzywuzzy import fuzz 
import pyttsx3
import datetime 
import webbrowser

opts = {
        "alias": ("фейт","фейти","фэйд","фейд","фенди"),
        "tbr": ("скажи","включи","покажи","сколько","произнеси"),
        "cmds": {
            "ctime":("время","сколько время"),
            "c1":("протокол номер один","команда номер один"),
            "c2":("протокол номер два","команда номер два"),
            "c3":("протокол номер три","команда номер три")
        }
}

def speak(what):
    print( what )
    speak_engine.say( what )
    speak_engine.runAndWait()
    speak_engine.stop()
    
def callback(recognizer, audio):
    voice = recognizer.recognize_google(audio, language = "ru-RU").lower()
    print("[log] Распознано: " + voice)

    try:

        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:
        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 exetute_cmd(cmd):
    if cmd == "ctime":
        now = datetime.datetime.now()
        speak("Сейчас" + str(now.hour) + ":" + str(now.minute))

    elif cmd =="c1":
        webbrowser.open ('https://gdz.ru', new=2)
        speak("Секунду...")

    elif cmd =="c2":
        webbrowser.open ('https://www.youtube.com', new=2)
        speak("Секунду...")

    elif cmd =="c3":
        webbrowser.open ('https://vk.com/feed', new=2)
        speak("Секунду...")

    else:
        print("команда не распознана")


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

with m as sourse:
    r.adjust_for_ambient_noise(sourse)

speak_engine = pyttsx3.init()

voices = speak_engine.getProperty("voices")
speak_engine.setProperty("voice",voices[1].id)

speak("Доброе утро")
speak("Слушаю")


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

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

Автор решения: Bor-is-luv

Весь рабочий код находится внутри функций. Чтобы они начали работать, их надо вызвать. Например, стоит добавить что-то типа такого:

if __name__ == "__main__":
    # здесь надо определить переменную cmd
    execute_cmd(cmd)
→ Ссылка