реклама
разместить

Как я Yakuza перевести решил. ScreTran - перевод текста с экрана в реальном времени

С первого дня как я увидел игру Yakuza я влюбился в эту серию игр. И каждый любитель этой серии сталкивается с проблемой отсутствия русских субтитров. Да существуют любительские переводы, но есть два нюанса:

1. Переведены не все части.

2. В основном такие переводы платные (и по моему мнению их цена не соответствует качеству).

суцк
суцк

Кстати не стоит забывать, что Yakuza японская игра и английские субтитры пестрят косноязычными выражениями и словосочетаниями, часто незнакомыми. Мне стало лень постоянно ставить игру на паузу и гуглить незнакомое слово. Надо что то с этим делать.

Настоящий якудза пишет экранный переводчик

В свободное время я пишу приложения на C# (WPF, WinUI 3) для решения своих задач, например, бомже-streamdeck для воспроизведения звуков на стриме. А почему бы не решить проблему Yakuza и написать свой экранный переводчик?

В смысле он уже существует? Чего я так много воды развёл когда есть Translumo? На этом можно было и закончить, сказать, "что поделать, всё уже сделали до меня, ну и к чёрту это всё".

Но изучив всю информацию, мне показалось, что я могу решить эту же задачу намного проще и с меньшими трудозатратами. О! А вот и мой двухнедельный отпуск подошёл! Итак задача на отпуск - написать и выпустить свой экранный переводчик (ну и про отдых не забыть).

Глаза боятся, а руки кодят

В моей голове приложение выглядело так, есть два ст.. окна, одно область захвата, второе область с переведенным текстом. Ну и общая концепция должна быть следующей:

WordArt - рулит (сарказм)
WordArt - рулит (сарказм)

Исходя из концепции, мне нужно было выбрать технологии по распознаванию и переводу текста. С распознаванием текста (или OCR) всё просто самый простой, доступный и бесплатный на C# оказался движок Tesseract OCR. Я не дошёл до сравнения с другими технологиями, так как меня сразу устроило, что может Tesseract и не забываем про сроки. А вот с сервисом для перевода текста пришлось попотеть.

Lingua latina non verpa canina

Сервисов для перевода с доступным API огромное множество, аж голова начинает кружится. Поэтому я искал переводчик который будет соответствовать моим критериям:
1. Более менее сносно переводить текст. Можно терять контекст, главное, что бы уж не совсем "надмозги" и "углепластики".
2. Не иметь ограничений по количеству запросов, либо иметь большой бесплатный лимит.
3. Пользователь ничего не должен настраивать, указывать ключи API, устанавливать VPN.
4. Иметь примеры реализации на C#.

Silent hill 1
Silent hill 1

Для проверки качества перевода я взял кусок описания самой лучшей хостес серии Yakuza Гороми:

Goromi wears a pink snakeskin bodycon dress and matching hotpants, along with a pair of fishnet stockings and hot pink pumps. She wears a large bow made of the same material to tie up her blonde hair. She also has an assortment of bangles and other gaudy jewelery, including a necklace and hoop earrings. Her nails are painted pink with a glittery floral pattern.

DeepL

Как я Yakuza перевести решил. ScreTran - перевод текста с экрана в реальном времени

Самый известный и хорошо обученный переводчик, есть примеры для C#. Но имеет ограничения при бесплатном использовании.

LibreTranslate

Платье из туловища
Платье из туловища

Заявляет, что он хорош почти как DeepL! Его можно развернуть у себя на сервере! Посмотрев на качество перевода, которое меня отрицательно порадовало, я сразу от него отказался.

Яндекс.Переводчик

Как я Yakuza перевести решил. ScreTran - перевод текста с экрана в реальном времени

Неплохо переводит текст, производитель указывает, что для перевода использует свою нейронку Yandex GPT. Я даже случайно вставил картинку в этот переводчик и внезапно, я узнал, что у Яндекса есть свой OCR. Но опять таки я утыкаюсь в маленький лимит запросов. Оффтоп: Теоретически Яндексу не составит труда написать свой более крутой экранный переводчик.

