Author Topic: Рыбалка  (Read 9748 times)

0 Members and 1 Guest are viewing this topic.

101вирус

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Рыбалка
« on: May 30, 2019, 08:59:16 PM »
Задачка состоит в том что , надо сделать нажатие цифры, одной из десяти?
Цвет, размер и его шрифт разный каждые 5 секунд.
Всего 4 цвета: "1из10" желтый на красном, белый на сером, зеленый на желтом, фиолетовый на зеленом.

Идея моя какая, проверка с лева на право пикселей, находим сумму пикселей одного и второго. Далее, выбираем сумму с меньшим цветом пикселей. Допустим наша сумма, 100 . Идем дальше, сумма 100 это наша цифра "семь", командой тыкаем семь. Проблема в том что иногда, у мелкого шрифта, кол-во пикселей совпадает, например 7 и 1 с одним и тем же кол- вом этих самых пикселей. Что предложите, какие идеи? С вырезкой в .bmp не вариант, так как надо успеть за пять секунд, действия медленные и не всегда правильные. Пытаюсь уже третью неделю.
Ниже примеры (скрины)

101вирус

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Рыбалка
« Reply #1 on: May 31, 2019, 06:24:26 AM »
просто определяйте цвет, отличный от основного цвета предложенных цифр и кликайте по нему. Если место появления цифр заранее известно, то особой сложности это не составит.
Места появления цифр разное, и всегда разный шрифт и размер. Нажимать нужно именно клавишу клавиатуры для выбора.
То есть, подходит вариант в моем первом посте, сложность его реализовать.

Космич

  • Активный участник
  • ***
  • Posts: 265
    • View Profile
Re: Рыбалка
« Reply #2 on: May 31, 2019, 06:59:43 AM »
а где на игру можно посмотреть?
«Иногда ты ваяешь до тех пор, пока до тебя не дойдёт, что именно ты делаешь.»

101вирус

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Рыбалка
« Reply #3 on: May 31, 2019, 07:18:51 AM »
а где на игру можно посмотреть?
К сожалению видео удалил, но есть на ютубе ролик https://youtu.be/BUtvdFwPWfc?t=145 на 2-25 по времени, видно как происходит выбор.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Рыбалка
« Reply #4 on: May 31, 2019, 02:11:53 PM »
Зона поиска у нас же имеет какие-то внятные границы?

Есть предложение алгоритма.
  • Определяем пару рабочих цветов. Допустим получили красный-желтый.
  • Ищем  красный пиксел и жёлтый.
  • Сравниваем их x-координату и выбираем наименьшую.
  • Ищем самый правый красный и жёлтый пикселы
  • Сравниваем их x-координату и выбираем наибольшую.
  • В итоге получили границы последовательности 0-9 назовём "поле". Главная фишка: хоть шрифты и размеры разные, по фото - кернинг одинаковый
  • Берём среднюю величину жёлтого пиксела (между первым и последним). На самом деле этот шаг можно даже попробовать пропустить и брать всегда первый
  • вычисляем процентное расположение по X на поле нашего усреднённого пиксела. (Процент или десятые доли - это не важно, уже детали)
  • По проценту легко определяется необходимая цифра.
  • Profit

Думаю, накидать код не составит труда, там ничего сложного. Если нужно, могу и в коде набросать.
« Last Edit: May 31, 2019, 02:14:17 PM by Vint »


101вирус

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Рыбалка
« Reply #5 on: June 01, 2019, 04:04:16 AM »
Зона поиска у нас же имеет какие-то внятные границы?

Есть предложение алгоритма.
  • Определяем пару рабочих цветов. Допустим получили красный-желтый.
  • Ищем  красный пиксел и жёлтый.
  • Сравниваем их x-координату и выбираем наименьшую.
  • Ищем самый правый красный и жёлтый пикселы
  • Сравниваем их x-координату и выбираем наибольшую.
  • В итоге получили границы последовательности 0-9 назовём "поле". Главная фишка: хоть шрифты и размеры разные, по фото - кернинг одинаковый
  • Берём среднюю величину жёлтого пиксела (между первым и последним). На самом деле этот шаг можно даже попробовать пропустить и брать всегда первый
  • вычисляем процентное расположение по X на поле нашего усреднённого пиксела. (Процент или десятые доли - это не важно, уже детали)
  • По проценту легко определяется необходимая цифра.
  • Profit

