Принцип работы и использование автоматизации операций GUI с помощью распознавания изображений
При записи и воспроизведении макросов многие сталкиваются с ситуацией: «Вчера всё работало, а сегодня клик происходит не там». Чаще всего причина в том, что записанный макрос ориентируется на фиксированные координаты экрана. Если окно открылось в другом месте, изменилось разрешение экрана или макрос запускается на другом мониторе, клик попадает не туда, куда нужно. Автоматизация на основе распознавания изображений решает эту фундаментальную проблему.
Распознавание изображений — это технология, которая ищет элементы на экране не по координатам, а по их внешнему виду. Небольшое изображение нужной кнопки заранее регистрируется, а при воспроизведении инструмент сканирует весь экран и находит область, соответствующую этому изображению. Куда бы ни переместилась кнопка, ее можно точно найти и нажать, если ее внешний вид не изменился. В этом и заключается преимущество распознавания изображений.
Как распознавание изображений находит элементы
Механизм прост. Сначала нужно сделать и сохранить небольшое изображение элемента, который будет служить ориентиром, например кнопки «Отправить» или определенного значка. Это изображение-шаблон. При запуске макроса инструмент делает снимок текущего экрана и ищет на нем область, соответствующую изображению-шаблону. Найдя совпадение, он возвращает координаты центра этой области, после чего макрос перемещает туда указатель мыши и выполняет клик.
Важной настройкой здесь является порог совпадения, то есть точность сопоставления. Изображения не обязаны совпадать на 100 %: например, можно считать совпадением сходство на уровне 90 % и выше. Высокий порог уменьшает количество ложных срабатываний, но из-за незначительных визуальных различий нужный элемент может не найтись. Низкий порог повышает гибкость, однако увеличивает риск ошибочно выбрать другой похожий элемент. Оптимальное значение лучше подбирать опытным путем на реальном экране.
Когда использовать FIND_IMAGE и WAIT_IMAGE
В makuroku предусмотрены две основные команды для использования распознавания изображений из скрипта. FIND_IMAGE ищет, где именно на экране находится нужное изображение в текущий момент. Найденные координаты можно сохранить в переменной, поэтому команда подходит, например, для нажатия кнопки, место появления которой заранее неизвестно.
Команда WAIT_IMAGE, в свою очередь, ожидает появления нужного изображения. Загрузка веб-страницы или запуск приложения занимают время, и если перейти к следующему действию до завершения процесса, оно завершится ошибкой. WAIT_IMAGE позволяет надежно синхронизировать автоматизацию с состоянием экрана, например дождаться появления значка завершения загрузки и только затем продолжить. Сочетание этих двух команд делает автоматизацию устойчивой к обычным для реальной работы колебаниям времени выполнения и менее подверженной сбоям.
Ситуации, в которых распознавание изображений особенно полезно
Распознавание изображений особенно эффективно в следующих ситуациях.
- • Приложения, в которых положение кнопок или окон каждый раз меняется
- • Когда нужно дождаться завершения загрузки или обработки и только затем продолжить
- • Экраны с динамической компоновкой, где задания координат недостаточно
- • Когда нужно запускать обработку при появлении определённого значка или состояния
Однако у распознавания изображений тоже есть ограничения. Сопоставление часто работает нестабильно для элементов, чей внешний вид постоянно меняется, а также для полупрозрачных или анимированных элементов. Кроме того, поскольку приходится сканировать весь экран, обработка занимает немного больше времени, чем при использовании координат. Не стоит заменять распознаванием изображений всё подряд. Практичнее разделить задачи: «там, где достаточно координат, использовать координаты, а распознавание изображений применять только там, где положение меняется». В этом и заключается секрет практичной и быстрой автоматизации.
Как правильно подготовить изображения-шаблоны
Точность распознавания во многом зависит от качества зарегистрированного изображения-шаблона. Есть несколько полезных приёмов. Прежде всего, область, используемая как ориентир, должна быть «небольшой и характерной». Лучше вырезать не всю кнопку, а только уникальный для неё значок или текст — так её будет сложнее перепутать с другими элементами. И наоборот, если захватить слишком большую область, даже небольшие изменения вокруг, например цвет фона или соседний элемент, могут помешать сопоставлению.
Также следует избегать областей, цвет или состояние которых часто меняется. Если в качестве ориентира выбрать кнопку, меняющую цвет при наведении мыши, или область, подсвечиваемую при выборе, то в зависимости от состояния сопоставление может не сработать. Выбирайте стабильную область, которая всегда выглядит одинаково. Кроме того, при изменении масштаба экрана меняется и размер изображения, поэтому надёжнее всего создавать шаблон при тех разрешении и масштабе, которые будут использоваться в работе. Совокупность таких небольших мер значительно повышает вероятность успешного распознавания.
Сочетание распознавания изображений с другими методами
Распознавание изображений — мощный, но не универсальный инструмент. Чтобы создать надёжную автоматизацию для реальной работы, следует сочетать несколько методов там, где каждый из них наиболее уместен. Для кнопки, положение которой никогда не меняется, достаточно быстро указать координаты. Распознавание изображений стоит использовать только для кнопок с меняющимся положением или элементов, появление которых занимает некоторое время. Если нужно прочитать текст с экрана, применяется OCR (распознавание текста), а для интеграции с внешними сервисами — обмен данными по HTTP. Иными словами, метод выбирается в соответствии с задачей.
makuroku позволяет свободно сочетать все эти методы в одном скрипте. Например: «дождаться готовности экрана с помощью WAIT_IMAGE, найти кнопку через FIND_IMAGE и щёлкнуть по ней, считать числовой результат посредством OCR, а затем выбрать дальнейшую обработку с помощью условного ветвления». Так можно описать единым потоком гибкую автоматизацию, близкую к действиям человека. Не следует зацикливаться на одном методе — лучше использовать сильные стороны каждого и сочетать их. Именно такой подход быстрее всего приводит к автоматизации, действительно пригодной для практической работы.
Что делать, если распознавание изображений работает некорректно
При использовании распознавания изображений иногда возникает ситуация, когда изображение, которое вы вроде бы зарегистрировали, не удается найти. Причин может быть несколько. Чаще всего масштаб интерфейса или разрешение экрана при создании изображения-шаблона отличаются от параметров во время фактического поиска. Из-за этого размер изображения меняется и совпадение не обнаруживается. Самое надежное решение — заново создать шаблон с теми же настройками, которые используются в рабочей среде.
Следующая по распространенности причина — слишком строгий порог совпадения. Если требовать полного совпадения на 100%, изображение может не обнаружиться даже из-за едва заметного различия оттенков или сглаживания. Распознавание часто становится стабильнее, если немного снизить порог и считать совпадением сходство примерно на 90%. Однако слишком низкий порог увеличивает число ложных срабатываний, поэтому оптимальное значение следует подбирать, проверяя результат на реальном экране.
Если проблема не исчезла, пересмотрите саму область, выбранную для шаблона. Если ориентиром служит участок с часто меняющимся фоном или область, которая подсвечивается при выборе, ее внешний вид будет зависеть от ситуации и совпадение не обнаружится. Ограничьте шаблон характерным и стабильным участком, который всегда выглядит одинаково, например уникальным значком или логотипом. Это повысит вероятность успеха. Выбор легко распознаваемого ориентира — главный секрет стабильного распознавания изображений.
Вначале настройка распознавания изображений требует некоторых усилий, но после правильной конфигурации оно обеспечивает гибкость, недоступную при использовании фиксированных координат. Даже если окно переместится или изменится макет, система среагирует точно, пока внешний вид остается прежним. Такая надежность дает уверенность в том, что автоматизацию можно долго использовать в реальной работе.
Практический сценарий с использованием распознавания изображений
Рассмотрим возможности распознавания изображений на конкретном примере. Допустим, нужно автоматизировать регулярную загрузку данных из некоторого Web-приложения. При каждом входе в него компоновка экрана слегка меняется, а кнопка загрузки не имеет постоянного положения. Макрос с фиксированными координатами не может адаптироваться к таким изменениям и быстро перестает работать.
Здесь и пригодится распознавание изображений. Сначала зарегистрируйте значок кнопки загрузки как изображение-шаблон. Макрос с помощью WAIT_IMAGE ожидает завершения загрузки страницы, затем использует FIND_IMAGE, чтобы найти кнопку загрузки на экране и щелкнуть по ее местоположению. Где бы ни появилась кнопка, система точно найдет ее и выполнит щелчок, пока внешний вид остается прежним. Благодаря этому автоматизация работает стабильно и не зависит от изменений макета.
Кроме того, если с помощью WAIT_IMAGE дождаться сообщения о завершении загрузки и только после этого перейти к следующему этапу, ничего не будет пропущено даже при медленном соединении. Таким образом, распознавание изображений переносит в автоматизацию привычную для человека логику: оценить состояние экрана и в нужный момент выполнить действие в нужном месте. Именно поэтому надежную автоматизацию можно создавать даже в постоянно меняющейся реальной рабочей среде.
Такие сценарии применимы не только к Web-приложениям, но и к настольным приложениям, бизнес-системам и множеству других областей. Благодаря распознаванию изображений можно автоматизировать даже задачи, от которых раньше отказывались из-за перемещения элементов или непредсказуемого времени их появления. Для начала вспомните задачу, в которой положение элемента постоянно смещалось и создавало проблемы, и попробуйте стабилизировать ее с помощью распознавания изображений.
Как создавать надежную автоматизацию
Практическая пригодность автоматизации определяется тем, насколько хорошо она выдерживает непредвиденные ситуации. Автоматизация, основанная только на записанных координатах, может успешно сработать в первый раз, но часто останавливается при малейшем изменении среды. Добавив распознавание изображений, можно перенести в автоматизацию решения, которые человек принимает неосознанно, например щелкнуть, ориентируясь на внешний вид, или дождаться готовности экрана.
Помимо записи действий через GUI, makuroku в стандартной комплектации поддерживает команды распознавания изображений, такие как FIND_IMAGE и WAIT_IMAGE. Сначала запишите действия, чтобы создать основу, а затем замените распознаванием изображений только те этапы, где меняется расположение элементов или необходимо дождаться подходящего момента. Такое сочетание позволяет создавать автоматизацию, которая не ломается при первой же непредвиденной ситуации, а выдерживает хаотичность реальных условий. Все функции можно попробовать бесплатно, поэтому для начала стабилизируйте с помощью распознавания изображений те задачи, где «положение элементов каждый раз смещалось и создавало проблемы».
Попробовать бесплатно
Автоматизируйте это с makuroku
makuroku записывает мышь и клавиатуру, а затем воспроизводит автоматически. Добавьте SCR-скрипты и интеграцию с ИИ (MCP), когда нужно больше. Все функции бесплатны на Windows.
Ещё статьи