Init repo
This commit is contained in:
commit
3400a8070a
|
|
@ -0,0 +1,12 @@
|
||||||
|
.venv/
|
||||||
|
__pycache__/
|
||||||
|
*.pyc
|
||||||
|
.env
|
||||||
|
output/
|
||||||
|
chunks/
|
||||||
|
*_processed.wav
|
||||||
|
*.egg-info/
|
||||||
|
dist/
|
||||||
|
build/
|
||||||
|
.idea/
|
||||||
|
.vscode/
|
||||||
|
|
@ -0,0 +1,110 @@
|
||||||
|
# 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.
|
||||||
Loading…
Reference in New Issue