Думаю, накидать код не составит труда, там ничего сложного. Если нужно, могу и в коде набросать.
ВИНТ ты вообще, вообще "Великий" :) Я даже и не думал что, что то напишешьте .... посоветуете. В общем пробовал разное всякое ( с Clickermann)  ;D
Выходило только одно, находил "больший цвет" и пропускал мой белый ,я не могу понять как ему помочь, распознать цыфру, 1 2 3 4 ... как найти алгоритм, что бы правельно Как бы строки меняются, шрифт, следовательно пиксели, цвет. Тут для меня встала проблема. Короч  :) ПомоГи ВиНт!!!!                                                       и да там на видео более понятно, 10 секунд  займет...
« Last Edit: June 01, 2019, 04:37:06 AM by 101вирус »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Рыбалка
« Reply #6 on: June 02, 2019, 06:11:48 PM »
Из первого сообщения я понял что нахождение цвета отработано и с этим проблем нет. Оказывается нет? Мы это умеем или нет?
Для начала научиться стабильно находить два цвета основной и дополнительный. Для этого видео мало, нужны несжатые скриншоты, много выриантов цвета и расположения.


101вирус

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Рыбалка
« Reply #7 on: June 04, 2019, 07:42:04 AM »
Из первого сообщения я понял что нахождение цвета отработано и с этим проблем нет. Оказывается нет? Мы это умеем или нет?
Для начала научиться стабильно находить два цвета основной и дополнительный. Для этого видео мало, нужны несжатые скриншоты, много выриантов цвета и расположения.
Скриншоты сделаны, давно самим "Кликкером", разные варианты цифр и шрифтов. Выписаны все варианты "два цвета основной и дополнительный" (всего 6), кодировки цвета тоже 6. Нужна помощь в написании кода, поиск с лева направо цвета, наименьшего цвета по количеству пикселей, раз в 5 секунд. Ниже пара примеров.
 

1301x803(2.99 MB)

Code: [Select]
[code][/code]


1245x753(2.68 MB)

www.fotolink.su


1221x777(2.72 MB)

www.fotolink.su
« Last Edit: June 04, 2019, 07:54:09 AM by 101вирус »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Рыбалка
« Reply #8 on: June 04, 2019, 03:19:42 PM »
На скринах только два варианта цвета, остальных нет. Это не "много" как я просил.
Если будут проблемы с маленькими шрифтами (а они могут быть, особенно с серым), то кто виноват мы знаем  ;D

Дописать недостающие цвета и указать область поиска (не весь экран!)
Code: (clickermann) [Select]
#name "Рыбалка_101вирус"
// Author: Vint
// Version: 1.0 (04.06.2019)
// Скрипт для Clickermann v4.14.002

#define \n:STRCONCAT(char(13),char(10))

//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++

// область появления цифр
$wnd_x1 = 330
$wnd_y1 = 310
$wnd_x2 = 1600
$wnd_y2 = 970


//Всего 4 цвета:
//желтый на красном        5294320, 3289824
//белый на сером           15790320, 9211020
//зеленый на желтом
//фиолетовый на зеленом

// цвета цифр активных (подсвеченных)
STRSEPARATE("5294320,15790320", ",", $color_actv)

// цвета цифр основных
STRSEPARATE("3289824,9211020", ",", $color_main)


//++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++


SUB(find_x_min, $col) //========================================================
    GETSCREEN($wnd_x1,$wnd_y1, $wnd_x2,$wnd_y2)
    IF_PIXEL_IN($wnd_x1,$wnd_y1, $wnd_x2,$wnd_y2, $col)
        ARRPUSH($dict_min, $_return1)
    ELSE
        LOGWRITE("Цвет ", $col, " не найден! Индекс в массиве: ", $ind)
        SCREENSHOTEX($wnd_x1,$wnd_y1, $wnd_x2,$wnd_y2, "no_color_", 0)
        HALT
    END_IF
