Real-time перевод речи локально на Windows: Whisper v4 + NLLB-200 + CUDA | AiManual
AiManual Logo Ai / Manual.
09 Мар 2026 Инструмент

Собираем синхронного переводчика на коленке: Whisper v4, NLLB-200 и CUDA 13 в реальном времени на Windows

Полный гайд по сборке локального переводчика речи в реальном времени на Windows. Настройка Whisper v4, NLLB-200 и CUDA 13 без облаков и с задержкой <2 секунд.

Зачем палить трафик в Google, если можно шептать дома?

Представьте: вы смотрите стрим на непонятном языке, общаетесь в Discord с иностранной командой или просто хотите понять, о чем говорят соседи за стеной. Облачные переводчики? Они медленные, дорогие и с удовольствием сохранят ваши разговоры для тренировки своих моделей. Мы сделаем иначе: соберем систему, которая переводит речь с микрофа в текст на другом языке прямо на вашей видеокарте. Без интернета. Без ежемесячных платежей. И с довольно дикой скоростью.

Это не кликбейт. Это технический мемориал, который потребует от вас видеокарты NVIDIA с 8+ ГБ VRAM, Python 3.11+ и часового запаса терпения. Если у вас интегрированная графика - можете сразу закрывать статью.

Из чего склеим франкенштейна

Наша связка - классика жанра, но на стероидах 2026 года. Три кита:

  • Whisper v4-large-turbo (OpenAI, 2025) - последняя на сегодня версия. Распознает речь с точностью, от которой плачут дикторы центрального телевидения. Ключевое слово 'turbo' - они наконец-то оптимизировали архитектуру для реального времени.
  • NLLB-200 3.2B параметров (Meta, 2024) - модель перевода между 200 языками. Да, она жрет память, но качество перевода для пар вроде английский-русский сейчас почти человеческое. Альтернатива - MarianMT, но она проигрывает в количестве языков.
  • CUDA 13.2 с cuDNN 9.4 - без этого вся магия превратится в слайд-шоу. Если у вас не стоит драйвер хотя бы версии 535 - даже не начинайте.
💡
Пока вы читаете это, кто-то уже запилил Voxtral-Mini 4B для транскрипции с задержкой 500ms. Но мы здесь не за скоростью, а за полным циклом: речь → текст → перевод → вывод. Это сложнее.

Почему не...?

Сравнительная таблица, которая все объясняет без лишних слов:

Метод Задержка Конфиденциальность Стоимость (в месяц) Качество перевода
Наш стек (Whisper+NLLB) 1.5-2.5 секунды Полная (всё локально) 0 рублей (после настройки) 8/10
Google Cloud Speech-to-Text + Translate ~1 секунда Нулевая От $15 за 1 млн символов 9/10
Готовые приложения (например, SpeechTranslate) ~3 секунды Неизвестна (часто есть телеметрия) $5-20 подписка 7/10
Другие локальные решения (например, Qwen3-ASR + MarianMT) 2-4 секунды Полная 0 рублей 6/10

Вывод? Если вам не нужно переводить 24/7 и тратить деньги, наш способ - разумный компромисс между качеством, приватностью и стоимостью.

Собираем по кускам: от драйверов до первой фразы

Здесь начинается боль. Но мы пройдем это вместе.

1 Подготовка арены: CUDA и Python

Сначала проверим, жива ли видеокарта. Откройте командную строку и введите:

nvidia-smi

Вы должны увидеть драйвер версии 535+. Если нет - идите скачивать новые. Да, это партнерская ссылка на официальный сайт, но куда деваться.

Устанавливаем Python 3.11 или новее. Обязательно отмечаем галочку "Add Python to PATH".

2 Установка библиотек: момент истины

Создаем виртуальное окружение (советую, иначе потом будете ругаться матом):

python -m venv whisper_translate_env
cd whisper_translate_env\Scripts
activate.bat
cd ../..

Теперь устанавливаем тяжеловесов. Этот процесс может занять 20 минут и 5 ГБ места на диске.

pip install torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu132
pip install openai-whisper==2025.1.0
pip install transformers==4.45.0
pip install sounddevice pydub

Обратите внимание: версия Whisper 2025.1.0 - это неофициальный пакет с поддержкой v4. Официальный репозиторий OpenAI давно не обновлялся, но сообщество выкрутилось. Если не сработает - ищите 'whisper-v4' на PyPI.

3 Пишем скрипт-монстра

Создайте файл real_time_translator.py. Вот его скелет, который работает:

import whisper
import torch
from transformers import NllbTokenizer, AutoModelForSeq2SeqLM
import sounddevice as sd
import numpy as np
from queue import Queue
import threading
import time

# 1. Загружаем модели (это займет время и память!)
print("Загружаем Whisper v4...")
whisper_model = whisper.load_model("large-v4-turbo", device="cuda")

