transcribe-interview/README.md

3.8 KiB
Raw Permalink Blame History

Speech-to-Text + Speaker Diarization Pipeline

Локальная система транскрипции аудио с автоматическим разделением спикеров.

Возможности

  • Распознавание речи (faster-whisper, модель large-v3)
  • Диаризация спикеров (pyannote.audio community-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

Установка

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 Необходимо принять условия использования моделей:

Использование

# Базовый запуск (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 — структурированные данные:

[
  {
    "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.