stt-ru
Speech-to-Text Russian - распознавание русской речи: библиотека Python, команда, веб-сервис и Docker-образ
Документация · PyPI · Docker · English
stt-ru распознает русскую речь в записях разговоров, лекций и диктовки. Речь распознает модель GigaAM-v3 через onnx-asr: текст получается с пунктуацией и числами, каналы стереозаписи распознаются как отдельные говорящие, результат сохраняется в субтитры и таблицы. Модель работает на CPU без PyTorch, на GPU NVIDIA - через ONNX Runtime.
- Команда transcribe - файлы и каталоги, результаты каждого файла и общий файл на пакет, мониторинг папки с новыми записями
- Форматы результата - TXT, JSON, JSONL, SRT, VTT, ASS для Aegisub и CSV для таблиц
- Библиотека Python - распознавание файлов и записей в памяти, экспорт результата
- Модели - любая модель onnx-asr: GigaAM, T-one, Vosk, Whisper и другие; устройства и параметры поиска речи
- Оценка качества - WER, CER и скорость моделей на своей разметке
- Веб-сервис - веб-интерфейс с формой волны и переходом по фрагментам, REST API, очередь и токен доступа
- Docker - образы для CPU и GPU NVIDIA с моделью внутри
Установка
Требуется Python 3.11 или новее.
pip install stt-ru
Или с помощью uv:
uv add stt-ru
Дополнения: ffmpeg - форматы M4A, AAC, звук из видео без установленного ffmpeg; service - веб-интерфейс и REST API; eval - оценка качества. Все сразу:
pip install "stt-ru[ffmpeg,service,eval]"
Модель (около 230 МБ) скачивается с Hugging Face при первом запуске. GPU и работа без интернета - на странице Установка.
Быстрый старт
stt-ru transcribe call.wav # текст в консоль
stt-ru transcribe calls/ -o out/ -f srt,ass,csv --summary out/all.csv
stt-ru transcribe calls/ -o out/ --watch # мониторинг папки
stt-ru evaluate eval.csv -m gigaam-v3-e2e-rnnt -m t-tech/t-one # сравнение моделей
stt-ru serve # http://127.0.0.1:8000
>>> from stt_ru import Transcriber
>>> result = Transcriber().transcribe("call.wav")
>>> for segment in result.segments:
... print(segment.speaker, segment.start, segment.end, segment.text)
Канал 1 0.994 9.054 Наталья, благодарю вас за ожидание. По данному вопросу я сейчас ваш звонок переведу на специалиста профильного подразделения. Оставайтесь, пожалуйста, на линии.
Канал 0 3.49 3.934 Угу
Канал 0 7.682 8.222 Угу
Канал 1 9.634 12.638 Я в свою очередь с вами прощаюсь. Всего доброго, до свидания.
Канал 0 12.994 13.662 До свидания.
>>> result.save("call.srt")
PosixPath('call.srt')
Ноутбуки с примерами - в каталоге notebooks/: быстрый старт, аналитика звонка, длинная запись и субтитры, оценка моделей, веб-сервис из Python. Каждый открывается в Colab, описания - на странице Примеры.
Docker
docker run -d -p 8000:8000 -e STT_RU_TOKEN=my-secret-token ghcr.io/sergeyshk/stt-ru # веб-сервис
docker run --rm -v "$PWD:/data" ghcr.io/sergeyshk/stt-ru transcribe call.wav # один файл
docker run -d --gpus all -p 8000:8000 -e STT_RU_TOKEN=my-secret-token ghcr.io/sergeyshk/stt-ru:latest-gpu
Модель по умолчанию уже в образе: контейнер распознает без сети. Тома, права на запись, Compose и требования GPU-образа - на странице Docker.
Разработка
Проект использует uv для управления зависимостями и ruff для линтинга и форматирования.
git clone https://github.com/SergeyShk/Speech-to-Text-Russian.git
cd Speech-to-Text-Russian
make deps # создать окружение и установить зависимости
make test # запустить тесты и примеры из докстрингов (doctest)
make lint # ruff + mypy
make docker # собрать Docker-образ
Полный список команд - make help. Документация двуязычная: русские страницы docs/*.md, английские - docs/*.en.md рядом с ними; при правке страницы обновляйте обе версии.
Перед отправкой изменений стоит установить хуки, которые прогонят линтеры на коммите и тесты на пуше:
uv run pre-commit install
Участие в проекте
Баг-репорты, идеи и пул-реквесты приветствуются - issues открыты. Как устроен процесс и что проверить перед отправкой пул-реквеста - в CONTRIBUTING.md; правила общения - в кодексе поведения.
Структура проекта
- docs - документация MkDocs на русском и английском
- docker - Docker-образы для CPU и GPU NVIDIA, файлы Docker Compose
- src/stt_ru:
- pipeline.py - распознавание файлов и записей в памяти
- result.py - результат распознавания: фрагменты и сведения о записи
- batch.py - пакетное распознавание файлов и мониторинг каталогов
- cli.py - команда
stt-ru - exceptions.py - исключения библиотеки
- audio - чтение аудио через soundfile и ffmpeg
- asr - распознавание моделью onnx-asr
- vad - параметры поиска речи Silero VAD
- export - форматы результата
- evaluation - оценка качества на разметке
- service - веб-интерфейс, REST API и очередь задач
- tests - тесты, повторяющие структуру пакета
Авторы
- Шкарин Сергей (kouki.sergey@gmail.com)
Лицензия
Код распространяется под лицензией MIT. Модель GigaAM-v3 распространяется под лицензией MIT; у других моделей onnx-asr - свои лицензии.
Metadata
Release files for stt-ru 0.3.0
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| stt_ru-0.3.0.tar.gz | 63.7 kB | Without provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| stt_ru-0.3.0-py3-none-any.whl | Python 3 | none | any | Details |
Total release size: 139.7 kB
Release files / stt_ru-0.3.0.tar.gz
| Download URL | stt_ru-0.3.0.tar.gz |
|---|---|
| Size | 63.7 kB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
65d867e8a6fa4017e8273fb69877875b64f3c5efcfde5f0363200ef6aff76eee
|
|
BLAKE2b-256 checksum How to use checksums |
6dba626f7b2464894d60c05fdc9abfb93e74222f5d7f991a028aaa8630d1701d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Release files / stt_ru-0.3.0-py3-none-any.whl
| Download URL | stt_ru-0.3.0-py3-none-any.whl |
|---|---|
| Size | 76.0 kB |
| Tags | Python 3 |
|
SHA-256 checksum How to use checksums |
ea7769a5a743f3f60976576a6322097a8f790c07e316338a949f5157361eb485
|
|
BLAKE2b-256 checksum How to use checksums |
c85f4aed1a4183dd41587659d2d879d5d8784faea8263d1080be2059d37637d1
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
Yes |
| Uploaded via |
uv/0.13.0 {"installer":{"name":"uv","version":"0.13.0","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"Ubuntu","version":"24.04","id":"noble","libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":true}
|
Security for stt-ru 0.3.0
Provenance
Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.
No provenance found
None of the files in this release were uploaded with provenance metadata.
A note on package security
PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.
To learn more about protecting yourself from malicious actors, visit our package security documentation.