Skip to content

Repository files navigation

RustASR

Мульти-модельное распознавание речи на Rust — локально, быстро, без Python-зависимостей.

RustLicense


Обзор

RustASR — библиотека и CLI-инструмент для автоматического распознавания речи (ASR, Automatic Speech Recognition), написанные на чистом Rust. Все модели работают через Candle — zero C++/Python зависимостей в runtime.

Поддерживаемые модели

МодельАрхитектураЯзыкиПараметры
Qwen3-ASRAuT Encoder + Qwen3 LLM DecoderМультиязычная0.6B / 1.7B
Whisper Large v3 TurboEncoder-Decoder (Transformer)Мультиязычная~809M
GigaAM v3 E2E CTCConformer + CTCРусский~220M
Parakeet TDT v3FastConformer + TDT25 языков~627M

Ключевые возможности

  • 4 модели с единым API (trait AsrModel)
  • GPU-ускорение: Metal (macOS), CUDA (Linux/Windows)
  • Квантизация: GGUF (Q4_0, Q6K, Q8_0) для уменьшения потребления памяти
  • Диаризация: определение говорящих по каналам или кластеризацией
  • VAD: сегментация речи через WebRTC VAD
  • Форматы аудио: WAV (16-bit PCM), автоматический ресемплинг до 16 кГц

Быстрый старт

Требования

  • Rust 1.85+ (stable)
  • macOS 13+ (для Metal) или Linux 5.0+

Сборка

# Клонирование
git clone https://github.com/example/rustasr.git
cd rustasr
# Сборка (debug)
cargo build --workspace
# Сборка (release, рекомендуется для инференса)
cargo build --workspace --release

Загрузка моделей

Qwen3 и Whisper загружаются напрямую с HuggingFace, GigaAM и Parakeet требуют конвертации весов.

# Qwen3-ASR 0.6B
python scripts/download_model.py \
--model Qwen/Qwen3-ASR-0.6B \
--output models/qwen3-asr-0.6b
# Qwen3-ASR 1.7B
python scripts/download_model.py \
--model Qwen/Qwen3-ASR-1.7B \
--output models/qwen3-asr-1.7b
# Whisper Large v3 Turbo
python scripts/download_model.py \
--model openai/whisper-large-v3-turbo \
--output models/whisper-large-v3-turbo
# GigaAM v3 E2E CTC (загрузка + конвертация PyTorch → safetensors)
python scripts/convert_gigaam.py --output models/gigaam-v3-e2e-ctc
# Parakeet TDT 0.6b v3 (загрузка + конвертация NeMo → safetensors)
python scripts/convert_parakeet.py \
--model nvidia/parakeet-tdt-0.6b-v3 \
--output models/parakeet-tdt-0.6b-v3

Python-зависимости для конвертации: torch, safetensors, sentencepiece, huggingface_hub. Для Parakeet дополнительно нужен omegaconf.

Транскрибация

# Qwen3-ASR (по умолчанию)
cargo run -p asr-cli --release -- transcribe \
--model models/qwen3-asr-0.6b \
--audio recording.wav \
--device metal
# Whisper
cargo run -p asr-cli --release -- transcribe \
--model models/whisper-large-v3-turbo \
--model-type whisper \
--audio recording.wav \
--device metal
# GigaAM (русский)
cargo run -p asr-cli --release -- transcribe \
--model models/gigaam-v3-e2e-ctc \
--model-type gigaam \
--audio recording.wav \
--device cpu
# Parakeet TDT
cargo run -p asr-cli --release -- transcribe \
--model models/parakeet-tdt-0.6b-v3 \
--model-type parakeet \
--audio recording.wav \
--device cpu

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

use asr_engine::AsrEngine;use asr_core::{ModelType,TranscribeOptions};// Загрузка моделиletmut engine = AsrEngine::load(ModelType::Whisper,"models/whisper-large-v3-turbo",&device,)?;// Транскрибацияlet result = engine.transcribe(&samples,&TranscribeOptions{language:Some("ru".into()),
..Default::default()})?;println!("{}", result.text);for seg in&result.segments{println!("[{:.1}s–{:.1}s] {}", seg.start, seg.end, seg.text);}

CLI-команды

transcribe — распознавание речи

rustasr transcribe \
--model <путь> \
--model-type <qwen3|whisper|gigaam|parakeet> \
--audio <файл.wav> \
--device <cpu|metal|cuda> \
--language <язык> \
--decoder-weights <auto|safetensors|gguf>

diarize — диаризация + транскрибация

Работает с любой моделью (Qwen3, Whisper, GigaAM, Parakeet).

rustasr diarize \
--model <путь> \
--model-type <qwen3|whisper|gigaam|parakeet> \
--audio <файл.wav> \
--device <cpu|metal|cuda> \
--speaker-mode <auto|channel|cluster> \
--num-speakers 2 \
--out-dir output/

quantize — квантизация модели

rustasr quantize \
--input models/qwen3-asr-0.6b/model.safetensors \
--output models/qwen3-asr-0.6b/model-q8_0.gguf \
--qtype q8_0

models list — список локальных моделей

rustasr models list --root models/

test — проверка окружения

rustasr test --device metal

Архитектура проекта

rustasr/
├── crates/
│ ├── asr-core/ # Базовые типы, ошибки, trait AsrModel
│ ├── audio/ # WAV-загрузка, ресемплинг, mel-спектрограмма
│ ├── aut-encoder/ # AuT аудио-энкодер (Qwen3-ASR)
│ ├── qwen3-decoder/ # Qwen3 LLM декодер (Qwen3-ASR)
│ ├── asr-pipeline/ # End-to-end пайплайн Qwen3-ASR
│ ├── model-qwen3/ # Обёртка Qwen3-ASR → AsrModel
│ ├── model-whisper/ # Whisper Large v3 Turbo → AsrModel
│ ├── model-gigaam/ # GigaAM v3 CTC → AsrModel
│ ├── model-parakeet/ # Parakeet TDT v3 → AsrModel
│ ├── asr-engine/ # Единый фасад AsrEngine (диспетчеризация)
│ └── asr-cli/ # CLI-приложение rustasr
├── models/ # Локальные модели (не в git)
├── scripts/ # Утилиты: загрузка, конвертация, сравнение
└── docs/ # Документация и PRD

Граф зависимостей

asr-core ←── audio ←── aut-encoder
↑ ↑ ↑
│ └── asr-pipeline ←── qwen3-decoder
│ ↑
├── model-whisper │
├── model-gigaam │
├── model-parakeet │
├── model-qwen3 ────────┘
│
└── asr-engine ←── asr-cli

Единый trait для моделей

Все модели реализуют AsrModel из asr-core:

pubtraitAsrModel:Send + Sync{fnname(&self) -> &str;fnmodel_type(&self) -> ModelType;fnsample_rate(&self) -> u32{16_000}fnsupported_languages(&self) -> &[&str];fnmodel_info(&self) -> ModelInfo;fntranscribe(&mutself,samples:&[f32],options:&TranscribeOptions,) -> AsrResult<TranscriptionResult>;}

Разработка

Форматирование и линт

# Форматирование
cargo fmt --all
# Линт (clippy)
cargo clippy --workspace --all-targets --all-features -- -D warnings

Тесты

# Все тесты
cargo test --workspace
# Конкретный крейт
cargo test -p audio
# Конкретный тест с выводом
cargo test -p asr-pipeline test_pipeline_creation -- --nocapture

Часть интеграционных тестов пропускается, если модель не загружена (проверяется наличие файлов в models/).

Feature gates

Модели подключаются через feature gates в asr-engine:

[features]
default = ["whisper", "gigaam", "parakeet", "qwen3"]
whisper = ["dep:model-whisper"]
gigaam = ["dep:model-gigaam"]
parakeet = ["dep:model-parakeet"]
qwen3 = ["dep:model-qwen3"]

Целевые метрики

МетрикаЗначениеПлатформа
RTF (Real-Time Factor)< 0.3M1 Mac (Metal), 0.6B
RTF< 1.0CPU (8 cores), 0.6B
Cold Start< 5 секундЛюбая
Peak Memory< 2 GB0.6B модели
Peak Memory< 3 GB1.7B модели

Результаты тестирования

Подробный сравнительный тест: docs/tests/SUMMARY.md

Производительность на Metal GPU (60 с русской речи)

МодельRTFTranscribePeak RSSКачество (рус.)
GigaAM v3 CTC0.0171.02 с1 719 МБ★★★★☆
Parakeet TDT v30.0382.30 с4 672 МБ★☆☆☆☆
Whisper v3 Turbo0.1106.60 с1 711 МБ★★★★★
Qwen3-ASR 0.6B0.1146.84 с1 932 МБ★★★☆☆

Рекомендации

СценарийМодель
Русский, лучшее качествоWhisper v3 Turbo
Русский, макс. скоростьGigaAM v3 CTC (Metal)
Мультиязычный контентWhisper v3 Turbo
VAD/диаризацияЛюбая (--model-type)

Также доступны результаты квантизации GGUF (Qwen3, Whisper).


Стек технологий

КомпонентБиблиотека
ML-бэкендCandle (candle-core, candle-nn, candle-transformers)
Формат весовSafeTensors, GGUF
Токенизацияtokenizers
Аудио I/Ohound (WAV)
Ресемплингrubato
FFTrustfft
VADwebrtc-vad
CLIclap
Логированиеtracing

Документация

Лицензия

MIT OR Apache-2.0

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages