проблема с голосовым ассистентом 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)