UoKit.com Форумы > Кликер > UO Pilot
Страницы: 1, 2, 3
Levo222
Есть строка 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) или что? Куда поставить параметры поиска?
пробовал менять местами не помогает.
Вверх
DarkMaster
Для начала было бы неплохо открыть справку...
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

Вверх
Levo222
/
Цитата(DarkMaster @ 4.5.2018, 22:21)

Для начала было бы неплохо открыть справку...
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

Я понял, но в вашем примере
set #a FindImage(0 0 1920 1080 (C:\UOPilot\images\image.bmp) %arr #handle 80 -1 3)
при расположении параметров поиска таким образом он не улучшается, т.е. изображения всёравно путаются. Причем на одном компьютере боле-менее, на другом вообще никак. В ином случае это работало когда были черные окна, но в белых вообще никак.
что именно можно поменять чтобы улучшить точность поиска - вот в данном случае 80 -1 3 какой из параметров убран? Потому что их 4, а тут 3. я делаю всё так как там написано, но у меня текст путается
Вверх
DarkMaster
Что значит "путаются"? Какие еще черные и белые окна?

Порядок и возможные сочетания параметров указаны выше:
set #a FindImage (#StartX #StartY #EndX #EndY ($filename) %ResultArray [#type [#accuracy [#count [#deviation]]]] [abs])
Вверх
Levo222
Цитата(DarkMaster @ 4.5.2018, 22:41)

Что значит "путаются"? Какие еще черные и белые окна?

Порядок и возможные сочетания параметров указаны выше:
set #a FindImage (#StartX #StartY #EndX #EndY ($filename) %ResultArray [#type [#accuracy [#count [#deviation]]]] [abs])

т.е. если указано 3 числа, то что это обозначает? Каким образом я должен понять #type, #accuracy #count или #deviation убран
Так ладно понял убран последний видимо, если я уберу погрешность ничего не изменится?
Да и если "ограничение количества найденных изображений. По умолчанию установлено для одного изображения - значение 1, для всех возможных - значение -1" - то мне лучше что 1 поставить?
С погрешностью цвета не связывался ибо он там всюду белый

Просто скажите будет ли работать таким образом set #EU findimage(0 0 200 100 (C:\EU.bmp) %arr #Alert %arr2 2 100 20 5) и мне продолжить играть с настройками типа/погрешности и прочим, или это впринципе неправильное написание?
Вверх
DarkMaster
Цитата
неправильное написание

Пожалуйста, уделите 10-15 минут внимательнмоу прочтению справки по оператору. Там все это разъяснено. Порядок параметров я выше вам дважды привел. Скобки указывают на возможность их опустить. По количеству изображений невозможно сказать, что вам нужно ставить. Откуда я знаю вам нужно найти одно или пять или все существующие? Сколько нужно - столько и ставьте.
Поповоду вашего написания... Вы сами можете пояснить, каким параметром, что вы задали?
Вверх
Levo222
Цитата(DarkMaster @ 5.5.2018, 0:33)

Пожалуйста, уделите 10-15 минут внимательнмоу прочтению справки по оператору. Там все это разъяснено. Порядок параметров я выше вам дважды привел. Скобки указывают на возможность их опустить. По количеству изображений невозможно сказать, что вам нужно ставить. Откуда я знаю вам нужно найти одно или пять или все существующие? Сколько нужно - столько и ставьте.
Поповоду вашего написания... Вы сами можете пояснить, каким параметром, что вы задали?

Меня просто интересует почему не работает такой порядок написания
set #EU findimage(0 0 200 100 (C:\EU.bmp) %arr #Alert 2 100 20 5)(который строго по примеру)
и поиск никак не улучшается, будь то 1 тип или второй, текст всёравно путается.
Приведу вам пример

На приведенном рисунке 1 это тип актива
а 2 это его направление, и каждый из них он путает между собой
Может распознать как 1 так и второй, а может и наоборот, хоть 100% точность ставь хоть 200 ничего не меняется, поэтому я и задался вопросом почему такой порядок написания в порядке после окна не приносит результатов? Куда нужно поставить эти параметры, чтобы они начали работать?
(Менял тип, точность, погрешность и количество, ничего не происходит)
Вверх
FREEON
Цитата(Levo222 @ 5.5.2018, 6:36)

Меня просто интересует почему не работает такой порядок написания
set #EU findimage(0 0 200 100 (C:\EU.bmp) %arr #Alert 2 100 20 5)(который строго по примеру)
и поиск никак не улучшается, будь то 1 тип или второй, текст всёравно путается.
Приведу вам пример

На приведенном рисунке 1 это тип актива
а 2 это его направление, и каждый из них он путает между собой
Может распознать как 1 так и второй, а может и наоборот, хоть 100% точность ставь хоть 200 ничего не меняется, поэтому я и задался вопросом почему такой порядок написания в порядке после окна не приносит результатов? Куда нужно поставить эти параметры, чтобы они начали работать?
(Менял тип, точность, погрешность и количество, ничего не происходит)

Интересно взглянуть на код где прописан поиск этих элементов и выложи сами изображения (нарезки) для поиска изображений. Можно их в одну картинку запихнуть рядом.
Вверх
DarkMaster
Цитата
Меня просто интересует почему не работает такой порядок написания
set #EU findimage(0 0 200 100 (C:\EU.bmp) %arr #Alert 2 100 20 5)(который строго по примеру)

По какому примеру? Я еще раз вам говорю: напишите по порядку какой параметр у вас за что должен отвечать. Синтаксис ошибочен.
Вверх
FREEON
Цитата(DarkMaster @ 5.5.2018, 10:33)

По какому примеру? Я еще раз вам говорю: напишите по порядку какой параметр у вас за что должен отвечать. Синтаксис ошибочен.

Похоже у него 0 0 200 100 это погрешность цвета и точность поиска. Он вместо облости координат ищображения вписал параметры поиска.
Вверх
Invision Power Board © 2001-2024 Invision Power Services, Inc.
Version for Pocket PC © 2006-2024, IPBest Studio.