ScreTran v1.2 - ДЕЙСТВИТЕЛЬНО Экранный переводчик в реальном времени
Я добавил демонстрацию работы приложения в сложных условиях, например как это работает в Final Fantasy, в статье о Translumo говорилось, что с этой игрой ни один OCR не справится, как видите всё работает:
Кроме этого теперь есть возможность выбрать из нескольких переводчиков: Google, Yandex, Bing
Добавил чисто экспериментальную функцию по выбору модели распознавания. Теперь приложение может распознавать японские, китайские и корейские иероглифы. Функция экспериментальная потому, что тестировалось достаточно мало и добавлено больше по просьбе пользователей.
Так как при обращении к переводчикам используется автоопределение языка распознанного текста, то в теории (ВОЗМОЖНО) переводится будет не только с английского языка, а например с испанского или другого языка использующего латинский алфавит.
А теперь совсем длинно или о моих сладостных страданиях
Первая версия приложения работала хорошо, но не обходилось и без казусов.
Всё таки Tesseract, используемый для распознавания текста, явно давал знать, что он используется для распознавания текста документов, хотя очень хотелось, что бы он работал везде (или хотя бы в Yakuza). Как решить?
Решение 1. Обучить Tesseract шрифтам Yakuza.
Я сделал более 400 скринов диалогов из игры и начал обучать модель:
Обучил и начал проверять, по ощущениям стало чуть лучше, но стало ЗНАЧИТЕЛЬНО больше опечаток. Может быть надо модель обучить конкретно шрифту? Порывшись в Discord-е мододелов Yakuza, я нашел способ вытащить шрифт из игры:
Кстати, а вы знали, что в 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
теперь можно нормально пройти серию trails, спасибо)
А там ещё много не переведенного?
Крутяк, крутяк. Нижайший поклон за ваши труды. Было бы идеально, если б этот переведённый текст ещё и голосом озвучивался
Нормально будет такое хрючево потреблять? Машинный перевод с машинной озвучкой?
С такими темпами развития нейросетей это не за горами
Очень круто. Впечатляюще... Но как на счёт не просто отдельного окошка диалога с переводом, а оверлея наложения на разные зоны сверху окна игры? Как это делает Mort например
https://github.com/killkimno/MORT
Идею понимаю, но всё таки переводчики, не знают контекста или могут что то упустить, поэтому хотелось оставить возможность видеть оригинальный текст