END_SUB


SUB(find_x_max, $col) //========================================================
    GETSCREEN($wnd_x1,$wnd_y1, $wnd_x2,$wnd_y2)
    SCANPXL($arr, $wnd_x1,$wnd_y1, $wnd_x2,$wnd_y2, $col)
   
    $len = ARRSIZE($arr)
    IF($len > 0)
        $right_x = -1
        FOR($i=0, $i < $len, 2)
            $X = $arr[$i]
            IF($X > $right_x)
                $right_x = $X
            END_IF
        END_CYC
        UNDEFINE($ARR_SCAN)
        ARRPUSH($dict_max, $right_x)
    ELSE
        LOGWRITE("Цвет ", $col, " не найден! Индекс в массиве: ", $ind)
        SCREENSHOTEX($wnd_x1,$wnd_y1, $wnd_x2,$wnd_y2, "no_color_", 0)
        HALT
    END_IF
END_SUB

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


//##############################################################################

WAITMS(300)
LOGCLEAR

WHILE(1)
    UNDEFINE($dict_min)
    UNDEFINE($dict_max)
   
    // ждём появление одного из активных цветов
    $found = 0
    WHILE($found = 0)
        FOR($n=0, $n < ARRSIZE($color_actv))
            GETSCREEN($wnd_x1,$wnd_y1, $wnd_x2,$wnd_y2)
            IF_PIXEL_IN($wnd_x1,$wnd_y1, $wnd_x2,$wnd_y2, $color_actv[$n])
                $ind = $n
                $found = 1
                $n = 100
                // MOVE($_return1, $_return2)
            ELSE
                WAITMS(100)
            END_IF
        END_CYC
    END_CYC
   
    // определяем минимальные координаты
    find_x_min($color_actv[$ind])
    find_x_min($color_main[$ind])
   
    IF($dict_min[0] < $dict_min[1])
        $x_min = $dict_min[0]
    ELSE
        $x_min = $dict_min[1]
    END_IF
   
    // определяем максимальные координаты
    find_x_max($color_actv[$ind])
    find_x_max($color_main[$ind])
   
    IF($dict_max[0] > $dict_max[1])
        $x_max = $dict_max[0]
    ELSE
        $x_max = $dict_max[1]
    END_IF
   
    // определяем средние координаты активной цифры
    $act_x_min = $dict_min[0]
    $act_x_max = $dict_max[0]
    $act_x = ($act_x_min + $act_x_max) / 2
   
    // высчитываем активную цифру
    $step = ($x_max - $x_min) / 10
    $result = INT(($act_x - $x_min) / $step)
   
    LOGWRITE("----------------------------------")
    LOGWRITE("Поле min-max ", $x_min, " / ", $x_max)
    LOGWRITE("Act_X ", $act_x, "   ", $act_x_min, " / ", $act_x_max)
    LOGWRITE("Ответ: ", $result)
    LOGWRITE(\n)
   
    // действие
    KEYPRESS($result+48)
    WAITMS(5000)  // подобрать паузу, чтобы небыло многократного срабатывания на одну комбинацию
    // или делать задержку выполнения по особым признакам.
   
    // другие действия (определение окончания и т.п.)
END_CYC

HALT
« Last Edit: June 04, 2019, 03:24:16 PM by Vint »


101вирус

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Рыбалка
« Reply #9 on: June 05, 2019, 08:09:48 AM »
"Просек" как работает  :) Логично в принципе, я не мог понять как этот "Act_X " найти, все супер но надо работать еще, буду заниматься. И еще, как сюда свои наработки выкладывать? Говорит форум, много буКав. Наверно надо пойти на ФАкЮ  :)
 
Винт, скрин даже один, не помещается на форум, 2 мегаВатта :) весит.  Могу конечно сбросить, в архив закатать, если интересно.
« Last Edit: June 05, 2019, 08:17:59 AM by 101вирус »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Рыбалка
« Reply #10 on: June 05, 2019, 02:03:35 PM »
В png сохраняй. На обменник, на Яндкс.Диск, Гугл диск и прочие "диски".


