|
|
|
import speech_recognition as sr |
|
import pyttsx3 |
|
import pickle |
|
from model import MaestroAssistant |
|
|
|
class VoiceAssistant: |
|
def __init__(self): |
|
self.recognizer = sr.Recognizer() |
|
self.engine = pyttsx3.init() |
|
|
|
|
|
try: |
|
with open('maestro_model.pkl', 'rb') as f: |
|
self.assistant = pickle.load(f) |
|
except: |
|
self.assistant = MaestroAssistant() |
|
|
|
|
|
voices = self.engine.getProperty('voices') |
|
try: |
|
self.engine.setProperty('voice', voices[0].id) |
|
except: |
|
pass |
|
|
|
self.engine.setProperty('rate', 150) |
|
|
|
def listen(self): |
|
|
|
with sr.Microphone() as source: |
|
print("Слушаю...") |
|
self.recognizer.adjust_for_ambient_noise(source) |
|
audio = self.recognizer.listen(source) |
|
|
|
try: |
|
text = self.recognizer.recognize_google(audio, language='ru-RU').lower() |
|
print(f"Распознано: {text}") |
|
return text |
|
except Exception as e: |
|
print(f"Ошибка распознавания: {e}") |
|
return "" |
|
|
|
def speak(self, text): |
|
|
|
print(f"Маэстро: {text}") |
|
self.engine.say(text) |
|
self.engine.runAndWait() |
|
|
|
def run(self): |
|
|
|
print("Ассистент Маэстро активирован! Говорите 'Эй Маэстро' для начала.") |
|
while True: |
|
text = self.listen() |
|
if text.startswith(self.assistant.wake_word): |
|
response = self.assistant.handle_command(text) |
|
if response: |
|
self.speak(response) |
|
else: |
|
self.speak("Не понял команду") |
|
|
|
if __name__ == "__main__": |
|
assistant = VoiceAssistant() |
|
assistant.run() |