Bing Microsoft Translator

Как я Yakuza перевести решил. ScreTran - перевод текста с экрана в реальном времени

Мне понравился результат этого переводчика. Но не нашёл нормальных примеров как им пользоваться, А ещесовсем недавно наелся багов от новых технологий мелкомягких (да WinUI?).

Google Translate

Как я Yakuza перевести решил. ScreTran - перевод текста с экрана в реальном времени

ФУ! Гугл транслейт! Его нельзя использовать! Wait what? Не понял, а почему такой сносный перевод? Да есть мелкие косяки по сравнению с другими переводами, но это вполне меня устраивает. Я нашёл множество примеров как обращаться к этому сервису перевода, при этом БЕЗ ЛИМИТОВ!

Выбор сделал в пользу Google Translate, а приложение написал так, что бы в будущем было легко подключить другой сервис. Если вы можете предложить переводчик лучше и без лимитов - welcome в комментарии.

Я тебя слепила из того что было

Неделю спустя ненапряжного кодинга и перерывы на рекреационные мероприятия. Я запустил свой первый тест:

Счастью моему не было предела, в диалогах эта штука работала просто великолепно. Я ожидал, что в катсценах будут проблемы, ведь OCR в основном рассчитаны для распознавания текста с бумажных документов - черный текст на белом фоне, а белый текст на пёстром всё время меняющемся фоне это проблема для OCR. Как решить эту проблему? В Translumo это решалось подключением еще двух движков для распознавания текста и целая модель машинного обучения. Это уже звучит очень требовательно к ресурсам компьютера. У меня и опыта работы нет с Machine Learning.

Например, вот этот текст Tesseract OCR не может распознать:

Как я Yakuza перевести решил. ScreTran - перевод текста с экрана в реальном времени

Я пошёл другим путём, движок OCR должен быть один, но я должен подготовить картинку для распознавания так, что бы движку было проще распознать текст.

Я экспериментировал с картинкой, меняя её контрастность, повышая яркость, даже передавая негатив изображения, всё тщетно (вот тут наверное модель обучения бы помогла). И внезапно, если достаточно СНИЗИТЬ яркость, текст на изображении становится распознаваемым:

Tesseract'у вкусно
Tesseract'у вкусно

PROFIT!

Настройки

У всех разные мониторы и разная настройка яркости внутри игры, поэтому параметр яркости для OCR нужно было сделать настраиваемым. С этого момента появляется еще одно окно.

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

Движок Tesseract при распознавании может сказать, насколько точно он распознал текст, передавая это значение в диапазоне от 0 до 1. Во время тестов, я примерно понял, что значения от 0.9 до 1 это 100% распознавание текста на экране. И сначала жестко выставил, всё что ниже 0.9 не переводить и не выводить пользователю, но часть диалогов в катсценах начала теряться. А если немного снизить этот порог, распознаваемый текст может обретать какие то артефакты (символы которых нет в оригинальном тексте) при этом этот текст всё еще можно понять. Поэтому я решил сделать этот параметр настраиваемым, что бы пользователь сам смог это настроить. И вывел фактическую уверенность в переводе движка в уголок окна перевода.

Как я Yakuza перевести решил. ScreTran - перевод текста с экрана в реальном времени

Это всё звучит сложно! Я вообще не хочу разбираться! У меня лапки!

Пользователь, я уже погонял переводчик и примерно нашёл настройки по умолчанию. Если всё работает - тебе туда заходить не придётся. В идеальной картине мира ваша задача настроить положение окон и нажать кнопку "Поехали!".

Кроме этих важных параметров, я добавил еще пару полезностей:

1. Это возможность изменения размера шрифта перевода.
2. Возможность скрывать интерфейс по нажатию горячей клавиши.
3. Положение окон перевода и захвата сохраняются, что бы не наводить их каждый раз на нужные области.

