Author Topic: IF_PICTURE_IN - Для новичков  (Read 106194 times)

0 Members and 2 Guests are viewing this topic.

kiril

  • Активный участник
  • ***
  • Posts: 106
    • View Profile
Re: Честное-Благородное!!
« Reply #105 on: October 10, 2022, 08:52:04 AM »
Честное слово - не понимаю и не вижу разницы между объектами.
При значении в 30% что-то находит, но это что-то не совсем то.
Правильные способы;
цветокоррекции,
сохранения,
вырезания маленького размера,
сравнения с нахождением отличий.
и поиска на экране скриптом,
много-много раз описаны на этом форуме, если тема для, Вас актуальна воспользуйтесь встроенным поисковиком по сообщениям форума.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: IF_PICTURE_IN - Для новичков
« Reply #106 on: October 10, 2022, 10:42:14 AM »
И вот смотрите, что происходит: экран коррекнтый, в памяти всё корректно, контрольный скрин с того места где искали совпадает с шаблонным изображением. А НЕ НАХОДИТ!
Что не так-то?
Как уже сказали, картинки слишком разные для поиска в лоб без цветокоррекции и одни проценты здесь не помогут.
Вот "муравьями" показаны одинаковые области

Их даже не половина. Может процентов 25-30.

P.S. https://youtu.be/7YsBHzR87Yc


Benedict

  • Зашел в гости
  • *
  • Posts: 3
    • View Profile
Re: IF_PICTURE_IN - Для новичков
« Reply #107 on: October 10, 2022, 01:34:56 PM »
у
И вот смотрите, что происходит: экран коррекнтый, в памяти всё корректно, контрольный скрин с того места где искали совпадает с шаблонным изображением. А НЕ НАХОДИТ!
Что не так-то?
Как уже сказали, картинки слишком разные для поиска в лоб без цветокоррекции и одни проценты здесь не помогут.
Вот "муравьями" показаны одинаковые области

Их даже не половина. Может процентов 25-30.

P.S. https://youtu.be/7YsBHzR87Yc

Спасибо. Понял, осознал.

