ScreTran v1.2 - ДЕЙСТВИТЕЛЬНО Экранный переводчик в реальном времени

Простая настройка, маленькая нагрузка на систему, высокая точность определения текста! Многие знают, что экранные переводчики не справляются с текстом на светлом и пестром фоне. Но я нашел отличное решение этой проблемы. Обзор глобального обновления приложения ScreTran.

Суперсложная сцена с которой не справятся Tesseract OCR и Windows OCR

Коротко

Скачать можно по ссылке ниже. Там же вы найдете описание как настроить приложение.

ВАЖНО!
1. Игра должны быть запущена либо в оконном режиме, либо в borderless-режиме.
2. Чем меньше область захвата текста, тем меньше нагрузка на CPU.

Чуть по длиннее

Я уже писал статью, как я будучи в отпуске захотел составить конкуренцию Translumo и написать экранный переводчик для прохождения Yakuza, почитать можно ниже:

Я добавил демонстрацию работы приложения в сложных условиях, например как это работает в Final Fantasy, в статье о Translumo говорилось, что с этой игрой ни один OCR не справится, как видите всё работает:

Финалочка, в которой ScreTran спокойно справляется со своей задачей

Кроме этого теперь есть возможность выбрать из нескольких переводчиков: Google, Yandex, Bing

Judgement. Тест в очень светлой сцене, переводчик Yandex

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

Перевод с корейского

Так как при обращении к переводчикам используется автоопределение языка распознанного текста, то в теории (ВОЗМОЖНО) переводится будет не только с английского языка, а например с испанского или другого языка использующего латинский алфавит.

А теперь совсем длинно или о моих сладостных страданиях

Первая версия приложения работала хорошо, но не обходилось и без казусов.

А вы в потоке сисек?
А вы в потоке сисек?

Всё таки Tesseract, используемый для распознавания текста, явно давал знать, что он используется для распознавания текста документов, хотя очень хотелось, что бы он работал везде (или хотя бы в Yakuza). Как решить?

Решение 1. Обучить Tesseract шрифтам Yakuza.

Я сделал более 400 скринов диалогов из игры и начал обучать модель:

1152 файла для обучения модели
1152 файла для обучения модели

Обучил и начал проверять, по ощущениям стало чуть лучше, но стало ЗНАЧИТЕЛЬНО больше опечаток. Может быть надо модель обучить конкретно шрифту? Порывшись в Discord-е мододелов Yakuza, я нашел способ вытащить шрифт из игры:

Шрифт Yakuza 4 Remastered
Шрифт Yakuza 4 Remastered

Кстати, а вы знали, что в Yakuza 4 Remastered вшит русский шрифт, хотя по факту официального русского перевода никогда не было?

Yakuza 4 Remastered русский шрифт
Yakuza 4 Remastered русский шрифт

Обучил, но и эта попытка не дала хорошего результата. Нужно другое решение.

Решение 2. Использовать OpenCV для выделения текста.

OpenCV это такая библиотека компьютерного зрения позволяющая обрабатывать изображение и помогающая выделять на ней объекты.

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

Процесс преобразования, на первой картинке захваченное изображение, а на последней картинке извлеченный текст на прозрачном фоне
Процесс преобразования, на первой картинке захваченное изображение, а на последней картинке извлеченный текст на прозрачном фоне

Tesseract стал лучше понимать текст, но всё равно давал осечки и пропускал реплики. Можно ли сделать лучше?

Решение 3. Использовать Решение 2, но с Windows OCR

На удивление где Tesseract не справляется, Windows OCR спокойно переваривает выделенный текст. Но он имеет урезанную функциональность относительно Tesseract - нельзя узнать, точность распознавания, допускает ошибки, которые не делает Tesseract. Вроде бы меня устраивает, приложение станет работать намного круче. А можно что бы еще лучше?
Решение 4. Найти другой OCR движок

Плюнуть и как в Translumo попробовать EasyOCR? Но он требовательный к ресурсам. Почитав документацию EasyOCR и глянув в исходный код Translumo, я понял, что EasyOCR работает на Python и автор Translumo связал между собой Python и C# код. А что если OCR движок нужно искать не для C#, на котором я пишу, а для Python? И тут я натыкаюсь на PaddleOCR - это обученный нейросеткой китайский мощный OCR движок для распознавания текста на абсолютно разных фотографиях + имеет фичу распознавания иероглифов.

Примеры с которыми справляется PaddleOCR меня удивили и я понял, что мне стоит попробовать проверить этот движок.

Идентификационная табличка на автомобиле
Идентификационная табличка на автомобиле
Пример распознавания посадочного талона
Пример распознавания посадочного талона

Целый день мучаясь с попытками запустить это Python решение на C#, я случайно натыкаюсь на готовую китайскую библиотеку PaddleSharp! И уже через час у меня начинает работать PaddleOCR. Результаты распознавания меня очень сильно порадовали, это не стоит рядом с Tesseract и Windows OCR! Единственное, что потребление ресурсов CPU 15 - 20%, Tesseract же грузил процессор всего на 10% (проц. AMD Ryzen 2600). Правда что бы добиться этих 15-20%, пришлось немного подкрутить настройки библиотеки, но я думаю качественное распознавание того стоит.

А так как этот OCR еще умеет и в иероглифы, я могу добавить распознавание китайского, корейского и японского языка.
Выбираем PaddleOCR и точка.

Не Гуглом единым

Меня тяготило качество перевода Google Translate, я хотел добавить альтернативных переводчиков. Раз на Python много всяких нейросетевых моделей, может есть модели переводчиков? И действительно есть!

Для проверки качества перевода я снова взял кусок описания самой лучшей хостес серии 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.

SeamlessM4T

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

Ору в голос
Ору в голос

Комментарии я думаю излишни.

NLLB

Типа очень крутая модель от запрещенной в Российской Федерации организации Facebook, которую я часто видел в рекомендациях:

Почему такая фиксация на насосах мне до сих пор непонятно.
Почему такая фиксация на насосах мне до сих пор непонятно.

EasyNMT

Эта библиотека Python, ассоциирует себя с альтернативой NLLB.

Здесь Серёжкам обручаться нельзя - это понимать надо.
Здесь Серёжкам обручаться нельзя - это понимать надо.

Вывод на Python нет хороших нейросетевых переводчиков на русский язык.

По моему мнению самым лучшим переводчиком является DeepL - но у него есть лимиты. Надо искать, что то безлимитное и потратив еще денёк на поиски я наткнулся на очень хорошую библиотеку, которая без особых для меня усилий, позволила мне добавить перевод от Bing и Yandex.

Причем перевод от Yandex с английского на русский, мне понравился намного больше чем перевод от Google.

Спасибо всем тем кто дочитал до сюда. Буду рад вашим комментариям, вопросам и пожеланиям!

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

180180
1717
54 комментария

теперь можно нормально пройти серию trails, спасибо)

5
Ответить

А там ещё много не переведенного?

Ответить

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

2
Ответить

Нормально будет такое хрючево потреблять? Машинный перевод с машинной озвучкой?

7
3
Ответить

С такими темпами развития нейросетей это не за горами

2
Ответить

Очень круто. Впечатляюще... Но как на счёт не просто отдельного окошка диалога с переводом, а оверлея наложения на разные зоны сверху окна игры? Как это делает Mort например
https://github.com/killkimno/MORT

4
Ответить

Идею понимаю, но всё таки переводчики, не знают контекста или могут что то упустить, поэтому хотелось оставить возможность видеть оригинальный текст

3
Ответить