Зачем палить трафик в 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 - даже не начинайте.
Почему не...?
Сравнительная таблица, которая все объясняет без лишних слов:
| Метод | Задержка | Конфиденциальность | Стоимость (в месяц) | Качество перевода |
|---|---|---|---|---|
| Наш стек (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 году вы можете иметь синхронного переводчика у себя дома. Кривого, требовательного, но своего. И это уже что-то.