# Speech-to-Text + Speaker Diarization Pipeline Локальная система транскрипции аудио с автоматическим разделением спикеров. ## Возможности - Распознавание речи (faster-whisper, модель large-v3) - Диаризация спикеров (pyannote.audio community-1) - Поддержка форматов: `.m4a`, `.mp3`, `.wav`, `.aac` - Аудио до 3 часов / 2 ГБ - Автоматический чанкинг для длинных записей (>30 мин) - Предобработка: нормализация громкости, удаление DC offset, конвертация в mono 16kHz - Экспорт в `.txt` и `.json` - Полностью локальный запуск на GPU ## Требования - Python 3.10+ - ffmpeg (установлен и доступен в PATH) - CUDA-совместимая GPU (или CPU для тестов) - HuggingFace токен с доступом к моделям pyannote ## Установка ```bash python -m venv .venv source .venv/bin/activate # Linux/Mac # .venv\Scripts\activate # Windows pip install -r requirements.txt ``` Создайте `.env` в корне проекта: ``` HF_TOKEN=hf_your_token_here ``` > Для получения токена: https://huggingface.co/settings/tokens > Необходимо принять условия использования моделей: > - https://huggingface.co/pyannote/speaker-diarization-community-1 ## Использование ```bash # Базовый запуск (GPU, large-v3) python transcriber.py interview.m4a --output ./result --format txt json # Локальный тест (CPU, маленькая модель) python transcriber.py test.wav --output ./result --model tiny --device cpu # С ограничением спикеров python transcriber.py meeting.mp3 --max-speakers 3 --min-speakers 2 # Подробный лог python transcriber.py audio.aac -v ``` ## Параметры CLI | Параметр | По умолчанию | Описание | |---|---|---| | `input` | — | Путь к аудиофайлу | | `--output` | `./output` | Директория для результатов | | `--model` | `large-v3` | Модель Whisper (`tiny`, `base`, `small`, `medium`, `large-v3`) | | `--device` | `cuda` | Устройство (`cuda`, `cpu`) | | `--language` | `ru` | Язык распознавания | | `--beam-size` | `5` | Ширина beam search | | `--vad` | `on` | VAD фильтрация (`on`, `off`) | | `--max-speakers` | авто | Максимум спикеров | | `--min-speakers` | авто | Минимум спикеров | | `--format` | `txt json` | Форматы экспорта | | `--pause-threshold` | `1.5` | Макс. пауза для объединения сегментов (сек) | | `--chunk-duration` | `1800` | Макс. длина чанка (сек) | | `--hf-token` | из `.env` | HuggingFace токен | | `-v` | — | Подробное логирование | ## Форматы вывода **TXT** — читаемый диалог: ``` [Speaker 1] Здравствуйте, расскажите о себе. [Speaker 2] Добрый день, меня зовут Иван... ``` **JSON** — структурированные данные: ```json [ { "speaker": "Speaker 1", "start": 0.52, "end": 3.18, "text": "Здравствуйте, расскажите о себе." } ] ``` ## Архитектура ``` Input → Preprocess (ffmpeg) → Chunking → ASR (Whisper) → Diarization (pyannote) → Alignment → Merge → Export ``` ## Производительность На GPU уровня RTX 3090: ~20 мин на 1.5 часа аудио. VRAM ≤ 8GB, RAM ≤ 16GB.