101вирус

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Рыбалка
« Reply #11 on: June 07, 2019, 11:20:17 AM »
Переконвертировал в png, засунул в архив https://yadi.sk/d/ttsWqTlqhzQ71w

Проблема с серым цветом и вот этим вот шрифтом , видимо из-за наклона, ну это фиг с ним. А вот на серый как то неправильно реагирует, не находит.
Винт а вот это
Code: [Select]
SCREENSHOTEX($wnd_x1,$wnd_y1, $wnd_x2,$wnd_y2, "no_color_", 0)
специально в коде  :D???
На скринах только два варианта цвета, остальных нет. Это не "много" как я просил.
Если будут проблемы с маленькими шрифтами (а они могут быть, особенно с серым), то кто виноват мы знаем  ;D


Я тут подумал, можно же прописать что бы цвет менял самостоятельно. Типо с серого на тот же красный (3289824), на работу кода повлияет? Вообщем буду пробовать. 8)
« Last Edit: June 07, 2019, 01:09:08 PM by 101вирус »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Рыбалка
« Reply #12 on: June 07, 2019, 06:07:55 PM »
С серым неправильно, потому, что его много не на цифрах. Находит не там.
Пока не смотрел, это предположение.


101вирус

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Рыбалка
« Reply #13 on: June 20, 2019, 03:58:11 AM »
С серым неправильно, потому, что его много не на цифрах. Находит не там.
Пока не смотрел, это предположение.
Винт, можешь помочь?
Привязать к твоему коду, который выше, добавить "распозновалку капчи". Она появляется каждые, 16 минут. Если несложно напишите пожалуйста код, распознования. Нарезал цифры, этой капчи, цвет одинаков, шрифт и фон тоже, кол-во цыфр всегда пять. Сам думал, привязаться к слову "КОД", как только появляется это слово, скрипт срабатывает на "капчу". Ниже скрин ... спасибо.
Code: [Select]
#name "Распознавание чисел"
// Author: Vint
// Version: 1.5 (28.05.2015)
// Скрипт для Clickermann v4.11 002

// подключение number_read
// #include "Распознавание чисел 1.5.cms"
//==============================================================================
SUB(sort_arr)  // сортируем $data по возрастанию X
   $data_size = ARRSIZE($data)
   FOR($out=0, $out < $data_size, 2)
      $min = $data[$out]
      $ind = $out
     
      FOR($in=($out+2), $in < $data_size, 2)
         IF($data[$in] < $min)
            $min = $data[$in]
            $ind = $in
         END_IF
      END_CYC
      //LOGWRITE("минимум: ", $min, "  ", $ind, " - ", $out)
      $X =  $data[$ind]
      $Y =  $data[$ind+1]
     
      $data[$ind] = $data[$out]
      $data[$ind+1] = $data[$out+1]
      $data[$out] = $X
      $data[$out+1] = $Y
     
      //LOGWRITE($X, " / ", $Y)
      WAITMS(20)
   END_CYC
END_SUB

