Author Topic: Поиск картинок  (Read 4781 times)

0 Members and 1 Guest are viewing this topic.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Поиск картинок
« on: November 19, 2020, 05:06:01 PM »
Картинки находи все работает норм, но после того как найдет картинку, клики идут с лева на право и сверху вниз. Возможно ли сделать так что бы прокликивалось наоборот, с низу вверх и с права на лево?
Code: (clickermann) [Select]
FOR($Varr=1, $Varr < 30)
   GETSCREEN
   SCANPICTURE($ARR_SCAN, 0,0, $_xmax,$_ymax, STRCONCAT($Varr, ".bmp"), -1, 100)
   $scan_size = ARRSIZE($ARR_SCAN)
   FOR($ARR_NUM=0, $ARR_NUM < $scan_size, 2)
      $X = $ARR_SCAN[$ARR_NUM]
      $Y = $ARR_SCAN[$ARR_NUM+1]
      LCLICK($X + 3, $Y + 3)
      WAITMS(100)
   END_CYC
   UNDEFINE($ARR_SCAN)
   WAITMS(50)
END_CYC

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск картинок
« Reply #1 on: November 20, 2020, 08:50:12 AM »
Code: (clickermann) [Select]
FOR($Varr=1, $Varr < 30)
    GETSCREEN
    SCANPICTURE($ARR_SCAN, 0,0, $_xmax,$_ymax, STRCONCAT($Varr, ".bmp"))
    $scan_size = ARRSIZE($ARR_SCAN)
    FOR($ARR_NUM=$scan_size-2, $ARR_NUM >= 0, -2)
        $X = $ARR_SCAN[$ARR_NUM]
        $Y = $ARR_SCAN[$ARR_NUM+1]
        LCLICK($X + 3, $Y + 3)
        WAITMS(100)
    END_CYC
    UNDEFINE($ARR_SCAN)
    WAITMS(50)
END_CYC


Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Поиск картинок
« Reply #2 on: November 21, 2020, 12:31:27 PM »
Спасибо большое, но это не совсем то что нужно, теперь он делает следующее, если одна из искомых картинок найдена больше чем 1, то он проликивает как я хотел с низу и на лево а вот если всего одна то кликает с верху на право. Я так понимаю нужно сам поиск картинки изменить, если он будет сканировать с низу в лево то и кликать будет так как нужно.

Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Поиск картинок
« Reply #3 on: November 21, 2020, 12:48:03 PM »
А можно как то не кликать сразу по найденным картинкам, а записать все координаты найденных картинок и после поиска прокликать их все снизу в лево?

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск картинок
« Reply #4 on: November 23, 2020, 09:15:40 AM »
а вот если всего одна то кликает с верху на право.
Это сверх моего понимания. Как он может прокликивать, одну точку, не в том направлении. Какое направление у одной точки?

А можно как то не кликать сразу по найденным картинкам, а записать все координаты найденных картинок и после поиска прокликать их все снизу в лево?
Конечно можно. Ты до сих пор не понимаешь что делает каждая строка?

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

Что нужно? Поиск всех 29 картинок в одну кучу и прокликивание их всех справа-налево снизу-вверх?
Если да, то учти, что картинки теперь разные и вырезал ты их с разных мест по высоте. Найдёт образец на 1px выше  и не важно, что она в середине ряда, прокликает последней. Это устраивает? Если нет, как это будешь решать?


Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Поиск картинок
« Reply #5 on: November 23, 2020, 05:46:55 PM »
Виноват прошу прощения, не правильно написал, мне нужно найти кучу картинок, и прокликать их в обратном направлении. Я понимаю что делает этот скрипт но не могу понять как он работает и не могу изменить его под мою ситуацию.
Я понимаю что если картинка одна и она ищется первой и находится наверху то получается она прокликается первой, потом найдется другая где то в конце и так далее. Мне надо найти все картинки, и прокликать их с низу вверх с права налево. Почему мне это надо, дело в том что если кликнуть первую картинку, она уйдет и все остальные сместятся на одну ячейку выше, получается следующее, нашел первую картинку клик по ней, пока она уйдет кликер находит вторую, но в момент клика второй ее уже нет там она сместилась на ячейку выше и клик происходит уже по соседней картинке. Выложу картинку для наглядности, задача есть 7 цветов от A до G найдено 9 цветов все по одному, цвет G 3шт надо прокликать так как я пронумеровал их.
« Last Edit: November 23, 2020, 05:54:24 PM by Ramzesia »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск картинок
« Reply #6 on: November 24, 2020, 05:55:21 PM »
Code: (clickermann) [Select]
SUB(sort_y) //==================================================================
    $len = ARRSIZE($corr)
    FOR($a=1, $a < ($len-2), 2)
        $min = $corr[$a]
        $ind = $a
        FOR($b=$a+2, $b < $len, 2)
            INC($iter)
            IF($corr[$b] < $min)
                $min = $corr[$b]
                $ind = $b
            END_IF
        END_CYC
        $X = $corr[$ind-1]
        $Y = $corr[$ind]
        //LOGWRITE("$min = ", $min, "   ", $X, " - ", $Y)
       
        $corr[$ind-1] = $corr[$a-1]
        $corr[$ind] = $corr[$a]
        $corr[$a-1] = $X
        $corr[$a] = $Y
        INC($rearrangement)
    END_CYC