Окно настроек
Окно настроек

Время релиза

Вот он последний день отпуска, я долго гонял переводчик в прохождениях на ютубе, снял нагрузку моего приложения на ПК:

Нагрузка приложения в диспетчере задач (ЦП AMD Ryzen 2600)
Нагрузка приложения в диспетчере задач (ЦП AMD Ryzen 2600)

Хмм, а мой переводчик даже не перевалил по потреблению оперативы за 100МБ! А GPU не грузит вообще. Это были действительно хорошие новости. Я готов релизить своё приложение! И чёрт меня дернул проверить приложение в Yakuza 4 (я как раз её прохожу). Запускаю игру, а окна перевода и захвата не отображаются поверх игры. Это фиаско! Не спя ночью гугля, что же всё таки не так, нахожу решение - нужно учить DirectX 9 и писать всё заново! На работе подождут!

Как я Yakuza перевести решил. ScreTran - перевод текста с экрана в реальном времени

Всё таки выспавшись, я понял в чем была проблема (спасибо поиску по проектам на GitHub) немного модифицировал код, а потом и даже прочитал о таком же поведении в статье о Translumo.

ВАЖНО! Игра должны быть запущена либо в оконном режиме, либо в borderless-режиме:

Как я Yakuza перевести решил. ScreTran - перевод текста с экрана в реальном времени

После этих мучений на ровном месте, я всё таки зарелизил своё приложение на GitHub.

ВАЖНЫЙ ДИСКЛЕЙМЕР! Я позиционирую своё приложение как вспомогательное, а не полноценную замену переводам или другим более качественным приложениям. ScreTran необходим для упрощения жизни тем кто всё таки немного знает английский и просто не хочет доставать переводчик, ставить игру на паузу, что бы найти перевод нужного слова.

Демо работы приложения в играх:

Тест перевода в диалогах
Тест перевода в катсценах

Видео о том как быстро начать пользоваться ScreTran:

Информация о настройке переводчика

Ложка дёгтя

Или что еще можно сделать?

1. Всё еще есть проблемы с распознаванием белого текста, на светлом фоне - есть идеи как можно это исправить, но до отпуска еще далеко :D. Из-за этого иногда в катсценах всё же наблюдается пропуск реплик.
2. Потестить в чем то кроме Yakuza.
3. Надо попробовать подключить сторонние переводчики.
4. Перевод только с русского на английский. Надо рассмотреть возможность добавить другие языки.

Теги: Перевод, Локализация, Экранный переводчик, Screen Translator, Translumo

1616
реклама
разместить
19 комментариев

Опробовал на Yakuza 6, всё работает в оконном режиме и в borderless. Белые субтитры на светлом фоне ожидаемо не переводятся. В целом играть весьма комфортно. Так что моё вам уважение

1

Выпустил новую версию, теперь на светлом фоне должно переводить

1

Как же я хочу поиграть в Judgment с русским текстом, если это реально сработает, я буду визжать

1

Я скорее всего до Judgement доберусь только через месяц. Если у тебя удастся поиграть пораньше, я был бы рад услышать обратную связь

Автор, прекрасная работа!
Можете подсказать, на свое мнение, какие отличие имеет ваше по от MORT?
Я с ней проходил старфилд, пытался в якудзу 3, но столкнулся с проблемой как у вас, что игра становится окном выше. Борется горячими клавишами, но переводчик умирает в катсценах. Кажется это проклятие всех переводчиков в якудзе

1

Я MORT не пользовался, могу сделать выводы только по описанию из статьи про Translumo. У MORT больше OCR движков и переводчиков, поддержка других языков. Оно и понятно я писал приложение за две недели.
По поводу того что игра становится окном выше, это как я понял проблема 3, 4, 5 частей якудзы. Эту проблему я победил, у меня на компе стоит 4 и 5ая часть, в обоих мои окна всегда поверх. Внезапно на GitHub'е я нашел какую то тулзу для League Of Legends и там было решение моей проблемы.
В катсценах переводчик работает, но как я писал в статье, всё еще бывают проблемы с белым текстом на светлом фоне (из-за чего очень редко пропускаются реплики).

