Init repo

This commit is contained in:
itqop 2026-02-19 03:21:21 +03:00
commit 3400a8070a
2 changed files with 122 additions and 0 deletions

12
.gitignore vendored Normal file
View File

@ -0,0 +1,12 @@
.venv/
__pycache__/
*.pyc
.env
output/
chunks/
*_processed.wav
*.egg-info/
dist/
build/
.idea/
.vscode/

110
README.md Normal file
View File

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