Клиенту было необходимо решение, которое будет распознавать текст в диалоговых пузырях на изображениях манги. Но более конкретно было нужно:
При этом решение должно корректно работать с изображениями в формате TIF и уметь помещать перевод текста на изображения в формате indesign. Также есть требования к кроссплатформенности - приложение должно корректно работать под MacOS и Linux.
В решении этой задачи можно выделить следующие сложности:
Первым делом мы обработали изображения с помощью PaddleOCR. PaddleOCR содержит мультиязыковую модель распознавания, включая японский и китайский, и отдельную сетку для распознавания направления текста.
Результаты получились неудовлетворительными (найденный текст выделен зеленым цветом, распознанный текст напечатан синим цветом слева вверху).
PaddleOCR довольно плохо детектит текст, и не весь найденный текст распознает. Также есть проблемы с распознаванием текста, расположенного под углом, и путаница с направлением текста.
Затем мы обратились к MangaOCR, которая обучалась на японском тексте с упором на японскую мангу.
Ниже приведены результаты распознавания кусочков с текстом моделью MangaOCR (слева кусочек исходного изображения с текстом, справа распознанный текст).
Модель понимает направление текста и неплохо обрабатывает текст под углом. Однако она не дает никакой информации о расположении текста, то есть не решает проблему удаления текста на изображениях.
Модель Manga-Text-Segmentation находит текст на входных изображениях, работает с японскими языками и также специализируется на манге. Таким образом, она подходит для удаления текста с изображений.
Мы применили модель к тому же изображению. Результаты получились самыми удовлетворительными. Ниже слева представлено исходное изображение, справа - результат сегментации: пиксели, соответствующие тексту, показаны белым цветом, остальные пиксели — черным.
Мы можем рассматривать изображение справа как маску, с помощью которой можно удалить текст с изображения. Если сделать области с текстом более жирными (используя метод cv2.dilate библиотеки openCV), тогда сможем корректно очистить области с текстом и удалить все ненужные артефакты. Подход оказался рабочим.
Мы решили объединить в один алгоритм две модели, каждая из которых успешно решает отдельную подзадачу проекта следующим образом:
Иногда очищение текста с исходного изображения получается неидеальным. Чаще всего причина кроется в том, что комиксы и фон, на котором располагается текст, довольно неоднородны, поэтому алгоритм иногда удаляет лишние элементы, либо не удаляет текст до конца.
Но мы сумели настроить модель так, чтобы текст полностью удалялся с изображения, не оставляя лишних пикселей. Но при ситуации наложения текста на фон всегда будет компромисс между тем, как много текста мы удалим и как много фонового рисунка сохраним.
Иногда модель Manga-Text-Segmentation находит текст там, где его нет, и поэтому неправильно подчищает изображение.
Поэтому мы применили модель Manga-Text-Segmentation не ко всему изображению, а к его частям. Результаты получились лучше, но все же были удалены незначительные части изображения.
Можно рассмотреть другие подходы для улучшения удаления текста, например Stable Diffusion model. Stable Diffusion — это генеративная модель глубокого обучения, которая используется для генерации детальных изображений на основе текстовых описаний или других изображений.
В нашем случае мы можем обучить модель так, чтобы она возвращала изображение без текста в качестве выходных данных. Но этот подход является самым сложным с точки зрения времени разработки и требуемых данных для обучения.
Поэтому мы остановились на модели Manga-Text-Segmentation, допустив при этом, что незначительные изменения исходного изображения являются вариантом нормы.
Еще одна сложность заключается в том, что модель MangaOCR плохо воспринимает текст разного размера. В приведенных ниже примерах модель распознала крупный текст, но не распознала мелкий текст между крупными иероглифами.
Эту проблему мы решили следующим образом: сначала распознаем крупный текст, затем удаляем его при помощи сегментационной маски, ориентируясь на размер букв, после чего распознаем мелкий текст.