Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

UoKit.com Форумы _ UO Pilot в онлайн играх _ findimage

Автор: dunkel 17.10.2022, 21:25

Решил воспользоваться findimage, но почему то она не видит изображения не в игре, не на рабочем столе, не в браузере. Поиск по цвету и другие функции отлично действуют. Пробовал на элементарном примере:

set #a findimage(0, 0, 1920, 1080 (d:\images\2.bmp") %arr 2 80 1 3)
hint #a
if #a > 0
move %arr[1 1] %arr[1 2]
wait 5000
end_if

Раньше таких проблем не было, но давно я не прибегал к помощи УО пилота наверное что-то забыл или какой то плагин не доставил.
win11, UOpilot v.2.42 WK

Автор: DarkMaster 19.10.2022, 9:56

у вас кавычка в адресе изображения только одна

Автор: dunkel 19.10.2022, 12:40

тоже не работает, я помимо него пробовал и другие варианты в том числе и пример с вики

set #startX 0
set #startY 0
set #endX 1920
set #endY 1080
set $path "d:\images\"
set %cash[1] 2
set #a findimage (#startX #startY #endX #endY ($path%cash[1].bmp) %crds 2)
if #a > 0
left %crds[1 1] %crds[1 2]
end_if

не знаю в чем может быть дело(

Автор: DarkMaster 19.10.2022, 13:32

Пилот запущен от админа?

Автор: dunkel 19.10.2022, 13:51

Цитата(DarkMaster @ 19.10.2022, 12:32) *

Пилот запущен от админа?

да, мб дело в windows 11? Я не могу найти "Aero" (Aero (темы Windows) должен быть включен.) ©. Или может я что-то не доставил, плагин какой-нибудь или библиотеку.



Автор: DarkMaster 19.10.2022, 14:27

Попробуйте сделать getimage, затем saveimage полученного изображения. Хоть поймем, что он видит.

Автор: dunkel 19.10.2022, 14:39

Проблема была в касперском, после его отключения всё работает. Спасибо за помощь.
Теперь возникла другая проблема это оттенки изображения которые постоянно меняется.
Как я понял за это отвечает #deviation? как мне выставить скажем точность картинки 60 процентов?
добавить в скрипт set #deviation 60?



Автор: DarkMaster 19.10.2022, 15:17

смотрите синтаксис финдимиджа. точность и девиэйшн указываются в хвосте.
разумная точность 80-94 для изображений, для текстов 94-98. Девиэйшн 2 - дает существенный положительный эффект, минусов почти нет. 7+ может начать давать ложно положительные поиски. Значения по сути подбираются вручную.

Автор: dunkel 19.10.2022, 19:28

Цитата(DarkMaster @ 19.10.2022, 14:17) *

смотрите синтаксис финдимиджа. точность и девиэйшн указываются в хвосте.
разумная точность 80-94 для изображений, для текстов 94-98. Девиэйшн 2 - дает существенный положительный эффект, минусов почти нет. 7+ может начать давать ложно положительные поиски. Значения по сути подбираются вручную.


Можете объяснить на примере этой строки?
set #a findimage(0, 0, 1920, 1080 (d:\images\1.bmp) %arr 2 80 1 3)

первое 2 это тип поиска? 2 - это быстрый (рекомендуемый)?
80 - это процент совпадения как я понимаю? то есть девейшен?
а последние 1 и 3 это что?

Не могу понять где мне задать погрешность на тональность? цвета (из за времени суток она разниться) (

Автор: DarkMaster 19.10.2022, 20:28

2 - тип поиска. по сути актуально либо 2 либо хэндл. если не заморачиваться, то 2 прекрасный вариант
80 - это точность. необходимый % точек который должен совпасть.
1 - количество искомых изображений
3 - девиэйшн (это не тональность, но для компенсации тональности крутить его)

Автор: dunkel 19.10.2022, 20:49

Цитата(DarkMaster @ 19.10.2022, 19:28) *

2 - тип поиска. по сути актуально либо 2 либо хэндл. если не заморачиваться, то 2 прекрасный вариант
80 - это точность. необходимый % точек который должен совпасть.
1 - количество искомых изображений
3 - девиэйшн (это не тональность, но для компенсации тональности крутить его)

Не хочет видеть. Буду думать через поиск по цвету.

Можно как то реализовать чтобы при нахождении определённого цвета производилась проверка на несколько пикселей ниже и выше найденной точки, и если оба пикселя меняли цвет на нужную тональность, то скрипт бы срабатывал?

Автор: DarkMaster 19.10.2022, 21:05

Цитата
Можно как то реализовать чтобы при нахождении определённого цвета производилась проверка на несколько пикселей ниже и выше найденной точки, и если оба пикселя меняли цвет на нужную тональность, то скрипт бы срабатывал?

Можно. Нужно будет описывать всю эту логику. Тем не менее я бы не советовал отказываться от финдимиджа слишком быстро. Можно, скажем сделать несколько изображений и каждое с девиэйшеном. Нашло хоть одно - успех.

Автор: dunkel 19.10.2022, 21:11

Цитата(DarkMaster @ 19.10.2022, 20:05) *

Можно. Нужно будет описывать всю эту логику. Тем не менее я бы не советовал отказываться от финдимиджа слишком быстро. Можно, скажем сделать несколько изображений и каждое с девиэйшеном. Нашло хоть одно - успех.


Почти все получилось, только не могу понять как задать область для следующего поиска. Я нахожу объект, перемещаю туда курсор, снимаю его положение с помощью get mouse_pos #x #y, а как мне дальше отталкиваясь от этих координат начать цикл поиска на следующую картинку только уже в более меньшем радиусе например в +-50 от координат снятых гетмаусом

Автор: DarkMaster 21.10.2022, 11:55

а зачем вообще мышь двигать? После того, как вы нашли изображение/точку, то у вас уже есть координата мышь не нужна.
Ну и далее что-то вроде:
set #startx #naidenoex - 50
set #endx #naidenoex + 50

ну и в финд потом подсовывать #startx, #endx

аналогично для y координаты

Автор: dunkel 23.10.2022, 17:06

Цитата(DarkMaster @ 21.10.2022, 10:55) *

а зачем вообще мышь двигать? После того, как вы нашли изображение/точку, то у вас уже есть координата мышь не нужна.
Ну и далее что-то вроде:
set #startx #naidenoex - 50
set #endx #naidenoex + 50

ну и в финд потом подсовывать #startx, #endx

аналогично для y координаты

Код

:2
set #startX 491
set #startY 280
set #endX 1264
set #endY 712
set $path "d:\images\"
init_arr %image 4 5 6 7 8

set #size size(%image)

for #i 1 #size 1 //
    set #a findimage (#startX #startY #endX #endY ($path%image[#i].bmp) %arr 2 80 1 7)
    if  size(%arr) > 0
        for #j 1 size(%arr)
            move %arr[#j 1] %arr[#j 2]  
            wait 500
            goto 1
        end_for
    end_if
end_for
goto 2

:1
get mouse_pos #x #y
if #x,#y 6818061 9526877
    move #x,#y
    kleft #x,#y
    stop_script
end_if
goto 1

пока так получается, я ищу объект, через поиск картинок и потом просматриваю координаты на отсутствия цвета под ним. То есть чтобы мне задать смещение мне надо подставить во вторую часть?
set #startx #naidenoex? И получиться что то вроде?

Код

set #startx #naidenoex - 50
set #endx #naidenoex + 50
get mouse_pos #x #y
if #x,#y 6818061 9526877
move #x,#y
kleft #x,#y
stop_script
end_if

Автор: DarkMaster 23.10.2022, 21:14

для начала вам вообще не нужен mouse_pos здесь.

move %arr[#j 1] %arr[#j 2]
вы же тут не используете mouse_pos

get mouse_pos #x #y
move #x,#y
в чем смысл конструкции? мы получаем координаты мыши, и перемещаем ее в эти же самые координаты. Т.е. по сути эффективная работа равна нулю: где мышь была там она и будет. Я допускаю, в некоторых частных случаях этот может активировать кнопку, но в общем случае полностью бессмысленные действия.

kleft #x,#y
с тем же успехом вы можете использовать
kleft %arr[#j 1] %arr[#j 2]

разницы не будет никакой. Т.к. по сути вы делаете:
move %arr[#j 1] %arr[#j 2]
get mouse_pos #x #y
move #x,#y
kleft #x,#y
итого мы перемещаем мышь в
%arr[#j 1] %arr[#j 2]
потом получаем координаты мыши в перменные x и y. Зачем? мы уже знаем где она - %arr[#j 1] %arr[#j 2]
и туда же кликаем.

итого:
выкинуть get_mousepos
выкинуть move #x #y
заменить в kleft #x #y на kleft %arr[#j 1] %arr[#j 2]


Если глобально - переходите на lua. Проще его выучить и писать спокойно, чем ловить проблемы старого синтаксиса.
Если не глобально - выкинуть все goto и забыть про них навсегда.

Автор: dunkel 24.10.2022, 23:40

Цитата(DarkMaster @ 23.10.2022, 20:14) *

для начала вам вообще не нужен mouse_pos здесь.

move %arr[#j 1] %arr[#j 2]
вы же тут не используете mouse_pos

get mouse_pos #x #y
move #x,#y
в чем смысл конструкции? мы получаем координаты мыши, и перемещаем ее в эти же самые координаты. Т.е. по сути эффективная работа равна нулю: где мышь была там она и будет. Я допускаю, в некоторых частных случаях этот может активировать кнопку, но в общем случае полностью бессмысленные действия.

kleft #x,#y
с тем же успехом вы можете использовать
kleft %arr[#j 1] %arr[#j 2]

разницы не будет никакой. Т.к. по сути вы делаете:
move %arr[#j 1] %arr[#j 2]
get mouse_pos #x #y
move #x,#y
kleft #x,#y
итого мы перемещаем мышь в
%arr[#j 1] %arr[#j 2]
потом получаем координаты мыши в перменные x и y. Зачем? мы уже знаем где она - %arr[#j 1] %arr[#j 2]
и туда же кликаем.

итого:
выкинуть get_mousepos
выкинуть move #x #y
заменить в kleft #x #y на kleft %arr[#j 1] %arr[#j 2]
Если глобально - переходите на lua. Проще его выучить и писать спокойно, чем ловить проблемы старого синтаксиса.
Если не глобально - выкинуть все goto и забыть про них навсегда.


Да надо наверное подучить lua. Хотя я ни разу не програмист).
А про goto
чем я могу заменить вот этот цикл?

:1
if #x,#y 6818061 9526877
kleft #x,#y
stop_script
end_if
goto 1

как мне сделать чтобы в середине скприпта можно было бы вставить цикл ожидания который бы прирывался только при выполнение условия. И чем плох goto? Он делает скрипт более медленным?

И ещё можно вопрос, вот этот скрипт по моему работает очень долго и у меня не получается им найти нужную картинку которая появляется на какие то ,03 секунды. Это дело в скрипте или просто УО пилот неспособен отслеживать появления картинки с такой скоростью. Например цвет в определённой координате он отслеживает моментально. Можно ли как то ускорить этот скрипт?

set #startX 491
set #startY 280
set #endX 1264
set #endY 712
set $path "d:\images\"
init_arr %image 4 5 6 7 8

set #size size(%image)

for #i 1 #size 1 // цикл для поиска картинок
set #a findimage (#startX #startY #endX #endY ($path%image[#i].bmp) %arr 2 80 1 7)
if size(%arr) > 0
for #j 1 size(%arr)
move %arr[#j 1] %arr[#j 2]
wait 500

Автор: DarkMaster 25.10.2022, 0:26

Цитата
А про goto
чем я могу заменить вот этот цикл?

Во 1 это не цикл =) это подобие функции.
Да просто закинуть в основное тело:
if ...
kleft ...
stop_script
end

Цитата
Да надо наверное подучить lua. Хотя я ни разу не програмист).

ну язык пилота вы же выучили в какой-то мере. луа уж точно не сложнее, а вот нежданчиков там несорозмерно меньше.
Цитата
И ещё можно вопрос, вот этот скрипт по моему работает очень долго и у меня не получается им найти нужную картинку которая появляется на какие то ,03 секунды. Это дело в скрипте или просто УО пилот неспособен отслеживать появления картинки с такой скоростью. Например цвет в определённой координате он отслеживает моментально. Можно ли как то ускорить этот скрипт?

во 1 lua. Ну он реально шустрее. Причем на некоторых операциях получалось что-то вроде 200 000 раз шустрее. Тем не менее конкретно в данном случае скорее всего будет основным тормозом findimage и if. При снятии цвета не по хендлу идет съем 30 раз в секунду. Чем это обусловлено я не знаю. Причины так и остались не ясны. У меня было подозрение, что это как-то связанно с вертикальной синхронизаций прежде чем будет выдана картинка. Причем это касается и финдимиджа и if'а. Т.е. между имиджем и ифом будет 66 мс. А если вызовете одиночный иф, то он будет обработан почти мгновенно. Задержка будет только на втором.
У вас достаточно большая область поиска. Если есть возможность - сократите. Время поиска прямопропорционально площади поиска.
deviation увеличивает время поиска. Чем большее - тем медленнее.
Картинка должна быть небольшой. 5x5 пикселей обычно достаточно. Время поиска прямопропорционально площади искомой картинки. В частности обращаю внимание на слово "площади". 50x50 и 5x5 разница не в 10 раз, а в 100.

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

Переходите на луа. Часть проблем тогда решать вообще не придется.

Автор: Cockney 25.10.2022, 10:18

Цитата(DarkMaster @ 25.10.2022, 0:26) *

При снятии цвета не по хендлу идет съем 30 раз в секунду. Чем это обусловлено я не знаю.



Знаменитые технологии мелкомягких. В зависимости от того что скринишь fps будет разный. Прям вот конкретное окно дольше будет сниматься чем область экрана. Это особенности реализации aero технологии.

Автор: dunkel 25.10.2022, 15:23

Цитата(DarkMaster @ 24.10.2022, 23:26) *

Да просто закинуть в основное тело:
if ...
kleft ...
stop_script
end


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

а вот по поводу области я как раз не знаю как ее обозначить. У меня находится 2ая картинка (точнее как обычно координаты её левой верхней части. И я не знаю как мне потом начать искать картинку в области, отталкиваясь от этой найденной координаты.

Прикрепленное изображение

Автор: DarkMaster 25.10.2022, 19:08

у вас в массив падают кооррдинаты первого изображения. я где-то выше писал, как сними работать.

Автор: DarkMaster 25.10.2022, 19:34

Цитата
Это особенности реализации aero технологии.

Скорее особенности НЕ aero, т.к. эта проблема была еще на XP, где аеро не существовало. Скорее всего исторически сложившийся костыль старых методов.

Автор: Cockney 26.10.2022, 19:45

Цитата(DarkMaster @ 25.10.2022, 19:34) *

Скорее особенности НЕ aero, т.к. эта проблема была еще на XP, где аеро не существовало. Скорее всего исторически сложившийся костыль старых методов.



Про XP не в курсе, но там рисует не карточка а проц, вот и медленно, а с приходом аеро все рисование выполняется в карточке и перегон битов в озу дорогое удовольствие.

Русская версия Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)