Здравствуйте, гость ( Вход | Регистрация )

> Точность поиска Findimage + окно
Levo222
сообщение 4.5.2018, 17:38
Сообщение #1


*****

Journeyman
Сообщений: 399
Регистрация: 18.11.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.689



Есть строка set #EU findimage(0 0 200 100 (C:\EU.bmp) %arr #Alert) но ищет не точно
которая ищет в окне #Alert
но как сделать чтобы этот поиск был точнее, если добавлять в конец 2 100 20 5 это не работает
или добавлять %arr2 2 100 20 5 тогда тоже не работает.
может в скобки добавить ... set #EU findimage(0 0 200 100 (C:\EU.bmp) %arr2 (%arr #Alert) 2 100 20 5) или что? Куда поставить параметры поиска?
пробовал менять местами не помогает.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
 
Ответить в эту темуОткрыть новую тему
Ответов
DarkMaster
сообщение 4.5.2018, 18:21
Сообщение #2


***********

Модератор UOPilot
Сообщений: 9.743
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29661
Пользователь №: 11.279



Для начала было бы неплохо открыть справку...
FindimageОписание FindImage - оператор поиска сохраненного изображения в области заданной начальными и конечными координатами по оси XY.

Формат картинки должен быть: bmp 24 бита.
Цвет крайнего пикселя в левом верхнем углу изображения считается "цветом фона", и при поиске картинки на экране не учитывается. Например, цвет этого пикселя красный (255). В этом случае все пиксели красного цвета присутствующие на искомой картинке будут считаться фоновыми (прозрачными) и не будут сравниваться с тем, что присутствует на экране. Поэтому, нельзя чтобы в файле-картинке все пиксели были одного цвета. Нужно сделать, чтобы хотя бы один левый верхний пиксель цветом отличался от остальных.

Синтаксис Привязка к окну: опционально.
Работа со свернутым окном: нет.
Работа с перекрытым окном: Да. Привязка к окну обязательна. Aero (темы Windows) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена.

