Author Topic: Не выполняется поиск по картинке  (Read 4752 times)

0 Members and 2 Guests are viewing this topic.

muryginds

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Не выполняется поиск по картинке
« on: November 17, 2015, 07:37:10 PM »
Собственно код

$WM_LBUTTONDOWN = 0x0201 // Левая кнопка мыши зажата
$WM_LBUTTONUP = 0x0202 // Левая кнопка мыши отпущена
$MK_LBUTTON = 0x0001 // Левая кнопка мыши в нажатом состоянии
$WM_MOUSEMOVE = 0x0200  // Мышь передвинута
$x1 = 400 // Координата по оси X Начало
$y1 = 950 // Координата по оси Y
$x2 = 400 // Координата по оси X Конец
$y2 = 138 // Координата по оси Y

$wait_like = 0
WHILE($wait_like = 0)
   GETSCREEN
   IF_PICTURE_IN (400,75, 470,40, "level.bmp", -1, 95)
      $wait_like = 1
      MOVE($_return1+3, $_return2+3)
      WAITMS(60)
      LCLICK($_return1+3, $_return2+3)
      MOVE($_xmax,$_ymax)
      WAITMS(1000)
   Else //прокрутить немного
      postmessage($_HWND, $WM_LBUTTONDOWN, $MK_LBUTTON, $x1 + ($y1*65536))
      waitms(60)
      postmessage($_HWND, $WM_MOUSEMOVE, $MK_LBUTTON, $x2 + ($y2*65536))
      waitms(60)
      postmessage($_HWND, $WM_LBUTTONUP, $MK_LBUTTON, $x2 + ($y2*65536))
   END_IF
END_CYC

Суть задачи - поиск по заданному диапазону нужной картинки, при совпадении нажать. Если не нашло - чуть-чуть промотать вниз.

Проблема - не находит искомую картинку level.bmp - постоянно в цикле. Скрипт работает в оконном режиме (привязан к окну) Есть подозрение, что в GETSCREEN попадает что-то не то, как проверить не знаю.

Скриншот экрана с приложением - https://yadi.sk/i/EauGIzYtkXKu4

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #1 on: November 17, 2015, 08:18:20 PM »
Координаты области заданы не верно
Code: (clickermann) [Select]
IF_PICTURE_IN (400,75, 470,40, "level.bmp", -1, 95)75 больше чем 40

Первые два числа это верхний левый угол области поиска, вторые две это нижний правый угол.

Чтобы посмотреть что видит кликер добавь после GETSCREEN функцию SCREENSHOT

muryginds

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #2 on: November 17, 2015, 08:54:03 PM »
Да, это я опечатался, вместо 40 должно быть 940. Но ситуацию это не спасает - немного изменил код и добавил в него GETSCREEN.

Code: (clickermann) [Select]
$wait_like = 0
WHILE($wait_like = 0)
   GETSCREEN
   SCREENSHOT
   IF_PICTURE_IN (400,75, 470,940, "level.bmp")
      $wait_like = 1
      MOVE($_return1+3, $_return2+3)
      WAITMS(60)
LCLICK($_return1+3, $_return2+3)
   Else
      postmessage($_HWND, $WM_LBUTTONDOWN, $MK_LBUTTON, $x1 + ($y1*65536))
      waitms(60)
      postmessage($_HWND, $WM_MOUSEMOVE, $MK_LBUTTON, $x2 + ($y2*65536))
      waitms(60)
      postmessage($_HWND, $WM_LBUTTONUP, $MK_LBUTTON, $x2 + ($y2*65536))
    waitms(2000)
END_IF
END_CYC

Вот что получилось после первой итерации - https://yadi.sk/i/Z8A_G0MXkXSWQ
Вот что после второй - https://yadi.sk/i/CzFnCHJUkXSWW

По логике цикл должен закончится и картинка найтись на второй итерации, но он идет дальше - не пойму в чем причина
« Last Edit: November 17, 2015, 08:56:37 PM by muryginds »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #3 on: November 18, 2015, 08:40:09 AM »
Какая тут логика если картинка меняется, сглаживание смазывает пикселы то вверх то вниз. Зачем писать 95% без цветокоррекции?

Скорректировал твою картинку под COLORMODE(6), проверил на твоем скриншоте теперь находит.
Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (400,75, 470,940, "level_54.bmp", -1, 75)

muryginds

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #4 on: November 18, 2015, 09:34:37 AM »
Не совсем понял вопрос про логику, почему картинка меняется?
95 - это же точность поиска. Прочитал в справке - думал, может поможет найти