Раскрывать всегда
Snapdragon 888 — большой тест тяжёлых игр на эмуляторе Nintendo Switch

Долго распинаться не буду, да и нет желания, так что начнём

Фоточка не моя, у меня вообще геймпады нет...
3535
44
22
11
11
11
11
Чел живёт в Каннах, рядом море солнце пляж, девочки . Роскошная жизнь, а он на эмуляторе играет. Мда
реклама
разместить
👾 Как JRPG ломали языковые барьеры 🚧

Так, народ, урывками читаю английскую книгу: она настолько удачная, что захотел простыми словами кусочек пересказать, вдруг кто подскажет ещё хорошие книги по тематике или заинтересуется этой. Думаю, это получше аннотации. Сейчас поговорим о том, как переводили JRPG и другие японские игры и почему это было так сложно.

Фото книги с сайта Bitmap Books
126126
99
11
11
11
Прочел (было интересно). И понял, что вся статья — это прогрев на книгу за £34.99, то есть почти $44 (и даже с такой ценой тираж распродан)! Я из Учреждения объятий горьких ватрушек вношу свою скромную лепту.
Декабрь 2024: что было выполнено в переводе Якудзы 6 от команды LaD Kiwami + немножко о своём

良いお年を、皆さん!Сегодня будет пара хороших новостей и немножко шитпоста. Не люблю растекаться на много постов, когда можно всё сделать в одном. Такой уж я ретроград. Поэтому приступим.

Декабрь 2024: что было выполнено в переводе Якудзы 6 от команды LaD Kiwami + немножко о своём
2222
33
11
11
11
Разработчики отечественных игр встречаются с игроками лицом к лицу — что из этого получается и как офлайн-отзывы отличаются от сетевых

«Наши игроки привыкли, что если российская студия, то она должна выпустить игру именно про Россию. Но мы считаем, что за счёт инди-разработки вывозить российский рынок и популяризировать его, именно российский сеттинг, ну, не комильфо».

Разработчики отечественных игр встречаются с игроками лицом к лицу — что из этого получается и как офлайн-отзывы отличаются от сетевых
7979
55
44
11
11
11
11
11
11
Echo of Revachol - фанатская карточная игра во вселенной Disco Elysium

Теперь и на русском языке!

Echo of Revachol - фанатская карточная игра во вселенной Disco Elysium
105105
1111
22
11
[Лонг] Яндекс Игры. Гайд на 100к/наносек с кликеров и о том, как залететь в веб разработку.
[Лонг] Яндекс Игры. Гайд на 100к/наносек с кликеров и о том, как залететь в веб разработку.

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

7474
2727
1010
44
22
11
Здравствуйте. Спасибо за обратную связь и высокую оценку платформы в целом ❤️ Наша команда поддержки действительно работает круглосуточно и старается отвечать на вопросы в кратчайшие сроки. Также мы активно работаем над повышением качества игр в каталоге и улучшением внутреннего инструментария.
Локализация Metaphor: ReFantazio: (не) ударить в грязь лицом

Главное наличие перевода, а не качество?

Локализация Metaphor: ReFantazio: (не) ударить в грязь лицом
3939
66
Релиз v1.00 полного перевода Tales Of Eternia (PSP)

Рады представить вам финальную версию нашего перевода. На этот проект мы потратили 1,5 года. Общее время работы над переводом составило около одного года, а всё остальное время ушло на редактирование, тестирование, работу с текстурами и видео. Данный проект представляет собой перевод текста и текстур на русский язык, а также включает в себя русский…

280280
1919
66
33
33
11
11
11
Лучшие. Благодаря вам мой сын 6 лет прямо сейчас проходит сам Tales of Phantasia (вы подарили ему те самые впечатления и заложили крепкий фундамент для следующего поколения отаку). Спасибо.
[]