END_SUB

SUB(sort_x, $st, $en) //========================================================
    //LOGWRITE("sort_x. $st/$en  ", $st, "/", $en)
    IF($st ! $en)
        FOR($a=$st, $a < $en, 2)
            $min = $corr[$a]
            $ind = $a
            FOR($b=$a+2, $b <= $en, 2)
                INC($iter)
                IF($corr[$b] < $min)
                    $min = $corr[$b]
                    $ind = $b
                END_IF
            END_CYC
            $X = $corr[$ind]
            $Y = $corr[$ind+1]
            //LOGWRITE("$min = ", $min, "   ", $X, " - ", $Y)
           
            $corr[$ind] = $corr[$a]
            $corr[$ind+1] = $corr[$a+1]
            $corr[$a] = $X
            $corr[$a+1] = $Y
            INC($rearrangement)
        END_CYC
    END_IF
END_SUB

SUB(sort_yx) //================================================================
    // сортируем по X, пары с одинаковым Y (с допуском limit_y)  len_equal_y
    $start = 0
    $end = 0
    $old = $corr[1]
    FOR($i=3, $i < $len, 2)
        INC($iter)
        IF(ABS($corr[$i] - $old) <= $limit_y)
            $old = $corr[$i]
            $end = $i - 1
        ELSE
            $old = $corr[$i]
            sort_x($start, $end)
            $start = $i - 1
            $end = $i - 1
        END_IF
    END_CYC
    sort_x($start, $end)
END_SUB

//==============================================================================


UNDEFINE($ARR_SCAN)
GETSCREEN
FOR($Varr=1, $Varr < 30)
    SCANPICTURE($corr, 0,0, $_xmax,$_ymax, STRCONCAT($Varr, ".bmp"))
    WAITMS(5)
END_CYC

$limit_y = 0  // допуск по y когда считаются в одном ряду
sort_y()
sort_yx()

$scan_size = ARRSIZE($corr)
FOR($ARR_NUM=$scan_size-2, $ARR_NUM >= 0, -2)
    $X = $corr[$ARR_NUM]
    $Y = $corr[$ARR_NUM+1]
    LCLICK($X + 3, $Y + 3)
    WAITMS(100)
END_CYC
« Last Edit: November 24, 2020, 05:57:36 PM by Vint »


Ramzesia

  • Активный участник
  • ***
  • Posts: 263
    • View Profile
Re: Поиск картинок
« Reply #7 on: November 24, 2020, 10:37:56 PM »
Просто шедеврально, я в восторге, идеально прям то что нужно, спасибо огромнейшее, еще и за 7 сек все делает.

Atas

  • Активный участник
  • ***
  • Posts: 147
    • View Profile
Re: Поиск картинок
« Reply #8 on: November 25, 2020, 09:10:39 AM »
Code: (clickermann) [Select]
FOR($a = 1, $a <= 7) // ищем 7 картинок
   
   GETSCREEN
   SCANPICTURE($arr, 667,416, 1249,718, STRCONCAT("bmp\", $a, ".bmp"), -1, 100) // указать свои координаты области поиска
   
   FOR($b = 0, $b < ARRSIZE($arr), 2)
      $x = STRCONCAT("000", $arr[$b])
      $y = STRCONCAT("000", $arr[$b+1])
      ARRPUSH($arr2, STRCONCAT(STRCUT($y, STRLEN($y)-3, 4), STRCUT($x, STRLEN($x)-3, 4)))
   END_CYC
   UNDEFINE($arr)
   WAITMS(30) // пауза после поиска каждой картинки
   
END_CYC

ARRSORT($arr2) // сортировка с учетом X и Y (в приоритете Y)

WHILE(ARRSIZE($arr2))
   $str = ARRPOP($arr2)
   LCLICK(STRCUT($str, 5, 8), STRCUT($str, 1, 4))
   WAITMS(300) // пауза между кликами
END_CYC

HALT


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск картинок
« Reply #9 on: November 25, 2020, 10:30:49 AM »

Прикольно. Раньше тоже строки любил. Жаль, что CM не нормальный и с массивами работает очень медленно, да и инструментов мало.
Код не делал, а достал свой старый из нафталина, тогда ещё небыло ARRSORT.

И беда в версии 4.14. Он при ARRSORT принудительно переводит в числа и выковыривать координаты тяжелее. Код нужно дорабатывать.



И разница во времени выполнения, это из-за сломанного принта в лог на 4.14.003b (на скрине ошибся, написал 002). Он каждый раз всё перерисовывает или в цикле выводит, ХЗ
https://youtu.be/tw93Q7NgvxY
« Last Edit: November 25, 2020, 10:36:41 AM by Vint »


Atas

  • Активный участник
  • ***
  • Posts: 147
    • View Profile
Re: Поиск картинок
« Reply #10 on: November 25, 2020, 11:15:20 AM »
Проверил сейчас свой скрипт на CM v4.14.000b x32 (19.03.2019) - нормально всё работает.
Других версий у себя не нашел. Но все равно они из будущего. :)

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Поиск картинок
« Reply #11 on: November 25, 2020, 11:18:03 AM »
Почему будущего? Самое что ни на есть настоящее.


kiril

  • Активный участник
  • ***
  • Posts: 106
    • View Profile
Re: Поиск смысла
« Reply #12 on: November 25, 2020, 01:45:33 PM »
Я уже решил, что все эти мёртворождённые 4.14 -остались В ПРОШЛОМ.

shatun

  • Освоившийся
  • **
  • Posts: 36
    • View Profile
Re: Поиск картинок
« Reply #13 on: March 11, 2022, 04:49:59 PM »
Прошу прощения код от Atas у меня не работает, а если запускаю код который написал Vint всё чётко работает. Может что-то делаю не так...
Так или иначе большое вам спасибо. уже дней пять смотрю на форуме решение и ничего ближе к своей задаче пока не нашёл.
Уточняющий вопрос по этой теме - а можно настроить этот скрипт чтобы он работал с анимированными картинками?
Ну например разные монетки из разных цветов вращаются вокруг своей оси и опускаются вниз. Скрипт здорово работает именно по той логике которой описал автор топика, но у меня почему-то не получается чтобы он кликал по двигающимся вниз монеткам. Подскажите пожалуйста как доработать этот скрипт?
Я уже  пробовал менять   COLORMODE и размер окна в котором происходит поиск, но пока мои попытки не увенчались успехом.
Или кликермен не может искать анимированные (картинки в движении) и нажимать на них? Если вдруг кто нашёл похожее обсуждение оставьте пожалуйста ссылочку.
За ранее благодарю!
« Last Edit: March 11, 2022, 04:51:41 PM by shatun »

Oblie1968

  • Освоившийся
  • **
  • Posts: 29
    • View Profile
Re: Поиск картинок
« Reply #14 on: March 13, 2022, 03:04:12 AM »
дело в том что если кликнуть первую картинку, она уйдет и все остальные сместятся на одну ячейку выше
Может, надо просто кликать по тому месту, где первая картинка, раз остальные смещаются на её место, и кликать по нему пока на этом первом месте есть эта картинка?  :D

Насчёт поиска анимаций. Можно, всё можно сделать, но нужно понимать, что кликерман работает с моментальным снимком экрана. Один из вариантов - разобрать анимацию по кадрам (мх будет не много) и искать все эти кадры отдельно, потом сводить найденное в общий массив и дальше по сценарию. Если вдруг у вас все монетки крутятся синхронно, то можно "фотографировать" экран, пока не встретится нужная картинка. Может, при кручении монет есть отдельные пиксели, которые не меняются, тогда можно для ускорения ориентироваться на эти пиксели, и если нужно, потом уже проверять, то ли вы нашли.
Я вообще стараюсь не пользоваться поиском картинок, обычно всегда можно выделить характерные для этой картинки пиксели и работать с ними, всё проходит намнооооооого быстрее.