Author Topic: Сравнение картинок  (Read 5173 times)

0 Members and 1 Guest are viewing this topic.

Артем Гусев

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Сравнение картинок
« on: March 07, 2017, 05:43:14 PM »
Добрый вечер! Ищу помощи в написании скрипта.
Суть скрипта в том, что делается снимок экрана, а дальше на этом снимке поочередно начинают искаться картинки с папки и как получается совпадение скрипт делает переход в одну метку. Если же совпадения нету, скрипт переходит в другую метку.

Долго искал решение этой задачи, нашел и прикрепил ниже(может быть там написана и белиберда, но работает  ::)). Но суть в том, что ладно там 3 картинки сравниваются, Бог с ними, но если больше 10, а то и 20 код получается не маленький. Искал дальше посоветовали использовать подпрограмму SUB, сколько не пытался с ним разобраться, не получилось. Так вот прошу Вас помочь мне разобраться с этой подпрограммой. Буду в большом долгу  ;)

Code: (clickermann) [Select]
#logfile
Getscreen
WHILE(1)
IF_PICTURE_IN(0,0,$_xmax,$_ymax,"image1.bmp")
LOGWRITE ("Найдена картинка image1")
goto(***) //идем в метку
end_if
IF_PICTURE_IN(0,0,$_xmax,$_ymax,"image2.bmp")
LOGWRITE ("Найдена картинка image2")
goto(***) //идем в метку
end_if
IF_PICTURE_IN(0,0,$_xmax,$_ymax,"image3.bmp")
LOGWRITE ("Найдена картинка image3")
goto(***) //идем в метку
end_if
goto(---)  //если сравнений нету, идем в другую метку
END_CYC

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Сравнение картинок
« Reply #1 on: March 07, 2017, 07:02:13 PM »
Не тужи, душа моя. Это чудо знаю я.
Code: (clickermann) [Select]
Getscreen
FOR($i = 1, $i < 21) // 20 картинок
    $name = STRCONCAT("image", $i, ".bmp")
    IF_PICTURE_IN(0,0,$_xmax,$_ymax, $name)
LOGWRITE ("Найдена картинка ", $name)
$i = 100
    ELSE
        WAITMS(10)
    end_if
END_CYC
IF($i ! 100)
     // если ничего не найдено
ELSE
    // действия если найдено
END_IF
Или варианты.
« Last Edit: March 07, 2017, 07:04:34 PM by Vint »


Артем Гусев

  • Зашел в гости
  • *
  • Posts: 2
    • View Profile
Re: Сравнение картинок
« Reply #2 on: March 07, 2017, 10:54:11 PM »
Ха-ха, это же так просто! Спасибо большое!  :D Vint полные карманы удачки тебе!

dramster

  • Герой форума
  • *****
  • Posts: 1134
    • View Profile
Re: Сравнение картинок
« Reply #3 on: March 07, 2017, 11:50:44 PM »
чуточку поправлю, сам частенько напарываюсь при использовании такого алгоритма  :D.
Code: (clickermann) [Select]
Getscreen
FOR($i = 1, $i < 21) // 20 картинок
    $name = STRCONCAT("image", $i, ".bmp")
    IF_PICTURE_IN(0,0,$_xmax,$_ymax, $name)
LOGWRITE ("Найдена картинка ", $name)
$i = 100
    ELSE
        WAITMS(10)
    end_if
    //тут наращиваемая переменная наращивается, и на уже равна 101
END_CYC

print($i)    // если картинка найдена, то  $i = 101

IF($i ! 101)  //так будет правильно
     // если ничего не найдено
ELSE
    // действия если найдено
END_IF

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Сравнение картинок
« Reply #4 on: March 08, 2017, 09:16:38 PM »
Возможно. Это был подвиг, весь пост писал с телефона.


messenger

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Сравнение картинок
« Reply #5 on: May 04, 2017, 12:10:29 PM »
Не тужи, душа моя. Это чудо знаю я.
Code: (clickermann) [Select]
Getscreen
FOR($i = 1, $i < 21) // 20 картинок
    $name = STRCONCAT("image", $i, ".bmp")
    IF_PICTURE_IN(0,0,$_xmax,$_ymax, $name)
LOGWRITE ("Найдена картинка ", $name)
$i = 100
    ELSE
        WAITMS(10)
    end_if
END_CYC
IF($i ! 100)
     // если ничего не найдено
ELSE
    // действия если найдено
END_IF
Или варианты.
а как сделать нечто похожее вот с этим?)
Code: (clickermann) [Select]
1:
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   GOTO(3)
   ELSE
   GOTO(2)
END_IF

2:
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   GOTO(1)
   ELSE
   WAITMS(50)
END_IF

3:
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   ELSE
   GOTO(1)
END_IF

4:
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   ELSE
   GOTO(1)
END_IF

5:
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
   ELSE
   GOTO(1)
END_IF

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Сравнение картинок
« Reply #6 on: May 04, 2017, 12:37:55 PM »
Ты лучше напиши что нужно, а то в этом клубке GOTO чёрт ногу сломит.

Честно пытался разобраться.
Если в 1 не нашёл  -->> сразу ищем 2 (нафига? и без задержек).
Если не нашли в 2 -->> WAITMS(50) и ищем в 3.
Если не нашли в 3 -->> снова идём в 1.

Спрашивается, зачем этот круговорот воды в природе, если поиск всегда одинаковый?

Дальше ещё интересней
Что бы мы не делали и как бы нас не бросало по GOTO, смысл только один: если нашли - кликаем, не нашли ищем опять.
Зачем здесь 5 частей?


messenger

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Сравнение картинок
« Reply #7 on: May 04, 2017, 01:08:25 PM »
Ты лучше напиши что нужно, а то в этом клубке GOTO чёрт ногу сломит.

Честно пытался разобраться.
Если в 1 не нашёл  -->> сразу ищем 2 (нафига? и без задержек).
Если не нашли в 2 -->> WAITMS(50) и ищем в 3.
Если не нашли в 3 -->> снова идём в 1.

Спрашивается, зачем этот круговорот воды в природе, если поиск всегда одинаковый?

Дальше ещё интересней
Что бы мы не делали и как бы нас не бросало по GOTO, смысл только один: если нашли - кликаем, не нашли ищем опять.
Зачем здесь 5 частей?

ну 1 условие для того, что бы произвести действие во вкладке без которого не будет работать 3.4.5 условие. 2 условие если вкладки нету, то её нужно открыть. А переходы на 1 условие с 3.4.5, это если что-то пошло не так и всё сломалось))
P.S. Поиск разный, это с шаблонов, что бы кашу не скидывать)
« Last Edit: May 04, 2017, 01:10:16 PM by messenger »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Сравнение картинок
« Reply #8 on: May 04, 2017, 01:33:57 PM »
P.S. Поиск разный, это с шаблонов, что бы кашу не скидывать)
А зачем здесь одинаковый поиск с шаблонов? Как их различать?
И где упомянуто, что на самом деле там не то, что написано.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Сравнение картинок
« Reply #9 on: May 04, 2017, 01:39:20 PM »
Code: (clickermann) [Select]
$ch = 0
WHILE($ch = 0)
    GETSCREEN
    IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file1.bmp")
        LCLICK($_return1, $_return2)
        WAITMS(100)
        $ch = 1
    ELSE
        IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file2.bmp")
            LCLICK($_return1, $_return2)
            WAITMS(100)
        ELSE
            WAITMS(50)
            $ch = 1
        END_IF
    END_IF
END_CYC

FOR($i=3, $i < 6)
    GETSCREEN
    IF_PICTURE_IN (0,0, $_xmax,$_ymax, STRCONCAT("file", $i, ".bmp"))
        LCLICK($_return1, $_return2)
        WAITMS(100)
    ELSE
        $i = 10
    END_IF
END_CYC


messenger

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Сравнение картинок
« Reply #10 on: May 04, 2017, 01:43:12 PM »
P.S. Поиск разный, это с шаблонов, что бы кашу не скидывать)
А зачем здесь одинаковый поиск с шаблонов? Как их различать?
И где упомянуто, что на самом деле там не то, что написано.

Ну вот))

Code: (clickermann) [Select]

THREAD(Autolot_pet, 0)
   PET:
   GETSCREEN
   COLORMODE(6)
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "picture/pet/P.E.T.bmp", -1, 100) // Ïîèñê ïåòà
      MOVE($_return1+RND(0,5),$_return2+110+RND(0,5))  //P.E.T.
      WAIT(1)
      KEYPRESS(#R) //ON GUARD_MODS
      WAITMS(300)
      MOVE(100,100) //Îòâåñòè êóðñîð
      WAIT(2)
      GOTO(GUARD_MODS)
   ELSE
      OPEN_PET:
      GETSCREEN
      COLORMODE(6)
      IF_PICTURE_IN (0,0, $_xmax,$_ymax, "picture/pet/OPEN_PET.bmp", -1, 100)// Îòêðûòü ïåòà
         MOVE($_return1+RND(0,5),$_return2+RND(0,5))  //OPEN_PET
         WAITMS(RND(30,75)
         LCLICK($_xmouse,$_ymouse)
         WAIT(1)
         GOTO(PET)
      ELSE
         GOTO(PET)
         GUARD_MODS:
         GETSCREEN
         COLORMODE(6)
         IF_PICTURE_IN (0,0, $_xmax,$_ymax, "picture/pet/GUARD_MODS.bmp", -1, 100)// çàùèòíûé ðåæèì
            MOVE($_return1,$_return2)  //GUARD_MODS.bmp
            WAITMS(RND(30,75)
            LCLICK($_xmouse,$_ymouse)
            WAIT(3)
            GOTO(AUTOLOOT_MODS)
         ELSE
            GOTO(PET)
            AUTOLOOT_MODS:
            GETSCREEN
            COLORMODE(6)
            IF_PICTURE_IN(0,0, $_xmax,$_ymax, "picture/pet/AUTOLOOT_MODS.bmp", -1, 100)// Âêëþ÷èòü àâòîñáîðùèê
               MOVE($_return1+RND(0,5),$_return2+RND(0,5))  //AUTOLOOT_MODS.bmp
               WAITMS(RND(30,75)
               LCLICK($_xmouse,$_ymouse)
               WAIT(3)
               GETSCREEN
               COLORMODE(6)
               IF_PICTURE_IN(0,0, $_xmax,$_ymax, "picture/pet/AUTOLOOT_MODS_CHECK.bmp", -1, 100)// Ïðîâåðèòü àâòîñáîðùèê
                  WAIT(1)
                  GOTO(CLOSED_PET)
               ELSE
                  GOTO(PET)
                  CLOSED_PET:
                  GETSCREEN
                  COLORMODE(6)
                  IF_PICTURE_IN (0,0, $_xmax,$_ymax, "picture/pet/CLOSED_PET.bmp", -1, 100)// Çàêðûòü ïåòà
                     MOVE($_return1-23+RND(0,5),$_return2+3+RND(0,5))  //CLOSE_PET
                     WAITMS(RND(30,75)
                     LCLICK($_xmouse,$_ymouse)
                     WAIT(1)
                     CHECK_PET:
                     GETSCREEN($minimap_petx-20,$minimap_pety+30,$minimap_petx+190,$minimap_pety+160)
                     IF_PIXEL_IN($minimap_petx-20,$minimap_pety+30,$minimap_petx+190,$minimap_pety+160, 9459492)  //Ïðîâåðêà ïåòà ïî ìèíèêàðòå
                        WAIT(10)
                        GOTO(CHECK_PET)
                     ELSE
                        WAIT(5)
                        OPEN_PET_CHECK:
                        GETSCREEN
                        COLORMODE(6)
                        IF_PICTURE_IN (0,0, $_xmax,$_ymax, "picture/pet/OPEN_PET.bmp", -1, 100)// Îòêðûòü ïåòà
                           MOVE($_return1+RND(0,5),$_return2+RND(0,5))  //OPEN_PET
                           WAITMS(RND(30,75)
                           LCLICK($_xmouse,$_ymouse)
                           WAIT(4)
                           GETSCREEN
                           COLORMODE(6)
                           IF_PICTURE_IN(0,0, $_xmax,$_ymax, "picture/pet/AUTOLOOT_MODS_CHECK.bmp", -1, 100)// Ïðîâåðèòü àâòîñáîðùèê
                              GOTO(CLOSED_PET)
                           ELSE
                              GOTO(PET)
                           END_IF
                        END_IF
                     END_IF
                  END_IF
               END_IF
            END_IF
         END_IF
      END_IF
   END_IF
END_IF
WAITMS(25)
END_THREAD

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Сравнение картинок
« Reply #11 on: May 04, 2017, 03:06:01 PM »
один лишний END_IF

messenger

  • Зашел в гости
  • *
  • Posts: 7
    • View Profile
Re: Сравнение картинок
« Reply #12 on: May 04, 2017, 03:29:58 PM »
один лишний END_IF
уже переделал)
Code: (clickermann) [Select]
INC($i,1)
define($i,1)
GETSCREEN
COLORMODE(8)
$name = STRCONCAT("img/pet/","pet", $i, ".bmp")
IF_PICTURE_IN(0,0,$_xmax,$_ymax, $name)
   WAIT(1)
   $search = 1
   LOGWRITE ("Найдена картинка", $name)
ELSE
   $search = 0
   WAITMS(150)
END_IF
SWITCH($i)
CASE(1)
   IF($search = 1)
      LCLICK($_return1-5, $_return2+110)
      WAITMS(50)
      MOVE($_return1-5, $_return2+50)
      WAITMS(300)
      KEYPRESS(#R)
      WAITMS(850)
      $i = 2
   ELSE
      $i = 1
   END_IF
CASE(2)
   IF($search = 1)
      LCLICK($_return1, $_return2)
      WAITMS(450)
   ELSE
      $i = 0
   END_IF
CASE(3)
   IF($search = 1)
      LCLICK($_return1+15, $_return2+5)
      WAITMS(550)
      $i = 3
   ELSE
      $i = 0
   END_IF
CASE(4)
   IF($search = 1)
      LCLICK($_return1+25, $_return2+5)
      WAITMS(350)
   ELSE
      $i = 0
   END_IF
CASE(5)
   IF($search = 1)
      LCLICK($_return1-130, $_return2-100)
      WAITMS(1250)
      $i = 1
   ELSE
      $i = 0
   END_IF
END_SWITCH


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Сравнение картинок
« Reply #13 on: May 04, 2017, 07:26:11 PM »
define($i,1) в данном случаи бессмысленно. Переменная уже объявлена выше функцией INC($i,1)