Skip to content

semnavmeleon/GigaAM-Transcriber

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

8 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

GigaAM Transcriber

Локальное веб-приложение для транскрибации аудио на русском языке. Работает полностью офлайн после первоначальной загрузки модели. Никакие данные не отправляются на внешние серверы.

Используемая модель: GigaAM v2 от SberDevices — одна из лучших open-source моделей для распознавания русской речи.

Python FastAPI License


Содержание


Возможности

  • Транскрибация аудио на русском языке с высокой точностью
  • Поддержка аудиоформатов: MP3, WAV, M4A, OGG, FLAC, OPUS
  • Поддержка видеоформатов: MP4, MKV, AVI, MOV, WEBM, TS, M2TS — аудиодорожка извлекается автоматически
  • До 10 файлов за раз, до 500 МБ каждый
  • Выбор модели: v2 CTC (быстрее) или v2 RNNT (точнее)
  • Три формата вывода: TXT, SRT (субтитры с тайм-кодами), JSON
  • VAD-сплит — умная нарезка по паузам через Silero VAD, не режет слова
  • Опциональная расстановка пунктуации через deepmultilingualpunctuation
  • GPU-ускорение через CUDA — в 5–15× быстрее CPU (если есть NVIDIA GPU)
  • Декодирование аудио без промежуточных файлов — ffmpeg пишет прямо в RAM, экономит дисковое пространство
  • Инлайн-просмотр результатов, копирование и скачивание
  • Полностью локальный инференс — данные не покидают компьютер
  • Тёмный минималистичный интерфейс

Системные требования

Компонент Минимум Рекомендуется
Python 3.11 3.11 или 3.12
RAM 4 ГБ 8 ГБ
Диск 2 ГБ свободно 5 ГБ
CPU любой x86-64 4+ ядра
GPU не нужен NVIDIA с CUDA 12.x, от 4 ГБ VRAM
OS Windows 10, macOS 12, Ubuntu 20.04

Важно: Python 3.13 и 3.14 не поддерживаются — часть ML-зависимостей не имеет совместимых wheel-пакетов.


Установка

Windows

Шаг 1 — Установить Python 3.11

winget install Python.Python.3.11

Проверьте:

py -3.11 --version
# Python 3.11.x

Шаг 2 — Установить ffmpeg

winget install Gyan.FFmpeg

После установки закройте и откройте PowerShell заново, затем проверьте:

ffmpeg -version

Если winget недоступен — скачайте вручную с gyan.dev/ffmpeg/builds, распакуйте в C:\ffmpeg и добавьте C:\ffmpeg\bin в PATH.

Шаг 3 — Клонировать репозиторий

git clone https://github.com/ВАШ_ЛОГИН/gigaam-transcriber.git
cd gigaam-transcriber

Шаг 4 — Создать виртуальное окружение

py -3.11 -m venv .venv
.venv\Scripts\activate

Шаг 5 — Установить PyTorch

Без GPU (CPU-only):

pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu

С NVIDIA GPU — сначала узнайте версию CUDA командой nvidia-smi (строка CUDA Version), затем:

# CUDA 12.4 (рекомендуется если драйвер поддерживает CUDA 12.x)
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu124

# CUDA 12.1
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu121

# CUDA 11.8
pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu118

Драйвер всегда обратно совместим со старыми версиями CUDA, поэтому cu124 подходит для любого драйвера с поддержкой CUDA 12.x и выше.

Шаг 6 — Установить остальные зависимости

pip install -r requirements.txt

Шаг 7 — (Опционально) Пунктуация

Для автоматической расстановки запятых и точек установите отдельную модель (~450 МБ):

pip install deepmultilingualpunctuation

После установки в настройках появится переключатель «Расставить пунктуацию».

Шаг 8 — Создать файл конфигурации

copy .env.example .env

macOS

Шаг 1 — Установить Homebrew (если нет)

/bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/HEAD/install.sh)"

Шаг 2 — Установить Python 3.11 и ffmpeg

brew install python@3.11 ffmpeg

Шаг 3 — Клонировать репозиторий и создать окружение

git clone https://github.com/ВАШ_ЛОГИН/gigaam-transcriber.git
cd gigaam-transcriber