в любом случае спасибо большое за подсказку -  вечером попробую!

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #5 on: November 18, 2015, 09:43:03 AM »
Может и поможет... только без анализа, выставленное на обум - не всегда. Наверно 95 слишком высокий процент.
Но при сглаживании текста одним процентом ничего не добиться. Слишком много пикселов меняется (в процентном соотношении). А выставлять 50%...40%... приведёт к нахождению чего попало там где его нет. Рабочий промежуток примерно 70-100%


muryginds

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #6 on: November 18, 2015, 09:46:41 AM »
Может и поможет... только без анализа, выставленное на обум - не всегда. Наверно 95 слишком высокий процент.
Но при сглаживании текста одним процентом ничего не добиться. Слишком много пикселов меняется (в процентном соотношении). А выставлять 50%...40%... приведёт к нахождению чего попало там где его нет. Рабочий промежуток примерно 70-100%

Понятно, спасибо что доступно объяснили =)

а вы переделали картинку уровня после светокоррекции или просто рамки подрезали?
« Last Edit: November 18, 2015, 09:57:53 AM by muryginds »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #7 on: November 18, 2015, 09:59:44 AM »
Картинка переделана, даже так видно. Особенно если смотреть на фон.


Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #8 on: November 18, 2015, 10:04:08 AM »
а вы переделали картинку уровня после светокоррекции или просто рамки подрезали?

Я сделал скриншот с твоего снимка level.bmp кликером с использованием цветокоррекции, потом обрезал все лишнее.

muryginds

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #9 on: November 18, 2015, 10:07:16 AM »
я примерно так это себе и представил

на 75% нашел 56 вместо 54
на 80% нашел 54 - 1 раз, при следующем запуске - прошел мимо. прямо чудиса =)

попробую с искомой картинкой поиграть

П.С. усе, заработало! спасибо. картинку перевырезал
« Last Edit: November 18, 2015, 10:13:02 AM by muryginds »

muryginds

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #10 on: November 18, 2015, 11:24:17 PM »
Назрел вопрос вдогонку.

Code: (clickermann) [Select]
GETSCREEN
   COLORMODE(6)
   SCREENSHOT
   SCREENSHOTEX(273,681, 360,709, "ho", 0)

Делаю скриншот приложения и его фрагмент. Фрагмент статичный. В первом случае текст есть - во втором - сами видите. Скрипт привязан к окну

Скрин - https://yadi.sk/i/Knd3vZ6rkZ8Nn
Фрагмент - https://yadi.sk/i/L5RxiL-bkZ8Mh - это часть кнопки, где размещено слово "домой"
« Last Edit: November 18, 2015, 11:30:39 PM by muryginds »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #11 on: November 19, 2015, 10:00:41 AM »
Где здесь текст?


muryginds

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #12 on: November 19, 2015, 10:37:04 AM »
Вот это нежданчик. Работаю удаленно на другом компьютере через teamviewer, похоже, что зараза кликерманн как-то неправильно координаты мыши считывает. Спасибо!


А вот такой вопрос. В начале скрипта есть объявление метки

Code: (clickermann) [Select]
skip:
LevelSearch
wait(4)

Есть кусок кода, в нем цикл и переход на метку LevelSearch

Code: (clickermann) [Select]
$wait_home = 0
WHILE($wait_home = 0)
   GETSCREEN
   COLORMODE(6)
   IF_PICTURE_IN (0,0, $_xmax,$_ymax, "home.bmp", -1, 75)
      $wait_home = 1
      MOVE($_return1+3, $_return2+3)
      WAITMS(100)
      LCLICK($_return1+3, $_return2+3)
      GOTO(LevelSearch)
   END_IF
   wait(5)
END_CYC

Вопрос - правильно ли я понял конструкцию переходов? и второй - в случае успешного поиска в цикле - перейдет - ли исполнение сразу на метку или сперва выполнится wait(5)


« Last Edit: November 19, 2015, 10:46:49 AM by muryginds »

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #13 on: November 19, 2015, 11:58:15 AM »
И добавлю что выпрыгивать через ГОТО из циклов и подпрограмм нельзя, также как и впрыгивать, это не приведет к ошибке но ломает логику, в дальнейшем могут возникнуть необъяснимые глюки . Цикл должен корректно завершаться и после этого через условие можно прыгать куда угодно.

muryginds

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Re: Не выполняется поиск по картинке
« Reply #14 on: November 19, 2015, 12:10:39 PM »
Понял, всем спасибо. Будем ковырять дальше =)