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)

rPman
13.12.2025 23:05как переводит facebook meta nllb мы знаем.. ужасно переводи, так же прекрасно знаем о том как whisper придумывает или пропускает куски беседы.
есть openai:gpt4o мультимодальная с поддержкой текста и голоса в обе стороны, ее можно использовать для решения всей задачи (распознование речи + перевод + синтез речи) и это работает. Очень хотелось бы пощупать qwen omni в этом же виде, так как можно локально запускать.
nunucka-19
интересно - можно ли уменьшить нагрузку оставив только нужные языки и выходит двойной перевод через english
SlavikF Автор
Почему "выходит двойной перевод через english"?
В случае использования NLLW:
Whisper делает только транскрибацию (перевод не делает)
NLLW делает перевод