python3.11 -m venv .venv
source .venv/bin/activate

Шаг 4 — Установить зависимости

pip install torch torchaudio
pip install -r requirements.txt

Шаг 5 — Создать конфиг

cp .env.example .env

Linux (Ubuntu / Debian)

Шаг 1 — Установить системные зависимости

sudo apt update
sudo apt install -y python3.11 python3.11-venv python3-pip ffmpeg git

Шаг 2 — Клонировать репозиторий и создать окружение

git clone https://github.com/ВАШ_ЛОГИН/gigaam-transcriber.git
cd gigaam-transcriber

python3.11 -m venv .venv
source .venv/bin/activate

Шаг 3 — Установить PyTorch и зависимости

CPU-only:

pip install torch torchaudio --index-url https://download.pytorch.org/whl/cpu
pip install -r requirements.txt

С NVIDIA GPU:

pip install torch torchaudio --index-url https://download.pytorch.org/whl/cu124
pip install -r requirements.txt

Шаг 4 — Создать конфиг

cp .env.example .env

Запуск

# Windows
.venv\Scripts\activate

# macOS / Linux
source .venv/bin/activate
uvicorn backend.main:app --host localhost --port 8000 --reload

Откройте браузер: http://localhost:8000

Флаг --reload перезапускает сервер при изменении файлов. Для продакшена уберите его и используйте --workers 1.


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

Этап 1 — Установка модели

При первом открытии нажмите «Скачать и установить модель». Модель (~900 МБ) загрузится один раз и сохранится в ~/.cache/gigaam. При следующих запусках загрузка из кэша происходит автоматически.

Можно выбрать вариант модели до загрузки:

  • v2 CTC — быстрее, меньше VRAM, рекомендуется для большинства задач
  • v2 RNNT — чуть точнее, особенно на сложных записях, немного медленнее

Оба варианта загружаются независимо и хранятся в кэше. Уже скачанные отмечены бейджем ✓ кэш.

Этап 2 — Загрузка файлов и настройки

Перетащите файлы в зону загрузки или нажмите для выбора. Поддерживаются аудио и видео:

mp3 wav m4a ogg flac opus mp4 mkv avi mov webm ts m2ts

Ограничения: до 10 файлов, до 500 МБ каждый.

Этап 3 — Результаты

После завершения каждый файл показывается карточкой с кнопками копирования и скачивания. Текст можно развернуть прямо на странице.


Настройки

Параметр Описание
Модель v2 CTC или v2 RNNT. Смена модели перезапускает воркеры (несколько секунд)
Формат вывода .txt — сплошной текст; .srt — субтитры с тайм-кодами; .json — структурированные данные
Размер чанка На сколько секунд нарезать аудио. 5–20 с. Меньше = точнее на паузах
VAD-сплит Умная нарезка по паузам через Silero VAD. Рекомендуется
Пунктуация Расстановка запятых и точек после транскрибации. Требует отдельной установки
Устройство CPU или CUDA. Отображается только если PyTorch обнаружил совместимую NVIDIA GPU

Пунктуация

GigaAM транскрибирует речь без знаков препинания. Для их расстановки используется отдельная модель deepmultilingualpunctuation на базе XLM-RoBERTa, поддерживающая русский язык.

Установка:

pip install deepmultilingualpunctuation

После установки (~450 МБ) в панели настроек появится переключатель «Расставить пунктуацию». Модель загружается при первом использовании и затем кэшируется.

Без пунктуации:

привет меня зовут иван я работаю программистом уже пять лет

С пунктуацией:

Привет, меня зовут Иван. Я работаю программистом уже пять лет.

GPU-ускорение

Инференс на GPU ускоряет транскрибацию в 5–15× по сравнению с CPU.

Требования:

  • NVIDIA GPU с поддержкой CUDA (GTX 1060 и новее)
  • Минимум 4 ГБ VRAM (рекомендуется 6+ ГБ для v2 RNNT)
  • Установленный PyTorch с CUDA (см. раздел Установка)

Проверить что GPU доступен:

python -c "import torch; print(torch.cuda.is_available(), torch.cuda.get_device_name(0))"
# True  NVIDIA GeForce RTX 3070

