Ошибка reportUndefinedVariable при вызове функций через переменную (внутри функции)
Уверен, что поиск ответа на мой вопрос будет очень легким для многих, но я относительно новичок. После написания 4 более-менее серьезных Telegram Ботов я решил написать голосового ассистента, как отдельный серьезный проект, не без помощи Интернета, конечно. Изначально функционал STT выполнялся через Speech Recognition, но сменил его на модуль Vosk. Всё отлично, быстро, offline, но столкнулся с ошибкой, наверное, начальной школы - основ ЯП Python. И встрял. Я буду сильно благодарен любой помощи!
import json, pyaudio
from vosk import Model, KaldiRecognizer
import speech_recognition as sr
from fuzzywuzzy import fuzz
settings = {
"nm": ("ассистент", "ассист", "осис", "азиз", "аси", "асюш", "asis", "assist", "брат", "родной", "тис", "алиса", "а siri", "siri"),
"commands": {
"что ты умеешь": ("что ты умеешь", "что ты можешь", "какие у тебя функции")
model = Model("model")
device = 1 # в ориг. коде: int(index_input)
rec = KaldiRecognizer(model, 16000)
p = pyaudio.PyAudio()
stream = p.open(format=pyaudio.paInt16, channels=1, rate=16000, input=True,
frames_per_buffer=80000, input_device_index=device)
stream.start_stream()
print("\n▤ Всё готово!\n➢ Приятного общения!")
def callback():
while True:
data = stream.read(4000, exception_on_overflow=False)
if (rec.AcceptWaveform(data)) and (len(data)) > 0:
answer = json.loads(rec.Result())
if answer["text"]:
yield answer["text"]
for voice in callback():
print(voice)
if voice.startswith(settings["nm"]):
print(f"Вы: {voice.capitalize()}")
cmd = voice
for x in settings["nm"]:
cmd = cmd.replace(x, "").strip()
cmd = rec_cmd(cmd) # ОШИБКА ТУТ! - (reportUndefinedVariable)
cmd = commands_execute(cmd) # ОШИБКА ТУТ! - (reportUndefinedVariable)
def rec_cmd(cmd):
rc = {"cmd": "", "percent": 0}
for c, v in settings["commands"].items():
for i in v:
vrt = fuzz.ratio(cmd, i)
if vrt > rc["percent"]:
rc["cmd"] = c
rc["percent"] = vrt
return rc
def commands_execute(cmd):
if cmd == "что ты умеешь":
print("\n● Ассистент: Открывать: Google, Яндекс, Youtube. Показывать погоду в Вашем городе...")
print("★ Ассистент: Включать: Радиостанции (4) - DFM, Русское Радио, Like FM, Love Radio...")
else:
print("\n✖ Ассистент: Мне жаль, я не знаю такую команду...\n")