111 lines
3.8 KiB
Markdown
111 lines
3.8 KiB
Markdown
# Speech-to-Text + Speaker Diarization Pipeline
|
||
|
||
Локальная система транскрипции аудио с автоматическим разделением спикеров.
|
||
|
||
## Возможности
|
||
|
||
- Распознавание речи (faster-whisper, модель large-v3)
|
||
- Диаризация спикеров (pyannote.audio 3.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-3.1
|
||
> - https://huggingface.co/pyannote/segmentation-3.0
|
||
|
||
## Использование
|
||
|
||
```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.
|