Если команда выводит True — в UI появится переключатель CPU / CUDA в разделе «Устройство». При False — PyTorch установлен без CUDA, нужно переустановить с нужным индексом (см. Шаг 5 установки Windows).

Определить нужный индекс CUDA:

nvidia-smi
# Строка: CUDA Version: 12.x  → используйте cu124
# Строка: CUDA Version: 11.x  → используйте cu118

Форматы вывода

TXT

Сплошной текст, фрагменты объединены пробелами.

Привет, это тестовая транскрибация аудиофайла.

SRT

Субтитры с временны́ми метками. Совместим с большинством видеоплееров.

1
00:00:00,000 --> 00:00:05,120
Привет, это тестовая транскрибация

2
00:00:05,120 --> 00:00:10,340
аудиофайла с помощью модели GigaAM.

JSON

Структурированные данные для дальнейшей обработки.

{
  "filename": "audio.mp3",
  "chunks": [
    { "index": 0, "start": 0.0, "end": 5.12, "text": "Привет, это тестовая транскрибация" },
    { "index": 1, "start": 5.12, "end": 10.34, "text": "аудиофайла с помощью модели GigaAM." }
  ],
  "full_text": "Привет, это тестовая транскрибация аудиофайла с помощью модели GigaAM."
}

Переменные окружения

Файл .env в корне проекта (создаётся из .env.example):

# Количество параллельных воркеров для инференса
# При нехватке RAM или VRAM уменьшите до 1
MAX_WORKERS=2

# Вариант модели GigaAM по умолчанию
# v2_ctc — быстрее (рекомендуется)
# v2_rnnt — точнее, медленнее
GIGAAM_MODEL=v2_ctc

# Папка для временных файлов и результатов
TMP_DIR=./tmp

Структура проекта

gigaam-transcriber/
├── backend/
│   ├── main.py              # FastAPI приложение, lifespan, CORS, статика
│   ├── api/
│   │   ├── routes.py        # Все API-эндпоинты (/api/*)
│   │   └── schemas.py       # Pydantic-модели запросов и ответов
│   ├── core/
│   │   ├── model.py         # Загрузка GigaAM, воркеры, кэш, переключение вариантов
│   │   ├── audio.py         # Декодирование в RAM, VAD-сплит, нарезка чанков
│   │   ├── punctuation.py   # Опциональная расстановка пунктуации
│   │   └── formatter.py     # Сборка TXT / SRT / JSON из результатов
│   └── task_manager.py      # In-memory хранилище задач с TTL-очисткой
├── frontend/
│   ├── index.html           # Единственная HTML-страница (SPA)
│   ├── css/
│   │   └── style.css        # Дизайн-система, тёмная тема
│   └── js/
│       ├── api.js           # Все fetch-вызовы к бэкенду
│       ├── ui.js            # DOM-рендер, тосты, прогресс, карточки
│       └── app.js           # Инициализация, роутинг экранов, опрос задач
├── tmp/                     # Временные файлы (создаётся автоматически)
├── .env                     # Конфигурация (создать из .env.example)
├── .env.example             # Шаблон конфигурации
├── requirements.txt         # Python-зависимости
└── README.md

API-эндпоинты

Метод Путь Описание
GET /api/system/info CUDA доступность, GPU, доступные варианты модели
GET /api/model/status Статус модели, текущий вариант, кэшированные варианты
POST /api/model/download Запустить загрузку/инициализацию модели
POST /api/model/switch Переключить вариант модели (перезапускает воркеры)
GET /api/model/download-progress Прогресс загрузки в процентах и МБ
POST /api/transcribe Загрузить файлы и запустить транскрибацию
GET /api/task/{id}/status Статус задачи + результаты после завершения
DELETE /api/task/{id} Отменить задачу
GET /api/task/{id}/download Скачать файл результата

Возможные проблемы

ffmpeg не найден

RuntimeError: Couldn't find ffprobe or avprobe

Установите ffmpeg и убедитесь что он доступен в PATH (ffmpeg -version). После установки перезапустите терминал.


Ошибка «Too long wav file»

ValueError: Too long wav file, use 'transcribe_longform' method.