print("Загружаем NLLB-200 для перевода с английского на русский...")
tokenizer = NllbTokenizer.from_pretrained("facebook/nllb-200-3.2B")
model = AutoModelForSeq2SeqLM.from_pretrained("facebook/nllb-200-3.2B")
model = model.to('cuda')

# Код языка для русского
TARGET_LANG_CODE = "rus_Cyrl"

# 2. Настройка аудиопотока
def audio_callback(indata, frames, time, status):
    """Колбэк для захвата аудио"""
    if status:
        print(f"Ошибка аудио: {status}")
    audio_queue.put(indata.copy())

# 3. Функция перевода
def translate_text(text):
    """Переводит текст с английского на русский"""
    inputs = tokenizer(text, return_tensors="pt", truncation=True, max_length=512)
    inputs = {k: v.to('cuda') for k, v in inputs.items()}
    
    with torch.no_grad():
        translated_tokens = model.generate(
            **inputs,
            forced_bos_token_id=tokenizer.lang_code_to_id[TARGET_LANG_CODE],
            max_length=256
        )
    translation = tokenizer.decode(translated_tokens[0], skip_special_tokens=True)
    return translation

# 4. Основной цикл
if __name__ == "__main__":
    audio_queue = Queue()
    sample_rate = 16000  # Whisper хочет именно 16 кГц
    duration = 3  # Секунды аудио для обработки за раз
    
    print(f"Начинаем запись с микрофона. Говорите на английском!")
    print("Для выхода нажмите Ctrl+C")
    
    stream = sd.InputStream(
        samplerate=sample_rate,
        channels=1,
        dtype='float32',
        callback=audio_callback
    )
    
    with stream:
        while True:
            # Собираем аудио за N секунд
            audio_chunks = []
            for _ in range(int(duration * sample_rate / 1024)):
                if not audio_queue.empty():
                    audio_chunks.append(audio_queue.get())
            
            if audio_chunks:
                audio_data = np.concatenate(audio_chunks, axis=0)
                
                # Распознаем речь
                result = whisper_model.transcribe(
                    audio_data,
                    language="en",
                    fp16=torch.cuda.is_available()
                )
                recognized_text = result["text"].strip()
                
                if recognized_text:
                    print(f"\nРаспознано: {recognized_text}")
                    
                    # Переводим
                    translated = translate_text(recognized_text)
                    print(f"Перевод: {translated}")
                else:
                    print(".", end="", flush=True)  # Индикатор тишины
            
            time.sleep(0.1)

Это базовая версия. Она собирает аудио по 3 секунды, распознает, переводит и выводит результат. Задержка? Примерно 2-3 секунды на цикл. Быстрее можно, но нужна оптимизация буферов и потоковая обработка Whisper.

Первые запуски будут медленными: модели загружаются в память. Whisper v4-large-turbo занимает ~4.5 ГБ VRAM, NLLB-200 - еще ~6-7 ГБ. Итого нужно минимум 12 ГБ видеопамяти. Если меньше - используйте меньшие модели (Whisper medium, NLLB-600M).

А что, если хочется проще?

Да, можно взять готовые решения. Например, Whisper.cpp для распознавания и какую-нибудь обертку для перевода. Или попробовать Qwen3-ASR 1.7B, который легче и быстрее. Но тогда вы потеряете в качестве перевода. NLLB-200 - пока лучшая открытая модель для множества языков.

Кому это вправду нужно?

Сценарии, где эта сборка выстрелит:

  • Исследователи, работающие с мультиязычными датасетами. Записали интервью - сразу получили транскрипт и перевод.
  • Разработчики, которые хотят добавить голосовой интерфейс в свое приложение без облачных зависимостей. Хотя, честно, проще использовать API, если это коммерческий продукт.
  • Лингвисты-параноики, которые не хотят, чтобы их разговоры уходили в Meta или Google. Да, такие есть.
  • Геймеры в международных гильдиях. Запустил скрипт в фоне - и понимаешь, что кричит тимлид на корейском.

А вот если вам нужно просто транскрибировать встречи, лучше посмотрите статью про Whisper + Ollama - там проще и стабильнее.

Самый неочевидный совет в конце

Вы настроили это чудо. Он работает. Что дальше? Не пытайтесь использовать его для перевода в реальном времени на важных переговорах. Задержка в 2 секунды - это смерть для диалога. Вместо этого записывайте разговор, а потом прогоняйте через скрипт пачкой. Или используйте для анализа записанных подкастов.

И да, если вы хотите действительно низкую задержку, смотрите в сторону специализированных аппаратных решений вроде DGX Spark. Но это уже другая цена и другой уровень безумия.

А наш стек - это Proof of Concept, который доказывает, что в 2026 году вы можете иметь синхронного переводчика у себя дома. Кривого, требовательного, но своего. И это уже что-то.

Подписаться на канал