set #a FindImage (#StartX #StartY #EndX #EndY ($filename) %ResultArray [#type [#accuracy [#count [#deviation]]]] [abs])
Где:
<#a> - переменная, в которую записывается результат работы команды findimage:
Если #a = 0, значит поиск был произведён, но картинка не найдена.
Если найдена только 1 картинка, то будет записан процент точности найденного изображения.
Если найдено несколько картинок, то будет записано количество найденных изображений.
Однозначно определить сколько именно картинок было найдено командой FindImage лучше всего по размеру массива %ResultArray с помощью функции Size(%ResultArray).
#a < 0 означает, что FindImage не смог произвести поиск- либо была обнаружена ошибка в написании параметров команды, либо проблемы с самим файлом картинки.
Если #a = -4, значит файл картинки не найден / в неправильном формате / повреждён / все пиксели файла одного цвета. Чаще всего- путь к файлу указан неправильно.
<#StartX #StartY> - координаты левого верхнего угла области поиска.
<#EndX #EndY> - координаты правого нижнего угла области поиска.
<($filename)> - путь к сохранённому изображению (только файл формата bmp). Путь к изображению может быть указан как абсолютный - (C:\programms\pilot\images\), так и относительный - (images\). Указывается в круглых скобках. При использовании пробелов в адресе используйте кавычки либо строковую переменную(например $myPatch), предварительно присвоив ей(переменной) необходимый адрес.
<%ResultArray> - результирующий массив, в который записываются координаты изображения. Координатами изображения считается пиксель левого верхнего угла изображения. Если найдено несколько изображений, то координаты всех найденных изображений. Каждая строка массива хранится данные по отдельному найденному изображению: в первой колонке- координата X, во второй колонке- координата Y.
[#type] - тип поиска. Может принимать значения: 1 (надежный), 2 (быстрый). Настоятельно рекомендуется использовать быстрый способ поиска, кроме случаев с некорректным обнаружением изображения. По умолчанию 2й тип поиска.
[#accuracy] - точность поиска. Указывается в процентах. Используется для отсева изображений не достаточно схожих с оригиналом. По умолчанию значение равно 80%.
[#count] - ограничение количества найденных изображений. По умолчанию установлено для одного изображения - значение 1, для всех возможных - значение -1.
[#deviation] - Погрешность оттенка. Пример: есть погрешность 3%. точка имеет цвет 100 120 130, 255*3%=7, соответственно 100+/-7. При этом все цвета в пределах (93 113 123)-(107 127 137) будут считаться совпадением.
[abs] - флаг использования абсолютных координат. Если он указан то поиск происходит относительно левого верхнего угла экрана. Без флага поиск происходит относительно левого верхнего угла рабочего окна(привязанного через ctrl+a либо иным способом).

Если вы ищете на экране текст в виде картинки, и в системе используется сглаживание шрифтов, то могут быть проблемы с нахождением, даже если вы видите, что такой текст на экране есть. Все-равно при включенном сглаживании искомая картинка может незначительно отличаться от того что есть на экране. В этом случае рекомендуется снизить точность поиска либо отключить сглаживание шрифтов на компьютере, где используется findimage.

Коды ошибок FindImage:
'-1' упало при поиске, точная причина не известна
'-2' не нашли открывающую скобку после имени функции
'-3' не найдено пути в скобках
'-4' ошибка поиска файла
'-5' ошибка обработки искомого изображения
'-6' ошибка получения изображения с экрана.

Иногда требуется сделать клик не по самому изображению, а со смещением. Указывать можно как вначале скрипта так и перед функцией Findimage.

set findoffsetx 50 //смещение вправо на 50 пикселей
set findoffsety 30 //смещение вниз на 30 пикселей

set findoffsetx -40 //смещение вверх на 40 пикселей
set findoffsety -60 //смещение влево на 60 пикселей
Примеры // Пример 1
// перед запуском скрипта не забываем привязать скрипт к рабочему окну (Ctrl+A)
set #startX 100
set #startY 120
set #endX 300
set #endY 540
set $path "C:\Program Files\UOPilot\images\"
set %cash[1] картинка
// будем искать картинку из файла C:\Program Files\UOPilot\images\картинка.bmp
set #a findimage (#startX #startY #endX #endY ($path%cash[1].bmp) %crds 2)
if #a > 0
msg Изображение найдено в координатах X= %crds[1 1] Y= %crds[1 2]. Кликнем на нём...
left %crds[1 1] %crds[1 2] // кликнули
else
msg Изображение не найдено
end_if
В результате работы, если в заданной области картинка обнаружена, в массив %crds[1 1] будет записано значение координаты X для первой картинки, а в %crds[2 2] - значение Y для второй картинки.

// Пример 2
//поиск изображений (если будет найдено больше 20 поиск прекратится) с точностью 70% и отклонением в цвете 5%
set #check FindImage (#startX #startY #endX #endY (images\step.bmp) %crds 2 70 20 5)
// Пример 3
set #b FindImage (10 100 30 150 (d:\myImages\wolf.bmp) %arr 2 80 20 5)
// Пример 4
// будем искать картинку из файла картинка2.bmp, находящуюся в папке пилота
set #a findimage (100 120 1024 700 (\картинка2.bmp) %arr 2 80 -1)
set #w size (%arr) // получим число найденных картинок
msg Найдено картинок: #w
for #i 1 #w
set #x %arr [#i 1]
set #y %arr [#i 2]
msg картинка в координатах: #x #y
end_for
// Пример 5
// поиск нескольких картинок
// перед запуском скрипта не забываем привязать скрипт к рабочему окну (Ctrl+A)
set #startX 0
set #startY 0
set #endX 1920
set #endY 1080
set $path "C:\Program Files\UOPilot\images\" // путь к картинкам
set %image [1] картинка1 // имя изображения
set %image [2] картинка2 // имя второго изображения
set %image [3] картинка3 // третьего
set %image [4] карти // имена могут быть любыми

set #size size(%image) // всего картинок
hint Всего картинок #size

:metka
for #i 1 #size 1 // цикл для поиска картинок
set #a findimage (#startX #startY #endX #endY ($path%image[#i].bmp) %arr 2)
if #a > 0
move %arr[1 1] %arr[1 2] // переместить курсор на найденную картинку
wait 500 // ждать 0,5 секунды
end_if
end_for
wait 3000 // ждать 3 секунды
goto metka

Примеры поиска картинки в перекрытом(не свёрнутом) окне:
Привязка к окну обязательна. Aero (темы Windows 7) должен быть включен. Если был установлен Астер, то он должен быть отключен, а система перезагружена.
Окно может быть перекрыто полностью, частично или вообще не перекрыто. Может находиться за пределами экрана.
Иногда требуется указывать родительское окно. В окне пилота есть кнопка 'F', при нажатии открывается окно, в котором отображается что "видит" пилот при поиске (Findcolor, Findimage). Если в окне "чёрный квадрат", значит указано не то окно. В Windows 10 работает не во всех приложениях, может потребоваться установка Aero Glass.

// Пример 6
//Чтобы понять как работает поиск можно попробовать на рабочем столе найти значок 'Мой компьютер'.
//Делаем картинку значка в формате bmp, называем 'мойкомпьютер' (без кавычек), закидываем на диск 'C:'.
//При этом можно перекрыть значок каким-нибудь окном.

//Не забываем сделать привязку Ctrl + A.
set #a FindImage(0 0 1920 1080 (C:\мойкомпьютер.bmp) %arr workwindow)
if #a > 0
log Картинка найдена. Наведём на неё курсор.
move %arr [1 1] %arr [1 2]
End_script
else
msg Картинка не найдена.
end_if
// Пример 7
//Ищем картинку в окне Yandex, при этом не важно какое указано окно через Ctrl + A или сделано рабочим через 'set workwindow'.
set #handle FindWindow(Yandex) //поиск окна с именем Yandex
set #a FindImage(0 0 1920 1080 (C:\UOPilot\images\image.bmp) %arr #handle 80 -1 3) //поиск изображения
hint #a //в правом нижнем углу отображён результат поиска
if #a > 0
move %arr [1 1] %arr [1 2] #handle //навести курсор на первую найденную картинку
//обратите внимание, что в команде 'move' указан хендл окна
//т. е. курсор будет перемещён как будто привязка сделана к окну Yandex
End_script
end_if


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

Сообщений в этой теме
Levo222   Точность поиска Findimage + окно   4.5.2018, 17:38
Levo222   [quote name='DarkMaster' post='425100' date='4.5.2...   4.5.2018, 18:36
DarkMaster   Что значит "путаются"? Какие еще черные ...   4.5.2018, 18:41
Levo222   Что значит "путаются"? Какие еще черные...   4.5.2018, 18:43
DarkMaster   Пожалуйста, уделите 10-15 минут внимательнмоу про...   4.5.2018, 20:33
Levo222   Пожалуйста, уделите 10-15 минут внимательнмоу про...   5.5.2018, 6:36
FREEON   Меня просто интересует почему не работает такой п...   5.5.2018, 9:55
DarkMaster   По какому примеру? Я еще раз вам говорю: напишите...   5.5.2018, 10:33
FREEON   По какому примеру? Я еще раз вам говорю: напишите...   5.5.2018, 10:49
Levo222   Похоже у него 0 0 200 100 это погрешность цвета и...   5.5.2018, 10:51
Levo222   Похоже у него 0 0 200 100 это погрешность цвета и...   5.5.2018, 10:56
FREEON   [spoiler=код такой] set #AC findimage(0 0 200 100...   5.5.2018, 11:04
DarkMaster   По какому примеру? Я еще раз вам говорю: напишите...   5.5.2018, 10:53
DarkMaster   Это что?   5.5.2018, 11:01
Levo222   Это что? Это хэндл окна в котором происходит пои...   5.5.2018, 11:03
DarkMaster   А теперь еще раз прочитайте, как он задается.   5.5.2018, 11:06
Levo222   А теперь еще раз прочитайте, как он задается. Ну...   5.5.2018, 11:24
FREEON   Судя по всему вам ещё нужно прописать поиск findim...   5.5.2018, 11:36
DarkMaster   %arr #handle 80 -1 3 %arr #Alert 2 95 20 5 ничего ...   5.5.2018, 11:32
Levo222   %arr #handle 80 -1 3 %arr #Alert 2 95 20 5 ничего...   5.5.2018, 11:33
Levo222   %arr #handle 80 -1 3 %arr #Alert 2 95 20 5 ничего...   5.5.2018, 11:50
DarkMaster   Хендл это и есть тип поиска...   5.5.2018, 11:48
DarkMaster   Ни в коем случае. Может заменяться только хендлом...   5.5.2018, 12:07


Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 15.7.2025, 9:14
Designed by Nickostyle