VAD-сплит создал фрагмент длиннее 25 секунд (нет пауз в записи). Решение: отключите VAD-сплит в настройках — фиксированная нарезка всегда соблюдает лимит 15 секунд.


Out of Memory — нехватка RAM или VRAM

RuntimeError: [WinError 8] Недостаточно памяти

Каждый воркер загружает свою копию модели (~1.5 ГБ RAM или VRAM). Уменьшите количество воркеров в .env:

MAX_WORKERS=1

CUDA видна, но GPU не задействован

  1. В UI убедитесь что выбрано CUDA, а не CPU
  2. Проверьте что PyTorch действительно видит GPU: python -c "import torch; print(torch.cuda.is_available())"
  3. Если False — переустановите PyTorch с нужным CUDA-индексом (см. раздел GPU-ускорение)

Ошибка версии torch при установке gigaam

ERROR: gigaam 0.1.0 requires torch<=2.5.1

Это предупреждение, не ошибка установки. gigaam указал консервативный верхний предел версии, но работает с torch 2.6+. Установка завершается успешно.


VAD не работает — falling back to fixed split

Это предупреждение, не ошибка. Silero VAD не смог загрузиться, и приложение автоматически переключилось на фиксированную нарезку. Транскрибация продолжится корректно.


Сервер запускается, но страница не открывается

  1. Убедитесь что виртуальное окружение активировано (в начале строки (.venv))
  2. Запускайте команду из корня проекта
  3. Проверьте что порт 8000 не занят:
# Windows
netstat -ano | findstr :8000

# macOS / Linux
lsof -i :8000

При необходимости смените порт:

uvicorn backend.main:app --host localhost --port 8001 --reload

FutureWarning от torch.load

FutureWarning: You are using torch.load with weights_only=False

Предупреждение от PyTorch, не ошибка. Модель загружается корректно. Исчезнет когда SberDevices обновят формат весов.


FAQ

Q: Работает ли приложение без интернета? A: Да, после первой загрузки модели всё работает полностью офлайн. Для пунктуации модель тоже загружается один раз и кэшируется.

Q: Какой язык поддерживается? A: GigaAM обучена на русском языке. Пунктуатор поддерживает ещё несколько языков, но интерфейс и транскрибация ориентированы на русский.

Q: Насколько точна транскрибация? A: GigaAM v2 показывает WER около 4–7% на чистой речи. Качество снижается при сильном шуме, акценте или нескольких говорящих одновременно.

Q: В чём разница между v2 CTC и v2 RNNT? A: CTC — архитектура с условной независимостью выходов, работает быстрее. RNNT — авторегрессионная модель, лучше учитывает контекст, чуть точнее на сложных записях, медленнее примерно в 1.5–2×. Для большинства задач CTC достаточно.

Q: Сколько времени занимает транскрибация? A: На CPU — примерно 1–2 минуты на каждую минуту аудио. На GPU (CUDA) — в 5–15× быстрее.

Q: Зачем нужна установка deepmultilingualpunctuation отдельно? A: Это дополнительная NLP-модель (~450 МБ). Многим пользователям пунктуация не нужна или они добавляют её вручную, поэтому она не включена в основные зависимости.

Q: Результаты сохраняются между сессиями? A: Нет. Результаты хранятся в ./tmp и удаляются через 1 час. Скачайте нужные файлы сразу после обработки.

Q: Можно ли транскрибировать видео? A: Да. Перетащите видеофайл (MP4, MKV, AVI, MOV, WEBM, TS) — аудиодорожка извлекается через ffmpeg автоматически. Видеофайлы отображаются с жёлтой иконкой.

Q: Почему Python 3.13+ не поддерживается? A: Пакет sentencepiece (зависимость GigaAM) не имеет pre-built wheel для Python 3.13+ и требует ручной сборки. Используйте Python 3.11 или 3.12.


Лицензия

MIT License. Используйте свободно, в том числе в коммерческих проектах.

Модель GigaAM распространяется под лицензией MIT от SberDevices.

About

Локальное веб-приложение для транскрибации аудио на русском языке. Работает полностью офлайн после первоначальной загрузки модели. Никакие данные не отправляются на внешние серверы.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors