Как найти изображение
Найти изображение и вывести координаты
Выводим координаты найденной картинки
Импортировать готовый пример можно отсюда https://eu.eyeauras.net/share/S20240223230622FB6T3303xKok
Поиск прямо из скрипта
Для разового поиска создавать ауру с триггером не нужно. В работающем
EyeAuras с модулем OpenCV выберите окно и укажите свой абсолютный путь к
PNG-шаблону. Пример использует стандартный ForWindow, полный кадр без ROI
и явный порог сходства. Настройки этого accessor и координаты источника
описаны в захвате и OCR.
using System.Drawing;
using EyeAuras.OpenCVAuras.Scripting;
using EyeAuras.Shared.Osd;
using PoeShared.Scaffolding;
var window = await GetService<IOsdSelectionService>().PickWindow();
{
using var cv = GetService<IComputerVisionExperimentalScriptingApi>().ForWindow(window);
var found = cv.ImageSearch(
@"C:\Templates\marker.png",
similarityThreshold: new Percentage(90),
region: Rectangle.Empty);
Log.Info(found.IsEmpty ? "Совпадений нет" : $"Найдено относительно окна: {found}");
}
Percentage(90) означает 90 процентов, не 0.9. Rectangle.Empty в
аргументе выбирает всю область, а в результате означает отсутствие совпадения.
Для оконного accessor простой результат уже преобразован в координаты окна.
Не вызывайте для него ещё раз raw ToScreen. Если нужны матрицы, используйте
ImageSearchRaw, проверьте nullable Detected.Bounds и примените ToScreen
к локальной области именно этого raw-результата. Ошибки чтения файла или
захвата не следует выдавать за отсутствие совпадения.
Использовать настроенный триггер ауры
- Создаем ауру(в примере называется ImageSearch), кидаем в нее триггер Image Search
- В
Image Searchвыберите окно или экран, изображение-образец и область поиска. Выставьте порог сходства; начальное значение триггера — 80 процентов. Это настройка готового триггера, а не значение 95 процентов из APICvAccessor. - В той же папке создаем ауру с действием
C# Scriptи вставляем код в верхнеуровневый файл. Путь.\ImageSearchищется относительно контекста скрипта; в найденной ауре должен бытьIImageSearchTrigger. - Копипастим, запускаем, если все хорошо - скрипт напечатает координаты
using EyeAuras.OpenCVAuras.Triggers.ImageSearch;
// находим ауру по имени и внутри нее находим триггер "Поиск изображения"
var trigger = AuraTree.GetTriggerByPath<IImageSearchTrigger>(@".\ImageSearch");
var matchResult = trigger.Refresh(); // заставляем триггер выполнить поиск
if (!matchResult.Detected.Success || matchResult.Detected.Bounds == null) {
// найти не удалось - больше делать нечего
Log.Warn("Image not found");
return;
}
// нашли изображение; Bounds относится к обработанному кадру, включая ROI/масштаб
var localRect = matchResult.Detected.Bounds.Value;
// конвертируем в экранные
var screenRect = matchResult.ToScreen(localRect);
Log.Info($"Image found @ {screenRect}");
Refresh() запускает синхронный захват и поиск по настройкам триггера. В Event Log появится экранный прямоугольник либо Image not found; если захват не работает, проверьте ошибки самого триггера. Его и результат захвата скрипт не владеет.
Для последующего клика преобразуйте результат через ToScreen и передайте экранную точку в ISendInputScriptingApi с TargetWindow = null. Ненулевой TargetWindow в стандартном контроллере включает активацию окна и преобразование координат — экранную точку нельзя преобразовывать повторно. Пример клика и маршруты к API — в поиске текста с кликом и карте CV.