//==============================================================================
SUB(number_read, $f_x1,$f_y1,$f_x2,$f_y2, $pref, $c_mode)
   // $f_x1, $f_y1 область ЛевоВерх
   // $f_x2, $f_y2 область ПравоНиз
   // $pref = "textures\digit_" префикс имён файлов с цифрами (для разных шрифтов)
   // $c_mode - режим COLORMODE
   
   // Результат возвращается в $res если не найдено $res=-1
   
   
   $res = -1 // очищаем ответ
   UNDEFINE($data) // главный массив данных
   UNDEFINE($a_scan) // временный массив для SCANPICTURE
   $SHIFT_X = 15 // смещение (кол-во игнор пикселов вокруг найденного)
   $SHIFT_Y = 15
   
   GETSCREEN
   IF($c_mode > 0)
      COLORMODE($c_mode, $f_x1,$f_y1,$f_x2,$f_y2)
   END_IF
   FOR ($i=0, $i < 11)
      SWITCH($i)
      CASE(0)
         $pr = 95
      CASE(1)
         $pr = 99
         //      CASE(2)
         //         $pr = 95
      CASE(3)
         $pr = 93
      CASE(4)
         $pr = 95
      CASE(5)
         $pr = 95
      CASE(6)
         $pr = 95
      CASE(7)
         $pr = 95
      CASE(8)
         $pr = 94
         //      CASE(9)
         //         $pr = 95
      DEFAULT
         $pr = 100
      END_SWITCH
     
      SCANPICTURE($a_scan, $f_x1,$f_y1,$f_x2,$f_y2, STRCONCAT($pref,$i,".bmp"), 15527148, $pr)
     
      // заносим 'X,цифра' в $num с учётом мёртвых зон
      $a_scansize = ARRSIZE($a_scan)
      IF($log0 = 1)
         LOGWRITE ("Ищем картинку ", $i, "  найдено ", $a_scansize/2)
      END_IF
     
      FOR($j=0, $j < $a_scansize, 2)
         $X = $a_scan[$j]
         $Y = $a_scan[$j+1]
         
         // проверяем мёртвые зоны
         $dead_zone = 0
         $dead_size = ARRSIZE($dead)
         FOR($m=0, $m < $dead_size, 2)
            $X_old = $dead[$m]
            $Y_old = $dead[$m+1]
            IF($log0 = 1)
               LOGWRITE ("$X/$X_old = ", $X, " / ", $X_old)
               LOGWRITE ("$X/$Y = ", $X, " / ", $Y, "   ABS ", ABS($X - $X_old))
            END_IF
            IF((($Y - $Y_old) < $SHIFT_Y+1) & (ABS($X - $X_old) < $SHIFT_X+1))
               $dead_zone = 1
               $m = $dead_size + 10
            END_IF
         END_CYC
         
         IF($log0 = 1)
            LOGWRITE ("$dead_zone = ", $dead_zone)
            LOGWRITE ("$dead_size = ", $dead_size)
         END_IF
         IF($dead_zone = 0)
            ARRPUSH($dead, $X)
            ARRPUSH($dead, $Y)
            ARRPUSH($data, $X)
            ARRPUSH($data, $i)
            IF($log0 = 1)
               LOGWRITE ("добавляем ", $i, " $X/$Y = ", $X, " / ", $Y)
            END_IF
         END_IF
      END_CYC
      IF($log0 = 1)
         LOGWRITE ("после добавления ", $i, " всего ", ARRSIZE($data)/2)
         LOGWRITE (" ")
      END_IF
      UNDEFINE($dead)
      UNDEFINE($a_scan)
   END_CYC
   
   $data_size = ARRSIZE($data)
   IF($data_size > 0)
      sort_arr()
      IF($log0 = 1)
         LOGWRITE ("цифр после сортировки ", ARRSIZE($data)/2)
      END_IF
     
      FOR($i=1, $i < $data_size, 2)
         IF($res = -1)
            $res = STRCONCAT("", $data[$i])   // если первыё символ
         ELSE
            IF($data[$i] < 10)
               $res = STRCONCAT($res, $data[$i]) // последующие символы цифры
            ELSE
               $res = STRCONCAT($res, "") // последующие символы  зпт
            END_IF
         END_IF
      END_CYC
      //$res = ROUND($res, -8)
   ELSE
      LOGWRITE ("число не найдено")
   END_IF
END_SUB

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


LOGCLEAR
$log = 1
//$log0 = 1
number_read(49,701, 96,715, "textures\digit_", 7)
LOGWRITE ("Найдено число:  ",$res)
HINTPOPUP("Найдено число:  ",$res)
HALT
Вот бы его подкоректировать под колормод7. Находит цифры, с первого скрина с которого нарезал, дальше находит но, одну или три (уже на других)
 
« Last Edit: June 20, 2019, 04:23:14 PM by 101вирус »

101вирус

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Рыбалка
« Reply #14 on: June 26, 2019, 04:19:41 AM »
Может другой кто поможет, Винт чет не хочет советовать ...