Делаю голос.ассистента захотел скоротить дорожку их if-elif-else по видосу с ютуба, теперь код воспринимает любую команду как "Привет" и сразу после ответа на "Привет" идёт ответ на "Как дела" (без запроса на команду) и краш.
вот код:
from gtts import gTTS
import random
import time
import playsound
import speech_recognition as sr
import pyautogui as pg
def listen_command():
# obtain audio from the microphone
r = sr.Recognizer()
with sr.Microphone() as source:
print("Скажите вашу команду: ")
r.adjust_for_ambient_noise(source, duration=1)
audio = r.listen(source)
# recognize speech using Google Speech Recognition
try:
our_speech = r.recognize_google(audio, language="ru")
print("Вы сказали: " + our_speech)
return our_speech
except sr.UnknownValueError:
return "Повторите пожалуйста"
except sr.RequestError:
return "ошибка"
def do_this_command(message):
message = message.lower()
commands = {
'Привет' in message: say_message("Здравствуйте, сэр!"),
'как дела' in message: say_message('Всё отлично, у вас?'),
"всё хорошо" in message: say_message("Это отлично"),
"плохо" in message: say_message("Что-то случилось?"),
"Какое сейчас время" in message: say_message("Сейчас:"),
"пока" in message: say_message("Рад был встречи")+exit(),
"передвинь мышь немного вправо" in message: say_message("Как пожелаете" + str(right_mouse_control())),
"передвинь мышь немного влево" in message: say_message("Как пожелаете" + str(left_mouse_control())),
"передвинь мышь немного вверх" in message: say_message("Как пожелаете" + str(up_mouse_control())),
"передвинь мышь немного вниз" in message: say_message("Как пожелаете" + str(down_mouse_control())),
"открой оперу" in message: say_message("Как пожелаете" + str(operaopen())),
"закрой оперу" in message: say_message("Как пожелаете" + str(operaclose())),
"где я" in message: str(pos())
}
return commands.get(message, say_message("Команда не распознана."))
def right_mouse_control():
pg.move(300, 0, 0.5)
def left_mouse_control():
pg.move(-300, 0, 0.5)
def down_mouse_control():
pg.move(0, 300, 0.5)
def up_mouse_control():
pg.move(0, -300, 0.5)
def operaopen():
pg.leftClick(-1872, 249)
pg.doubleClick(-1872, 249, 0.5)
def operaclose():
pg.leftClick(-20, 130)
def say_message(message):
voice = gTTS(message, lang="ru")
file_voice_name = "_audio_" + str(time.time()) + "_" + str(random.randint(0, 100000)) + ".mp3"
voice.save(file_voice_name)
playsound.playsound(file_voice_name)
print("Голосовой ассистент: " + message)
def pos():
print(pg.position())
if __name__ == '__main__':
while True:
command = listen_command()
do_this_command(command)
Вот сама ошибка:
Вы сказали: Привет
Голосовой ассистент: Здравствуйте, сэр!
Голосовой ассистент: Всё отлично, у вас?
Traceback (most recent call last):
File "C:\Users\User\PycharmProjects\Jarviss\main.py", line 87, in <module>
do_this_command(command)
File "C:\Users\User\PycharmProjects\Jarviss\main.py", line 32, in do_this_command
"всё хорошо" in message: say_message(' '),
File "C:\Users\User\PycharmProjects\Jarviss\main.py", line 75, in say_message
voice.save(file_voice_name)
File "C:\Users\User\PycharmProjects\Jarviss\venv\lib\site-packages\gtts\tts.py", line 313, in save
self.write_to_fp(f)
File "C:\Users\User\PycharmProjects\Jarviss\venv\lib\site-packages\gtts\tts.py", line 259, in write_to_fp
prepared_requests = self._prepare_requests()
File "C:\Users\User\PycharmProjects\Jarviss\venv\lib\site-packages\gtts\tts.py", line 204, in _prepare_requests
assert text_parts, 'No text to send to TTS API'
AssertionError: No text to send to TTS API
Process finished with exit code 1