From 3400a8070a91c72b2ba1dc7484e4ec9fb02ae1a5 Mon Sep 17 00:00:00 2001 From: itqop Date: Thu, 19 Feb 2026 03:21:21 +0300 Subject: [PATCH] Init repo --- .gitignore | 12 ++++++ README.md | 110 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 122 insertions(+) create mode 100644 .gitignore create mode 100644 README.md diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..49e347f --- /dev/null +++ b/.gitignore @@ -0,0 +1,12 @@ +.venv/ +__pycache__/ +*.pyc +.env +output/ +chunks/ +*_processed.wav +*.egg-info/ +dist/ +build/ +.idea/ +.vscode/ diff --git a/README.md b/README.md new file mode 100644 index 0000000..3efad96 --- /dev/null +++ b/README.md @@ -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.