Распознать текст на пачке скриншотов

Рейтинг: 1Ответов: 2Опубликовано: 17.01.2015

Есть игра. Персонаж игры произносит много разных реплик (~400 штук). Они показваются текстом в левом верхнем углу экрана. Примеры:

alt text alt text

Задача в игре поймать 250 разных реплик. Моя задача — вести учёт того, что уже поймано, количеству пойманных уникальных реплик. Играя, я делаю скриншоты. Часто делаю дубликаты, так как не помню, видел эту фразу или нет.

Т.е. на входе есть папка со скриншотами. Все скриншоты однотипные. Текст всегда в одном и том же месте (его можно выделить прямоугольником). Строчек может быть одна или две. Шрифт, цвет и прочее всегда одни и те же. Текст только на английском. Шрифт неизвестен. Фон не совсем чёрный, он немного прозрачный (сквозь него проступает что-то там из игры).

Я вижу два подхода:

1. Вариант раз
Удалить дубликаты. Пробежаться по всем скриншотам, выделить область текста, попарно сравнить. Как-то так.

2. Вариант два
Распознать все эти тексты, сохранить построчно в текстовик. Что делать с текстами — понятно.

Вопрос
Я не программист, последний раз кодил в университете, сейчас верстаю HTML. Тем не менее, задача мне не кажется сложной, плюс допустимы упрощения/упущения, лишь бы работало. Знаком с С/C++ из университетских курсов. "Hello, World!" написал, что делать дальше? :)

Ответ
Я так понимаю, что мне нужна библиотека для работы с изображениями. Наверное мне нужно посоветовать что-то подходящее под задачу. Чтобы мне было с чего начать гуглить.
В общем описать алгоритм, типа "сначала научись открывать файлы", "затем научись выделять нужную область", "после научись кропать картинку", "в итоге при помощи технологии Х научись выводить на экран текст". Ну и, конечно, что читать?

Спасибо!

Ответы

▲ 3Принят

Используйте библиотеку OpenCV, самый простой вариант работы с изображениями, по-моему... За счет документации, примеров и поддержки нескольких языков.

Первым делом вырезаем прямоугольник с текстом.

Во-вторых, оставляем только те пиксели, которые белого цвета (насколько понял, фон меняется, а вот текст всегда белый).

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

А дальше находим какую-нибудь хэш-функцию по изображению. И тогда надо будет сравнивать с набором чисел. Могу немного подробней расписать, если какой-то момент непонятен.

UPD Уточнения

1) OpenCV - один раз установил и потом проблем не будет.

2) "Удалить" фон нужно для того что бы все в итоге полученные картинки были строго одинаковые. Это будет гарантировать, то что вы не спутаете две картинки, даже если будете сравнивать попиксельно.

3) Первоочередным является уменьшить размер, что бы уменьшить коллизий при создании хэш-функции. Но и да, это должно очень повысить производительность. (Если два раза выкинуть каждую второю строку и 2 раза выкинуть каждый второй столбец, то это размер данных у вас уменьшиться примерно в 16 раз)

4) После обработки мы имеем черно-белые прямоугольники одинакового размера. Можно составить одну большую строку из 0 и 1. Можно конечно хранить такие строки и сравнивать их, но это тоже не слишком эффективно.

Наиболее эффективная хэш-функция для строк - это полиномиальный хэш. Вот тут хорошая статья с исходным кодом.

▲ 4

Есть программа заточенная для создания ботов. Кибор. Там есть функция распознавание текста. Можно текст распознавать прямо с экрана в играх. Генерируется готовый скрипт. Даже можно без программирования такой скрипт создать. Для этого есть визуальный редактор кода.

Настройка распознавания текста

Создание скрипта

Вставка скрипта для исполнения

Выполнение скрипта. Распознавание текста в указанной области

Как я говорил можно создать программу которая будет сама распознавать текст в указанной области и делать с ним что надо. Записывать в файл, выдавать сообщение если нужный текст найден и т.д. Такой скрипт можно создать даже не зная программирования. В визуальном редакторе кода. На этих видео показана работа и настройка распознавания текста

работа и настройка распознавания текста

На этом видео показан процесс создания готового бота для игры, где требуется распознавать текст. Бот создается без программирования

Оптическое распознавание текста в Кибор Бот для Music Wars

Сам Кибор Кибор