Есть игра. Персонаж игры произносит много разных реплик (~400 штук). Они показваются текстом в левом верхнем углу экрана. Примеры:
Задача в игре поймать 250 разных реплик. Моя задача вести учет того, что уже поймано. Знать количество пойманых уникальных. Играя я делаю скриншоты. Часто делаю дубликаты, так как не помню, видел эту фразу или нет.
Т.е. на входе есть папка со скриншотами. Все скриншоты однонотипные. Текст всегда в одном и том же месте, можно выделить прямоугольником, например. Строчек может быть одна или две. Шрифт, цвет и прочее всегда одни и те же. Текст только на английском. Шрифт неизвестен. Фон не совсем черный. Он немного прозрачный, сквозь него проступает что-то там из игры.
Я вижу два подхода:
1. Вариант раз
Удалить дубликаты. Пробежаться по всем скриншотам, выделить область текста, попарно сравнить. Как-то так.
2. Вариант два
Распознать все эти тексты, сохранить построчно в текстовик. Что делать с текстами, понятно.
Вопрос
Я не программист, последний раз кодил в университете, сейчас верстаю HTML. Тем не менее задача мне не кажется сложной, плюс допустимы упрощения/упущения, лишь бы работало. Знаком с С/C++ из университетских курсов. "Hello, World!" написал, что делать дальше? :)
Ответ
Я так понимаю, что мне нужна библиотека для работы с изображениями. Наверное мне нужно посоветовать что-то подходящее под задачу. Чтобы мне было с чего начать гуглить.
В общем описать алгоритм, типа "сначала научись открывать файлы", "затем научись выделять нужную область", "после научись кропать картинку", "в итоге при помощи технологии Х научись выводить на экран текст". Ну и, конечно, что читать?
Спасибо!
Используйте библиотеку OpenCV, самый простой вариант работы с изображениями, по-моему... За счет документации, примеров и поддержки нескольких языков.
Первым делом вырезаем прямоугольник с текстом.
Во-вторых, оставляем только те пиксели, которые белого цвета (насколько понял, фон меняется, а вот текст всегда белый).
В-третьих, уменьшить размер... Я бы предложит выкинуть пару раз каждый второй ряд и столбец из изображения, чтобы текст оставался читаем.
А дальше находим какую-нибудь хэш-функцию по изображению. И тогда надо будет сравнивать с набором чисел. Могу немного подробней расписать, если какой-то момент непонятен.
UPD Уточнения
1) OpenCV - один раз установил и потом проблем не будет.
2) "Удалить" фон нужно для того что бы все в итоге полученные картинки были строго одинаковые. Это будет гарантировать, то что вы не спутаете две картинки, даже если будете сравнивать попиксельно.
3) Первоочередным является уменьшить размер, что бы уменьшить коллизий при создании хэш-функции. Но и да, это должно очень повысить производительность. (Если два раза выкинуть каждую второю строку и 2 раза выкинуть каждый второй столбец, то это размер данных у вас уменьшиться примерно в 16 раз)
4) После обработки мы имеем черно-белые прямоугольники одинакового размера. Можно составить одну большую строку из 0 и 1. Можно конечно хранить такие строки и сравнивать их, но это тоже не слишком эффективно.
Наиболее эффективная хэш-функция для строк - это полиномиальный хэш. Вот тут хорошая статья с исходным кодом.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости