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