AI развивается очень быстро, но основной фокус у большинства - на LLM.

Но кроме LLM есть и другие применения и в этой статье - рассказ про проект синхронного перевода (в реальном времени) между любыми парами языков:

https://github.com/QuentinFuxa/WhisperLiveKit/

Основан этот проект на OpenAI Whisper. Как Whisper, так и WhisperLiveKit получают на вход аудио-сигнал речи, а на выходе дают - текст.

Что добавляет WhisperLiveKit?

  • Whisper работает с аудио-файлами на входе, а WhisperLiveKit - работает с аудио-потоком, что позволяет использовать его в режиме реального времени

  • Whisper "из коробки" умеет переводить на английский. WhisperLiveKit добавляет NLLW, который может переводить между парами из 200 языков

  • WhisperLiveKit добавляет Web UI

Модели:

  • STT: для транскрибации аудио я использовал large-v3, которая вышла в ноябре 2023.

  • перевод: NLLW модели которые вышли в июле 2022.

Требования к серверу:

  • Все инструкции в проекте - для Linux. Я тестировал на Ubuntu 24. В описании проекта написано, что поддерживается и Mac.

  • Нужен GPU. Я тестировал с Nvidia RTX 4090 и уровень загрузки GPU доходил до 75%. Память VRAM - до 14GB. Можно использовать и более простые и легковесные модели - тогда требования ниже.

Tutorial - запускаем это у себя:

Ставим Docker и включаем поддержку GPU в Docker:

sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
echo "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] https://download.docker.com/linux/ubuntu $(. /etc/os-release && echo "$VERSION_CODENAME") stable" |   sudo tee /etc/apt/sources.list.d/docker.list
sudo apt-get update
sudo apt-get install -y docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
sudo nvidia-ctk runtime configure --runtime=docker
sudo usermod -aG docker $USER
exit

# test GPU:
docker run --rm --runtime=nvidia --gpus all ubuntu nvidia-smi

Если всё сделано правильно, то последняя команда должна показать статус GPU карточки.

Клонируем и строим образ:

git clone https://github.com/QuentinFuxa/WhisperLiveKit.git
cd WhisperLiveKit/
docker build  -t wlk217 . --build-arg EXTRAS="translation"

Аргумент --build-arg EXTRAS="translation" - нужен нам чтобы добавить модуль nllw, который нам нужен для дополнительного функционала перевода.

Запускаем в режиме, когда переводом занимается Whisper:

docker run --rm --name wlk \
 -v ~/.cache:/root/.cache \
 --gpus "device=0" \
 -p 8000:8000 \
 wlk217 --model large-v3 --language ru --direct-english-translation

Флаг "-v" вам возможно надо будет изменить на путь, который есть в вашей системе. По этому пути сохраняются модели - нужно несколько гигабайт.

Флаг "--model large-v3" определяет какую модель использовать для транскрибации. Посмотреть возможные варианты можно вот тут: https://github.com/QuentinFuxa/WhisperLiveKit/blob/main/docs/default_and_custom_models.md

Флаг "--language ru" определяет исходный язык. Необязательный параметр, потому что язык может определяться автоматически. Посмотреть возможные варианты можно вот тут: https://github.com/QuentinFuxa/WhisperLiveKit/blob/main/docs/supported_languages.md

Флаг "--direct-english-translation" - это режим перевода прямо в Whisper. Whisper может переводить только на английский. Преимущество этого режима в том, что не нужна дополнительная модель для перевода, и переводит Whisper довольно неплохо.

Открываем localhost:8000 или <IP>:8000 и тестируем...

Сегодня браузеры могут дать сайту доступ к микрофону, только если используется HTTPS. В нашем случае может быть необходимо добавить исключение. В Chrome это делается в настройках: chrome://flags/#unsafely-treat-insecure-origin-as-secure

После этого браузер позволит иметь доступ к микрофону:

Если же настроить доступ через HTTPS - то всё работает и настраивать браузер не требуется.

Я нашёл несколько багов:

  • бывает, что сервис "тупит" при запуске, и нужно остановить запись (красная кнопка) и перезапустить

  • если в речи сделать длинную паузу (> 10 секунд), то бывает что сервис перестаёт переводить и просто пишет текст на оригинальном языке
    https://github.com/QuentinFuxa/WhisperLiveKit/issues/306

Режим перевода на отдельной модели:

docker run --rm --name wlk \
 -v ~/.cache:/root/.cache \
 --gpus "device=0" \
 -p 8000:8000 \
 wlk217 --model large-v3 --language ru --target-language en

В этом режиме сервис запуститься с использованием NLLW:

  • Whisper будет только распознавать речь (транскрибация)

  • NLLW будет переводить

По умолчания NLLW использует модель https://huggingface.co/facebook/nllb-200-distilled-600M

С этой моделью перевод на английский мне показался довольно примитивным и "топорным".

Можно запуститься с моделью https://huggingface.co/facebook/nllb-200-distilled-1.3B, - в два раза больше размер, качество перевода получше. Запуститься с этой моделью можно вот так:

docker run --rm --name wlk \
 -v ~/.cache:/root/.cache \
 --gpus "device=0" \
 -p 8000:8000 \
 wlk217 --model large-v3 --language ru --target-language en --nllb-size 1.3B

Я записал видео-демонстрацию:

В общем и целом это всё работает, но ещё довольно сыро - есть немало багов. Поэтому я и написал эту статью - может кто заинтересуется и захочет допилить?

Альтернативы

В сентября 2025 Qwen выпустили модель Qwen3-Omni, которая может:

  • STT: транскрибировать аудио (speech recognition) - поддерживается 19 языков, в том числе и русский

  • переводить - поддерживается 119 языков

  • TTS: синтезировать текст - поддерживается 10 языков, в том числе и русский

https://github.com/QwenLM/Qwen3-Omni/

Проблема только в том, что на данный момент нет движков, которые поддерживали бы все функции этой модели. Я ещё не видел, чтобы кто-то смог запустить эту модель в режиме перевода аудио.

Комментарии (3)


  1. nunucka-19
    13.12.2025 23:05

    интересно - можно ли уменьшить нагрузку оставив только нужные языки и выходит двойной перевод через english


    1. SlavikF Автор
      13.12.2025 23:05

      Почему "выходит двойной перевод через english"?

      В случае использования NLLW:

      • Whisper делает только транскрибацию (перевод не делает)

      • NLLW делает перевод


  1. rPman
    13.12.2025 23:05

    как переводит facebook meta nllb мы знаем.. ужасно переводи, так же прекрасно знаем о том как whisper придумывает или пропускает куски беседы.

    есть openai:gpt4o мультимодальная с поддержкой текста и голоса в обе стороны, ее можно использовать для решения всей задачи (распознование речи + перевод + синтез речи) и это работает. Очень хотелось бы пощупать qwen omni в этом же виде, так как можно локально запускать.