Skip to content

Speech-to-Text translation service (Rust, Tonic) (2025)

Notifications You must be signed in to change notification settings

Ave-Sergeev/Dictator

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Описание

Пример реализации gRPC-сервера на Rust.

Сервер предназначен для транскрибации аудио (перевода речи в текст), и детекции голосовой активности без использования внешних Speech API.

В проекте используются:

  1. Tokio асинхронная среда выполнения.
  2. Tonic для реализации gRPC.
  3. Prost для реализации Protocol Buffers.
  4. Vosk открытая модель для распознавания речи.
  5. Silero открытая модель для детекции голосовой активности.
  6. Opt биндинг для ONNX runtime.
  7. ...

По необходимости можно поменять модель (Vosk) на любую из доступного списка. Для этого достаточно её скачать, и положить в директорию ./model. Так же не забыть указать путь в config.yaml. По умолчанию используется портативная vosk-model-small-ru-0.22.

Так же в config.yaml можно установить значение для полей:

  • vosk.model_path - путь до модели (Vosk).
  • vosk.pause_threshold - длительность пауз для разделения речи на фразы. По дефолту 500ms.
  • vad.model_path - путь до модели (Silero)
  • vad.sessions_num - количество сессий.

Конфигурация передаваемая в запросе содержит поля:

  • sample_rate - определяет частоту дискретизации распознаваемого аудиофайла. Рекомендуется передавать на распознавание аудио с частотой 16000(Гц).
  • split_into_phrases отвечает за включение/отключение разбивки транскрибированного текста на фразы (на основе значения из pause_threshold).
  • max_alternatives - максимальное количество альтернатив. Если выставить параметр отличным от нуля, то будет возвращен наиболее правдоподобный результат из данного количества альтернатив.
  • audio_type - формат аудиофайла. На данном этапе доступно распознавание аудио форматов WAV_PCM_S16LE, RAW_PCM_S16LE, RAW_PCM_S16BE.

При использовании собственного аудиофайла убедитесь, что он имеет правильный формат - PCM 16khz 16bit mono. В противном случае, если у вас установлен ffmpeg, вы можете использовать его, для конвертации.

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

Для отправки запроса на сервер возьмите transcribe.proto (из директории ./grpc_server/proto), и используйте в своем клиенте. Проверить работоспособность можно например через Postman.

Cтруктура запроса для rpc Transcribation:

{
  "config": {
    "sample_rate": 16000,
    "max_alternatives": 0,
    "split_into_phrases": true,
    "audio_type": "WAV_PCM_S16LE"
  },
  "content": "audio in base64 format"
}

В результате распознавания сервер вернёт JSON вида:

{
  "phrases": [
    {
      "words": [
        {
          "word": "hello",
          "startMs": 60,
          "endMs": 480
        },
        {
          "word": "world",
          "startMs": 540,
          "endMs": 715
        }
      ],
      "text": "hello world"
    },
    {
      "words": [
        {
          "word": "you",
          "startMs": 1224,
          "endMs": 1450
        },
        {
          "word": "are",
          "startMs": 1590,
          "endMs": 1710
        },
        {
          "word": "beautiful",
          "startMs": 1810,
          "endMs": 2143
        }
      ],
      "text": "you are beautiful"
    }
  ],
  "text": "hello world you are beautiful"
}

Cтруктура запроса для rpc Vad:

{
  "config": {
    "sample_rate": 16000,
    "audio_type": "WAV_PCM_S16LE"
  },
  "content": "audio in base64 format"
}

В результате распознавания сервер вернёт JSON вида:

{
  "intervals": [
    {
      "start_s": 0.068,
      "end_s": 0.715
    },
    {
      "start_s": 1.224,
      "end_s": 2.143
    }
  ]
}

Локальный запуск

  1. Для установки Rust на unix подобные системы (MacOS, Linux, ...) - запускаем в терминале команду. По окончании загрузки вы получите последнюю стабильную версию Rust для вашей платформы, а так же последнюю версию Cargo.
curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh
  1. Для проверки выполните следующую команду в терминале.
cargo --version
  1. Открываем проект, и запускаем команды.

Проверяет код на возможность компиляции (без запуска).

cargo check

Сборка + запуск проекта

cargo run

UDP: Если вдруг у вас Windows, посмотрите Инструкцию тут

  1. Скорее всего вам понадобится установка Vosk.

В простом варианте достаточно выполнить следующую команду.

pip3 install vosk
  1. А так же может потребоваться установка ONNX runtime.
brew install onnxruntime

About

Speech-to-Text translation service (Rust, Tonic) (2025)

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages