AurexTranslator: Создал свой кроссплатформенный переводчик для игр в режиме реального времени на Linux (и Windows)

Гейминг на Linux с каждым годом становится все доступнее. Играть можно практически во все. Однако если игра не поддерживает ваш язык, ситуация усложняется. Существующие экранные переводчики (LunaTranslator, MORT) либо не работают на Linux нативно, либо теряют функциональность в Wine, либо отпугивают сложностью настройки.

Мне нужен был инструмент, который работает нативно на обеих платформах, захватывает текст в реальном времени — будь то область экрана через OCR или прямой перехват из памяти игры через Hook — и при этом не требует мучительной настройки. Готового решения не нашёл. Написал своё.

AurexTranslator: Создал свой кроссплатформенный переводчик для игр в режиме реального времени на Linux (и Windows)

Так появился AurexTranslator — кроссплатформенный переводчик с открытым исходным кодом, который я продолжаю развивать.

🔗 Репозитории проекта:

Архитектура: как это работает под капотом

Весь процесс — единая цепочка:

[Захват кадра / текста] → [OpenCV] → [OCR] → [Перевод] → [Окно перевода]

Захват текста: два режима

Screencast (OCR) — выделяете область экрана, переводчик захватывает кадры и распознаёт текст на лету. Работает с любой игрой без дополнительных плагинов. Идеально для визуальных новелл и игр с фиксированным интерфейсом.

Hook (плагины) — плагин внедряется в процесс игры и перехватывает вызовы отрисовки текста напрямую. Никаких артефактов, никаких проблем с нестандартными шрифтами — только чистый текст из памяти игры.

Оба режима можно использовать одновременно: например, диалоги идут через Hook, а всплывающие подсказки на экране — через OCR.

Предобработка изображений

Перед распознаванием кадры проходят через OpenCV: улучшение контраста, бинаризация, подавление шумов. Это критично для Tesseract, который очень чувствителен к качеству входного изображения. Все параметры предобработки настраиваются вручную во вкладке «Вывод» — под конкретную игру и шрифт.

OCR: Tesseract или Ollama Vision

Tesseract — быстрый, легкий, работает на любом железе без интернета. Справляется с большинством игровых шрифтов, но может ошибаться на декоративных или сильно стилизованных текстах.

Ollama Vision — мультимодальная модель, которая понимает контекст и уверенно работает даже в сложных условиях: необычные шрифты, текст поверх сложного фона, частичные перекрытия. Требует отдельной установки Ollama и загрузки модели. Рекомендую translategemma.

Выбирается один движок — в зависимости от железа и требований к качеству.

Перевод: Google Translate и Ollama

Здесь, в отличие от OCR, можно включить оба бэкенда одновременно — результаты отображаются параллельно, можно сравнивать.

Google Translate — REST API, мгновенный отклик, поддержка огромного числа языков. Нужен интернет.

Ollama — локальный LLM-сервер, работает полностью офлайн. Требует отдельной установки: сначала скачать Ollama, затем нужную модель. Рекомендую translategemma.

OCR-режим в действии

Выделяете прямоугольник поверх нужной области, включаете OCR — и переводчик начинает работать. Дополнительно можно задать область игнорирования, если часть экрана переводить не нужно.

Подробный пошаговый старт с OCR — в Быстром старте.

Hook-режим: как работает внедрение

Технически это самая интересная часть проекта.

Система состоит из трёх компонентов. at-injector — исполняемый файл (сборки под x86 и x64), который физически внедряет плагин в адресное пространство игры. libat-injector — wrapper-библиотека, управляющая жизненным циклом процесса и коммуникацией между переводчиком и инжектором. Плагин — динамическая библиотека, написанная либо под конкретную игру, либо под целый движок — тогда один плагин покрывает сразу все игры на нём.

Механика внедрения на каждой платформе своя. На Linux используется ptrace в связке с dlopen/dlclose: at-injector подключается к процессу игры и загружает или выгружает плагин по команде переводчика. На Windows — CreateRemoteThread: в процессе игры создаётся удалённый поток, который загружает DLL в её адресное пространство.

Поддерживаемые движки и игры

Сейчас реализованы плагины для:

  • If My Heart Had Wings
  • Ren'Py — один из самых популярных движков для визуальных новелл, на котором написаны тысячи игр.

Плагины вынесены в отдельный репозиторий, чтобы их было удобно поддерживать и добавлять независимо от основного приложения.

Установка плагина:

  1. Скачайте файлы из репозитория AurexTranslator-plugins.
  2. В приложении откройте вкладку Плагины → нажмите Открыть папку с плагинами.
  3. Скопируйте файлы плагинов в эту папку.
  4. Нажмите Обновить.

💡 После установки проверьте в логах, что плагин успешно загрузился.

Как устроен захват экрана

Реализация Screencast-режима зависит от платформы и окружения. На Linux с Wayland используется XDG Desktop Portal в связке с PipeWire. На Linux с X11 — XCB. На Windows — WinAPI через BitBlt или Desktop Duplication API. Все методы возвращают кадр в OpenCV для дальнейшей обработки.

Известное ограничение

В полноэкранном режиме (Fullscreen) окно перевода не отображается поверх игры. Рекомендуется играть в оконном режиме или Borderless Window — тогда всё работает как ожидается.

Кроссплатформенность

Проект изначально писался под Linux (Arch + KDE). Благодаря C++, Qt и стандартным библиотекам портирование на Windows прошло почти без боли.

Проверено и работает на:

  • Linux: Ubuntu 22.04+, Arch Linux — X11 и XWayland.
  • Windows: 10 и 11, x64.

Что дальше

Главное направление развития — расширение Hook-системы: новые движки, новые игры, новые методы перехвата. Также в планах поддержка нескольких зон захвата для OCR, профили настроек под каждую игру, новые переводчики, улучшение окна перевода и документация.

Попробовать и помочь

Проект в альфа-версии и активно развивается. Если ваша любимая игра не поддерживается — пишите в Issues, буду рад добавить. Если хотите написать свой плагин — в репозитории есть example, можете взять за основу.

5
1
1
6 комментариев