Files
Blind/docs/stack-analysis.md
2026-09-11 19:47:15 +03:00

7.5 KiB
Raw Permalink Blame History

Анализ стека — интерфейс для незрячего (AI Blind)

Дата: 2026-09-10. Принцип: только бесплатные / open-source библиотеки, каждый модуль — законченная проверяемая единица. Целевая платформа — Windows (ПК отца), разработка — Linux/кроссплатформенный код.


1. Модуль STT (речь → текст)

Кандидат Версия Лицензия Русский Скорость CPU Комментарий
faster-whisper 1.2.1 (окт 2025) MIT отлично small/int8: 13 мин аудио ≈ 1 мин 42 с (i7-12700K) → короткая фраза 5 с ≈ 1–2 с FFmpeg не нужен (PyAV внутри), Silero-VAD встроен, модель качается с HuggingFace автоматически
Vosk стабильная Apache 2.0 (small-ru 45 МБ WER ~2230%, big-ru 1.8 ГБ WER ~511%) быстрее Whisper, стриминг Запасной вариант для слабого ПК; точность small ниже
openai-whisper / transformers MIT медленно на CPU Не берём — быстрее-whisper строго лучше

Вердикт: faster-whisper, модель small или base c compute_type="int8" на CPU.

  • Для голосовых фраз 2–15 с задержка 1–3 с — приемлемо.
  • Размер: small ≈ 460 МБ (int8 ~150 МБ в RAM), base ≈ 145 МБ.
  • Фолбэк: Vosk small-ru, если ПК отца слабый (замерим на Module 1 и решим).

2. Модуль TTS (текст → звук)

Кандидат Версия Лицензия Русский Онлайн/офлайн Комментарий
edge-tts 7.2.8 (мар 2026) LGPL ru-RU-SvetlanaNeural / DmitryNeural онлайн (бесплатный сервис MS, без ключа) rate/volume/pitch настраиваются → «−15% скорости» из ТЗ поддерживается нативно
Piper (piper-tts) 1.8.0 (активно развивается, переехал в OHF-Voice/piper1-gpl) GPL-3.0 голоса ru_RU (denis, dmitri, irina, ruslan) офлайн Фолбэк: работает без интернета, быстрый на CPU

Вердикт: edge-tts основной + Piper фолбэк. Риск edge-tts: неофициальный эндпоинт Microsoft, исторически ломался (403). Архитектура TTS-модуля сразу делается с интерфейсом «провайдер», чтобы переключение на Piper было правкой конфига.

3. Модуль записи/воспроизведения звука

  • sounddevice 0.5.6 (авг 2026, свежий), MIT, PortAudio в комплекте, numpy-массивы.
    • Запись push-to-talk: буфер в RAM пока удерживается клавиша → float32/int16 → wav в памяти.
    • Воспроизведение: sd.play() / sd.stop() — мгновенная остановка для клавиши «Замолчи». Идеально.
  • soundfile — для сохранения wav при отладке.
  • VAD: silero-vad 6.2.1 (фев 2026), MIT, ~2 МБ, <1 мс на чанк 30 мс, ONNX-режим. Использование: отрезать тишину перед STT (меньше галлюцинаций Whisper), позже — режим «свободного разговора».

4. Модуль горячих клавиш

Кандидат Статус Windows Suppression Комментарий
keyboard 0.13.5 мёртв с 2020, но стабильный и широко используемый глобальный хук без админ-прав (только Windows) Умеет press/hold/release события — ровно то, что нужно push-to-talk
pynput живой подавления нет Запасной вариант

Вердикт: keyboard (раскладка: дублируем NumPad и основные клавиши: Num0/Пробел — слушать, NumDel/Esc — замолчать, NumEnter/Enter — повторить). Риск: библиотека не развивается — при проблемах переходим на pynput или WinAPI-хук; API модуля изолируем.

5. Модуль «мозга» (LLM)

  • OpenRouter через openai-совместимый клиент (base_url = https://openrouter.ai/api/v1) — без новых зависимостей. Модель выбирается в конфиге.
  • Очистка Markdown — собственный regex-модуль (звёздочки, решётки, списки, ссылки).
  • Системный промпт: «отвечай коротко, простыми предложениями, без списков и разметки» — это дешевле, чем чистка сложного текста.

6. Модуль Telegram

  • aiogram 3.x (актуальная), отдельный asyncio-поток/задача.
  • События: входящее сообщение от сына → озвучка; ответ отца (надиктован через основной цикл) → отправка.

7. Прочее

  • Earcons (звуковые маркеры): генерируем свои короткие wav (numpy → файлы в assets/earcons/), играем через sounddevice. Никаких внешних ассетов не нужно.
  • Сборка для Windows: PyInstaller → один exe. Проверим на Module 7.
  • Конфиг: TOML/JSON + .env для ключей (OPENROUTER_API_KEY, TG_BOT_TOKEN).

Итоговый стек v1

faster-whisper==1.2.1      # STT (fallback: vosk)
edge-tts==7.2.8            # TTS (fallback: piper-tts==1.8.0)
sounddevice==0.5.6         # запись/воспроизведение
soundfile                  # wav I/O
numpy                      # аудио-буферы, earcons
silero-vad==6.2.1          # VAD (опционально)
keyboard==0.13.5           # глобальные клавиши (Windows)
openai (client)            # OpenRouter
aiogram>=3                 # Telegram
pyinstaller                # упаковка exe (этап сборки)

Python ≥ 3.9 (лучше 3.11/3.12). Все пакеты кроссплатформенные, разработку ведём здесь (Linux), деплой — на Windows (звук/клавиши тестируются там).

Риски и смягчение

  1. edge-tts отвалится → Piper фолбэк встроен в дизайн модуля.
  2. keyboard мёртв → работает сегодня; изоляция API, запасной pynput.
  3. Whisper медленный на слабом ПК → замер на Module 1; если плохо — Vosk small-ru.
  4. Задержка пайплайна STT→LLM→TTS ≈ 1+2+1 с → смягчаем: короткие фразы (base-модель, дешёвая быстрая LLM, edge-tts), звуковой маркер «думаю» сразу после отпускания клавиши.