| 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() |