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

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

UoKit.com Форумы _ UO Pilot _ FindImage

Автор: portos 24.2.2018, 20:32

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

Автор: cirus 24.2.2018, 21:26

Код
set #a FindImage (0 0 1920 1080 (d:\myImages\wolf.bmp) %arr 2 80 -1 5)
hint Найдено картинок: size(%arr)
if #a > 0
    for #i 1 size(%arr)     // цикл для всех найденных картинок
        move %arr[#i 1] %arr [#i 2]    // навести курсор на каждую картинку
        wait 500
    end_for
end_if
end_script

Автор: dron4938 24.2.2018, 21:55

Цитата(cirus @ 24.2.2018, 21:26) *

Код
set #a FindImage (0 0 1920 1080 (d:\myImages\wolf.bmp) %arr 2 80 -1 5)
hint Найдено картинок: size(%arr)
if #a > 0
    for #i 1 size(%arr)     // цикл для всех найденных картинок
        move %arr[#i 1] %arr [#i 2]    // навести курсор на каждую картинку
        wait 500
    end_for
end_if
end_script



а на луа финдимидж есть? Можно пример на луа?

Автор: portos 24.2.2018, 22:29

Цитата(cirus @ 24.2.2018, 19:26) *

Код
set #a FindImage (0 0 1920 1080 (d:\myImages\wolf.bmp) %arr 2 80 -1 5)
hint Найдено картинок: size(%arr)
if #a > 0
    for #i 1 size(%arr)     // цикл для всех найденных картинок
        move %arr[#i 1] %arr [#i 2]    // навести курсор на каждую картинку
        wait 500
    end_for
end_if
end_script



то что надо , спасибо cirus

Автор: Sreg 16.3.2018, 11:54

А что значат числа "2 80 -1 5" после %arr?

Автор: cirus 16.3.2018, 12:14

http://uopilot.tati.pro/index.php?title=Findimage

Автор: Sreg 18.3.2018, 17:15

Понятно, а поиск одного слова на экране тоже через финдимидж делается, или есть способ лучше?

Автор: DarkMaster 18.3.2018, 18:13

А чем он плох? Иногда имеет смысл искать через встроенные средства браузера, но, как правило, ищут финдимиджем.

Автор: Sreg 18.3.2018, 18:45

Ну в деле я пока еще не пробовал, просто слова не на монотонном фоне, а на динамичном фоне, и если картинка меняется, то картинка внутри буквы как бы тоже меняется, что не есть хорошо для финдимиджа....

Автор: cirus 18.3.2018, 19:13

Цитата
слова не на монотонном фоне, а на динамичном фоне

Закрашиваете левый верхний пиксель и весь фон в один и тот же любой цвет. Тогда эти пиксели не будут учитывать при поиске.

Автор: Sreg 22.3.2018, 3:39

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


Прикрепленные файлы
Прикрепленный файл  Gem1.bmp ( 1022 байт ) Кол-во скачиваний: 208
Прикрепленный файл  Gem.bmp ( 894 байт ) Кол-во скачиваний: 151

Автор: DarkMaster 22.3.2018, 10:40

Deviation задан в параметрах поиска? Погрешность ~2 обычно убирает очень много проблем.

Автор: cirus 22.3.2018, 11:06

https://forum.uokit.com/index.php?showtopic=30118&hl=findimage
Последний скрипт.

Автор: Sreg 22.3.2018, 12:38

Я как понял скрипт готовый, нужно только указать пути, и сделать несколько скринов картинки?

Автор: cirus 22.3.2018, 13:21

Цитата
Я как понял скрипт готовый, нужно только указать пути, и сделать несколько скринов картинки?

Да. Подобрать deviation, его же указывать потом в findimage. Если какой-то фон останется, то закрасить вручную.

Автор: Sreg 22.3.2018, 14:14

Сначала подумал скрипт не рабочий, а потом потестил на собственном нарисованных картинках, он работает...
Выходит что на всех картинках снятые скриншотом, уникальные, на каждом скрине белые буквы имеют разные оттенки...

Автор: cirus 22.3.2018, 14:40

deviation подберите, часть пикселей всё равно останется. Их хватит для поиска.

Автор: Sreg 22.3.2018, 15:23

Я попробую.
А пилоте есть функция, чтоб поиск пикселей начинал не слево сверху направо, а снизу справа налево?

Автор: DarkMaster 22.3.2018, 18:58

Цитата
А пилоте есть функция, чтоб поиск пикселей начинал не слево сверху направо, а снизу справа налево?

Нет. Ну точнее в каких-то релизах оно было случайно изменено, что привело к большим проблемам в старых скриптах. Вернули на место.

Автор: cirus 23.3.2018, 1:32

Цитата
А пилоте есть функция, чтоб поиск пикселей начинал не слево сверху направо, а снизу справа налево?

Результаты поиска можно отсортировать. http://uopilot.tati.pro/index.php?title=Sort_array

Автор: Sreg 29.3.2018, 15:17

Я так не раскурил тему про sort array...

я смекнул сделать так, более понятным мне способом.

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

Код
  :1
set #a FindImage (292, 300  960, 663   (C:\Gem\Gem.bmp) %arr 2 95 -1 5 )  
hint Найдено картинок центр: size(%arr)
if #a > 0

kleft_down %arr [1 1], %arr [1 2]
wait 20
kleft_up  %arr [1 1], %arr [1 2]
goto 1
else

set #a FindImage (54, 664 1109, 960  (C:\Gem\Gem.bmp) %arr 2 95 -1 5 )  
hint Найдено картинок внизу: size(%arr)
if #a > 0

kleft_down %arr [1 1], %arr [1 2]
wait 20
kleft_up  %arr [1 1], %arr [1 2]
goto 1
else

set #a FindImage (1110, 220  1279, 975  (C:\Gem\Gem.bmp) %arr 2 95 -1 5 )
hint Найдено картинок справо: size(%arr)
if #a > 0

kleft_down %arr [1 1], %arr [1 2]
wait 20
kleft_up  %arr [1 1], %arr [1 2]
goto 1
else

set #a FindImage (0, 151 289, 945 (C:\Gem\Gem.bmp) %arr 2 95 -1 5 )  
hint Найдено картинок слево: size(%arr)
if #a > 0

kleft_down %arr [1 1], %arr [1 2]
wait 20
kleft_up  %arr [1 1], %arr [1 2]
goto 1


end_if
  end_if
  end_if
  end_if

Автор: FREEON 17.4.2018, 13:31

Не знаю в чем косяк но спустя время выбивает ошибку pos по координатам...хотя пробовал поиск и для одного объекта и для всех найденных с параметром -1
set #объект findimage (зона поиска(путь\s0.bmp) %s5 2 80 -1)
Прикрепленный файл  Screenshot_5.bmp ( 849,66 килобайт ) Кол-во скачиваний: 161

Для понимания процесса...есть 6 попыток... 7 слотов в которые рандомно падают конфеты в наборе 5, 3 и 1. Вот нужно собрать сперва максимальное колличество наборов сладостей а затем меншее... и лишнюю одну которая остаеться выбросить часто это набор по 1 но бывает и 3

Код

set #s0 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s0.bmp) %s0 2 80)
    while #s0 = 0 //пока есть попытки
           set #s0 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s0.bmp) %s0 2 80)
           set #s5 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s5.bmp) %s5 2 80)
           if #s5 > 0 // поиск набора по 5 сладостей
              set #s5 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s5.bmp) %s5 2 80)
              set #x (%s5 [1 1] + %s5 [1 3]) / 2
              set #y (%s5 [1 2] + %s5 [1 4]) / 2
              left #x #y //клик на сладость
              wait 1s
              set #x1 (%s5 [1 1] + %s5 [1 3]) / 2 + 50
              set #y1 (%s5 [1 2] + %s5 [1 4]) / 2 - 15
              left #x1 #y1 //получить вкусняшку
              wait 1s
           end_if
           set #s5 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s5.bmp) %s5 2 80)
           if #s5 = 0 // если нет набора по 5
              set #s3 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s3.bmp) %s3 2 80)
              if #s3 > 0 //собирать по 3
                 set #s3 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s3.bmp) %s3 2 80)
                 set #x (%s3 [1 1] + %s3 [1 3]) / 2
                 set #y (%s3 [1 2] + %s3 [1 4]) / 2
                 left #x #y //клик на сладость
                 wait 1s
                 set #x1 (%s3 [1 1] + %s3 [1 3]) / 2 + 50
                 set #y1 (%s3 [1 2] + %s3 [1 4]) / 2 - 15
                 left #x1 #y1 //забрать вкусняшку
                 wait 1s
              end_if
           end_if
           set #s3 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s3.bmp) %s3 2 80)
           if #s3 = 0 // если нет наборов по 5 и 3
              set #s3 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s3.bmp) %s3 2 80)
              set #s1 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s1.bmp) %s1 2 80)
              if #s1 > 0 //собирать по 1
                 set #s1 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s1.bmp) %s1 2 80)
                 set #x (%s1 [1 1] + %s1 [1 3]) / 2
                 set #y (%s1 [1 2] + %s1 [1 4]) / 2
                 left #x #y //клик по конфете
                 wait 1s
                 set #x1 (%s1 [1 1] + %s1 [1 3]) / 2 + 50
                 set #y1 (%s1 [1 2] + %s1 [1 4]) / 2 - 15
                 left #x1 #y1 //получить конфету
                 wait 1s
              end_if
           end_if
        end_while
    set #s0 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s0.bmp) %s0 2 80)
    if #s0 > 1 //если все попытки израсходованы освободить слоты от сладостей
    set #s00 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s00.bmp) %s00 2 80)
    if #s00 > 0
    set #s00 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s1.bmp) %s00 2 80)
    set #x (%s00 [1 1] + %s00 [1 3]) / 2
    set #y (%s00 [1 2] + %s00 [1 4]) / 2
    left #x #y
    wait 1s
    set #x1 (%s00 [1 1] + %s00 [1 3]) / 2 - 50
    set #y1 (%s00 [1 2] + %s00 [1 4]) / 2
    left #x1 #y1
    wait 1s
    end_if
    end_if

Не знаю еще но почему-то когда идет while если не дублировать set в самом цикле то находит один раз...если дублировать сет в самом цикле тогда работает как нужно но иногда опять выбивает ошибку pos c координатами. С чем это связанно?
пример
Код

set #test параметры поиска
while #test > 1 // в принципе любое условие
    set #test параметры поиска
   //действие
end_while

Автор: cirus 17.4.2018, 14:48

Код
set #s5 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s5.bmp) %s5 2 80)
if  #s5 > 0
    set #s5 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s5.bmp) %s5 2 80)  // а если не найдётся?
    set #x (%s5 [1 1] + %s5 [1 3]) / 2  // получим ошибку
    set #y (%s5 [1 2] + %s5 [1 4]) / 2
    left #x #y
    wait 1s
    set #x1 (%s5 [1 1] + %s5 [1 3]) / 2 + 50
    set #y1 (%s5 [1 2] + %s5 [1 4]) / 2 - 15
    left #x1 #y1
    wait 1s
end_if

Автор: FREEON 17.4.2018, 15:02

Цитата(cirus @ 17.4.2018, 14:48) *

Код
set #s5 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s5.bmp) %s5 2 80)
if  #s5 > 0
    set #s5 findimage (434, 165 1014, 644 (D:\_UOPilot\Image\botn\s5.bmp) %s5 2 80)  // а если не найдётся?
    set #x (%s5 [1 1] + %s5 [1 3]) / 2  // получим ошибку
    set #y (%s5 [1 2] + %s5 [1 4]) / 2
    left #x #y
    wait 1s
    set #x1 (%s5 [1 1] + %s5 [1 3]) / 2 + 50
    set #y1 (%s5 [1 2] + %s5 [1 4]) / 2 - 15
    left #x1 #y1
    wait 1s
end_if


то есть дубль парит мозги

Автор: DarkMaster 17.4.2018, 15:36

Т.е. при повторном поиске изображение может и не найтись, а %s5 массив вы перезапишите в любом случае. Если не нашлось, а массив вы фактически уничтожили, то дальнейшее обращение к его элементам приведет к ошибке.

Автор: FREEON 17.4.2018, 15:46

Цитата(DarkMaster @ 17.4.2018, 15:36) *

Т.е. при повторном поиске изображение может и не найтись, а %s5 массив вы перезапишите в любом случае. Если не нашлось, а массив вы фактически уничтожили, то дальнейшее обращение к его элементам приведет к ошибке.

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

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