/
AxeOn
/
ProjectAi
Обзор
Документация
Войти
/
AxeOn
/
ProjectAi
Код
Запросы
0
Задачи
Вики
Пакеты
0
Релизы
0
CI/CD
Аналитика
Безопасность
master
services.py
90 строк
3 KB
Дмитрий
chore: base state before refactoring (office_planner_v5)
25 апр 2026, 15:01
25 апр 2026, 15:01
bc896b2
Код
Авторство
О чём код?
# services.py """ Дополнительные сервисы для приложения Содержит VoiceService для голосового ввода. """ import threading import logging logger = logging.getLogger(__name__) # Попытка импорта библиотек для голосового ввода try: import speech_recognition as sr SR_AVAILABLE = True except ImportError: SR_AVAILABLE = False logger.warning("speech_recognition not available, voice input disabled") class VoiceService: """ Сервис голосового ввода Требует установки: pip install SpeechRecognition pyaudio """ def __init__(self, on_text_callback, on_status_callback): """ Args: on_text_callback: Функция для обработки распознанного текста on_status_callback: Функция для обновления статуса """ self.on_text = on_text_callback self.on_status = on_status_callback self.is_recording = False self.recognizer = sr.Recognizer() if SR_AVAILABLE else None def toggle_record(self): """Переключить запись (вкл/выкл)""" if not SR_AVAILABLE: self.on_status("❌ Библиотека SpeechRecognition не установлена", True) logger.error("Voice input not available: install speech_recognition") return if self.is_recording: # Остановить запись self.is_recording = False self.on_status("⏳ Обработка...") else: # Начать запись self.is_recording = True self.on_status("🎤 Запись...", False) threading.Thread(target=self._record_thread, daemon=True).start() def _record_thread(self): """Поток для записи и распознавания""" try: with sr.Microphone() as source: # Калибровка под окружающий шум self.recognizer.adjust_for_ambient_noise(source, duration=0.5) # Запись audio = self.recognizer.listen(source, timeout=10, phrase_time_limit=10) self.is_recording = False self.on_status("⏳ Распознавание...") # Распознавание через Google text = self.recognizer.recognize_google(audio, language="ru-RU") logger.info(f"Voice recognized: {text}") self.on_text(text) self.on_status("✅ Готово") except sr.WaitTimeoutError: self.on_status("⏱ Тайм-аут записи", True) logger.warning("Voice recording timeout") except sr.UnknownValueError: self.on_status("❓ Не удалось распознать речь", True) logger.warning("Could not understand audio") except sr.RequestError as e: self.on_status(f"❌ Ошибка сервиса: {e}", True) logger.error(f"Voice recognition service error: {e}") except Exception as e: self.on_status(f"❌ Ошибка: {e}", True) logger.error(f"Voice service error: {e}", exc_info=True) finally: self.is_recording = False