Loskutok

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: IF_PICTURE_IN - Для новичков
« Reply #108 on: November 05, 2022, 06:27:54 PM »
IF_PICTURE_IN (3380,1947, 3746,2025, "exit_2.bmp", -1,
вопрос такой, а если скрипт куда-то портируется где иное разрешение, или  же область поиска меняет координаты.
как-то можно универсальную "привязку" сделать, какие варианты есть? спасибо

kiril

  • Активный участник
  • ***
  • Posts: 106
    • View Profile
Re: IF_PICTURE_IN - Для новичков
« Reply #109 on: November 05, 2022, 09:10:39 PM »
Сейчас настолько разные мониторы у людей, что предугадать, как будет у кого выглядеть игра и в каких координатах что появляться практически невозможно.
 Нужно пересохранять и координаты и картинки под каждый новый комп и делать отладку работы скрипта.
как альтернатива скриптом задавать стандартный небольшой  размер игрового окна, помещать его автоматически в координату 0,0 и после этого писать свой скрипт в надежде, что на других компах отображение картинок сильно не поменяется.

Loskutok

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: IF_PICTURE_IN - Для новичков
« Reply #110 on: November 26, 2022, 09:33:42 PM »
подскажите пожалуйста, по теме этой.
Алгоритм
1. 5 окон браузера  развёрнуты в маленьких окошках.
2. после нажатия на кнопку запуска в каждом из окон, через N промежуток времени выскакивает картинка
(N - промежуток разный может и 500мс а может и 3-10 секунд).
3. пытаюсь просто найти её и нажать в каждом из окон.
4. картинка появляется кратковременно на N секунд и пропадает потом
5. если не нашли то перезапуск по новой.

По отдельности, с прописанными координатами для каждого поиска - всё работает ищет нажимает.
Чтобы упросить,чтобы скрипт был короче по коду, и постоянно не переписывать новые координаты -
 оставлен один проход поиска, и задал бОльшее поле поиска картинки для всех 5 окон.
 где ошибка?



Code: [Select]
WAITMS(3000)
LCLICK(100, 300)//клик
LCLICK(100, 400)//клик
LCLICK(100, 500)//клик
LCLICK(100, 600)//клик
LCLICK(100, 700)//клик
$found = 0      
WHILE($found = 0) //цикл ищем  картинку во всех окнах
   GETSCREEN
    COLORMODE(0)
         SCREENSHOTFIX(1,1, 1,1, "1.bmp")
   IF_PICTURE_IN(100,200, 500,1000, "2.bmp", -1, 99) // поиск изображения
           print("Нашли картинку", $_return1, $_return2)   //принт
      move($_return1, $_return2) // навели на неё мышь
      waitms(10)
      LCLICK($_return1, $_return2)//клик
      waitms(500)
   ELSE // ЕСЛИ НЕ НАЙДЕНА
         print("Не нашли кнопку")
         $found = 1  // остановили цикл поиска

      WAITMS(4000)

      END_IF // конец условия
      end_cyc

по идее должен:
 найти кликнуть, потом снова искать в области и кликнуть, цикл же задан. в общем, прокликивать постоянно все картинки  в области.
И только если не находит - поиск картинки выключается, остановил цикл поиска и вернутся к кнопкам запуска. Где ошибка?
область поиска не большая, проверял, если просто искать одну картинку в большой области - всё нормально.
« Last Edit: November 26, 2022, 09:37:54 PM by Loskutok »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: IF_PICTURE_IN - Для новичков
« Reply #111 on: November 28, 2022, 03:05:56 PM »
Как уживается это

2. после нажатия на кнопку запуска в каждом из окон, через N промежуток времени выскакивает картинка
(N - промежуток разный может и 500мс а может и 3-10 секунд).

с этим?
оставлен один проход поиска

И только если не находит - поиск картинки выключается, остановил цикл поиска и вернутся к кнопкам запуска.

Зачем вообще прерывать цикл? Тем более при первом же не появлении (а это штатная ситуация из п. 2 и 4).
Пусть крутится по кругу спокойно.

P.S. COLORMODE(0) - бессмысленная команда.


Loskutok

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: IF_PICTURE_IN - Для новичков
« Reply #112 on: November 28, 2022, 06:40:08 PM »
Как уживается это
с этим?
Спасибо.
Про "один проход"  - имел в виду то, что там была отдельная конструкция кода для каждого окна, нагромождение, что усложняло,везде цифры прописывать постоянно и так далее. но зато поиск был в маленьком поле, а не во всё экране ( это же лучше для нагрузки )
Теперь же  один, но в большом поле.

Quote
Пусть крутится по кругу спокойно.
вот,  как раз для круга добавил  цикл:

Code: [Select]
WAITMS(3000)
LCLICK(100, 300)//клик
LCLICK(100, 400)//клик
LCLICK(100, 500)//клик

   FOR($k=0, $k < 500)

$found = 0      
WHILE($found = 0) //цикл ищем  картинку во всех окнах
   GETSCREEN
    COLORMODE(0)
         SCREENSHOTFIX(1,1, 1,1, "1.bmp")
   IF_PICTURE_IN(100,200, 500,1000, "2.bmp", -1, 99) // поиск изображения
           print("Нашли картинку", $_return1, $_return2)   //принт
      move($_return1, $_return2) // навели на неё мышь
      waitms(10)
      LCLICK($_return1, $_return2)//клик
      waitms(500)

   END_CYC
 
   ELSE // ЕСЛИ НЕ НАЙДЕНА
         print("Не нашли кнопку")
         $found = 1  // остановили цикл поиска

      WAITMS(4000)

      END_IF // конец условия
      end_cyc
вроде правильно?
только я не пойму, почему проход в 500 раз не соответствует действительности по времени.
По логике же, этот цикл поиска картинки, должен будет повториться  500 раз.
Исходя из наших задержек  - это 250000 мс, что должно соответствовать 250 секундам.
И только после этого , ежели не найдена картинка, обождать 4 секунды и перейти в режим трёх кликов.(10мс я намеренно упустил)

По факту - проход  поиска цикла осуществляется по времени раз в 3-5 меньше, вместо 250 секунд может в районе 100 выходит..Почему не соответствует?

kiril

  • Активный участник
  • ***
  • Posts: 106
    • View Profile
Re: Для новичков
« Reply #113 on: November 28, 2022, 08:59:27 PM »
Code: (clickermann) [Select]
WAITMS(3000)
LCLICK(100, 300)//клик
waitms(150)
LCLICK(100, 400)//клик
waitms(150)
LCLICK(100, 500)//клик
waitms(150)
FOR($k=0, $k < 500)
LOGWRITE ("цикл № ",$k)
   $found = 0
   WHILE($found = 0) //цикл ищем  картинку во всех окнах
      GETSCREEN
      SCREENSHOTFIX(1,1,1,1,"1.bmp") //вы сёрьёзно? скриншотите пиксель?! )))
      IF_PICTURE_IN(100,200, 500,1000, "2.bmp", -1, 99)
         print("Нашли картинку", $_return1, $_return2)   //сообщение в лог программы!
         move($_return1,$_return2) // навели на неё мышь
         waitms(150)
         LCLICK($_return1,$_return2)//клик
         waitms(500)
      ELSE // ЕСЛИ НЕ НАЙДЕНА 2.bmp
         INC($var,1)
         print("Не нашли кнопку ",$var)
         $found = 1  // остановили цикл поиска
         WAIT(4)
      END_IF // конец условия
   END_CYC
END_CYC

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: IF_PICTURE_IN - Для новичков
« Reply #114 on: March 23, 2023, 04:21:39 PM »
Часть постов отделена в новую тему
Маджонг. Поиск картинок


Loskutok

  • Зашел в гости
  • *
  • Posts: 9
    • View Profile
Re: IF_PICTURE_IN - Для новичков
« Reply #115 on: April 04, 2023, 10:36:21 PM »
Code: [Select]
#name "New Script"

$date = "ingo_"$_time_h - $_time_m
$date2 =  "__"
LCLICK(1021,877)          //
WAIT(1)
GETSCREEN(206,709, 582, 1017)
SCREENSHOTEX(206,709, 582, 1017, $date-, 1)
WAIT(65)
LCLICK(1159,106)//
WAIT(5)     
Код делает скрины заданной области и сохраняет в файл с именем дата час и минута и 0001
типа "ingo_22-24-0000" в jpeg.
Но очень много лишних одинаковых картинок выходит.

Подскажите пожалуйста, как-то в такой код можно добавить условие, чтобы скрин новый сохранялся только в том случае, если были изменения в отличие от последнего сделанного?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: IF_PICTURE_IN - Для новичков
« Reply #116 on: April 05, 2023, 08:41:05 AM »
Считай контрольную сумму области
Code: (clickermann) [Select]
$hash= PXLCRC(206,709, 582, 1017)Потом считай повторно и сравнивай.
Но разница будет, даже если изменится цвет всего одного пикселя. Работать будет, если область статична.

P.S.
Code: (clickermann) [Select]
$date = "ingo_"$_time_h - $_time_mЭто что за насилие над интерпретатором?
« Last Edit: April 05, 2023, 08:42:49 AM by Vint »