Skip to content
RiMikheev edited this page Jun 2, 2023 · 2 revisions

Эксперимент.

Исследование улучшения/ухудшения качества и скорости распознавания текста на экране с использованием обрезки изображения.

Проблема.

Проблема заключается в том, что текущая версия функции для распознавания текста на изображении find_text() не предоставляет достаточной точности и скорости обнаружения и требует улучшения.

Идея.

Идея заключается в том, чтобы дать возможность пользователю указать область, в которой необходимо искать нужные слова. Изображение делится на 9 частей:

center
top-left
left
bottom-left
top
bottom
top-right
right
bottom-right

При вызове функции, изображение обрезается в соответствии с заданной областью и осуществляется поиск. Так же, может произойти ситуация, когда часть нужного слова обрежется и оно не будет найдено. На такой случай нужно увеличить область обрезки. Было решено проводить поиск текста в 2 итерации: с изображением размером 1/3 параметров ширины и высоты соответственно, и 1/2 в случае неудачи.

Реализация.

Для реализации данной идеи были разработаны 2 дополнительные функции: find_crop_image() и crop_image(). Для задания области в класс SearchedText была добавлена переменная area: str.

Так же было принято решение в функцию find_text() добавить параметр extend, определяющий параметр кадрирования (обычная или увеличенная область).

Функция find_text(), перед началом поиска, вызывает find_crop_image(). Она вызывает функцию crop_image(), передавая значения множителей ширины и высоты для верного выделения нужной части изображения. crop_image() возвращает новое обрезанное изображение или исходное, если area='all'.

В функциях, использующих find_text(): find_text_on_screen(), check_text() и check_text_on_screen() был реализован алгоритм двойного поиска, если при обрезке со стандартным размером области не находится искомый текст, снова вызывается функция поиска с параметром extend=True

Из функции find_text() был удален алгоритм обработки изображения и преведения его к черно-белому формату, а так же параметр inv. Данное решение было принято по нескольким причинам:

  1. Обработка изображения занимает большое кол-во времени;

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

Тестирование.

Для проведения тестирования был выбран набор из 11 изображений. Всего осуществляется поиск 374 слов. Результаты представлены ниже:

Первоначальные результаты:

  • Общее время выполнения: 2355 сек.

  • Общее кол-во тестов: 374

  • Общее количество успешно выполненных тестов: 307

  • Общее количество неуспешно выполненных тестов: 67

  • Процентное соотношение успешно выполненных тестов: 82.1%

Результаты после добавления обрезки:

  • Общее время выполнения: 647 сек.

  • Общее кол-во тестов: 374

  • Общее количество успешно выполненных тестов: 334

  • Общее количество неуспешно выполненных тестов: 40

  • Процентное соотношение успешно выполненных тестов: 89.3%

Вывод.

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