transcribe-interview/README.md

111 lines
3.8 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# 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.