Автокликер Clickermann :: Форум

Основной раздел => Общие вопросы => Topic started by: barnybad on October 16, 2018, 11:14:36 PM

Title: Повисает программа при использовании IF_PICTURE_IN
Post by: barnybad on October 16, 2018, 11:14:36 PM
Здравствуйте, отлаживаю модуль инициализации координат окон в Еve онлайн, но вот столкнулся с таким моментом, когда все 4 картинки находятся на экране, выполнение скрипта занимает 1-2 сек, а если этих изображений нет, то программа  Clickermann подвисает(не отвечает) где то на минуту что бы выполнить скрипт.
У меня Win7, i-5 1.7GHz, 4Gb ОЗУ
Это из за того что у меня слабый ноут или что то со скриптом не так?
Может необходимо увеличить/уменьшить искомые изображения? обозначение bgcolor увеличивает скорость выполнения?
 
Code: (clickermann) [Select]
#name "Поиск окон"
GETSCREEN($_xmin,$_ymin,$_xmax,456)
COLORMODE(6,$_xmin,$_ymin,$_xmax,456)
IF_PICTURE_IN($_xmin,$_ymin,$_xmax,456,"Drons.bmp",4144959,95)
   PRINT("X ",$_return1," Y ",$_return2)
ELSE
   PRINT("Drons nf")
END_IF
IF_PICTURE_IN($_xmin,$_ymin,$_xmax,456,"Object.bmp",4144959,95)
   PRINT("X ",$_return1," Y ",$_return2)
ELSE
   PRINT("Object nf")
END_IF
IF_PICTURE_IN($_xmin,$_ymin,$_xmax,456,"Overview.bmp",4144959,95)
   PRINT("X ",$_return1," Y ",$_return2)
ELSE
   PRINT("Overview nf")
END_IF
IF_PICTURE_IN($_xmin,$_ymin,$_xmax,456,"SanshaHaven.bmp",4144959,100)
   PRINT("X ",$_return1," Y ",$_return2)
ELSE
   PRINT("SanshaHaven nf")
END_IF
HALT
Title: Re: Повисает программа при использовании IF_PICTURE_IN
Post by: barnybad on October 17, 2018, 02:10:59 PM
Уменьшил области поиска(хотя разрешение и так не большое как мне кажется 1280*720), повысил параметры [currency] до 99-100, 100% не всегда срабатывает, если окно выделено оно немного меняет обрамление,  попробовал уменьшить искомые изображения, как то стало хуже искать, вернул обратно. В итоге удалось сократить время выполнения(подвисания) скрипта до 10 сек, если не одно изображение не найдено. Еще вопрос можно ли исключить два цвета с помощью параметра  [bgcolor]?
Пробовал писать так:
Code: (clickermann) [Select]
IF_PICTURE_IN($_xmin,$_ymin,$_xmax,$_ymax,"Object.bmp",(4144959 OR 255),95)
Title: Re: Повисает программа при использовании IF_PICTURE_IN
Post by: Oraven on October 17, 2018, 02:38:38 PM
Еще вопрос можно ли исключить два цвета с помощью параметра  [bgcolor]?
Пробовал писать так:
Code: (clickermann) [Select]
IF_PICTURE_IN($_xmin,$_ymin,$_xmax,$_ymax,"Object.bmp",(4144959 OR 255),95)

Нет это так не делается. Ты должен сам выбрать какой то цвет и зарисовать этим цветом, в графическом редакторе, все лишнее!
Обычно я выбираю яркозеленый, вобщем такой цвет которого явно нет на искомой картинке.
Title: Re: Повисает программа при использовании IF_PICTURE_IN
Post by: Vint on October 17, 2018, 03:25:37 PM
В итоге удалось сократить время выполнения(подвисания) скрипта до 10 сек, если не одно изображение не найдено.

Это очень большое время.
При указанных данных остаётся две причины.
1. Помимо монитора 1280*720 подключен ещё [4k  :)]
2. Один или все образцы сделаны слишком большими.

Скорее вторая причина. Приемлемый размер образцов до 50х50 px. Обычно это в районе 5-20 в зависимости от надобности. Может быть и длинный узкий образец 100х3 или 200х2, особенно при проверке текстов.
Title: Re: Повисает программа при использовании IF_PICTURE_IN
Post by: barnybad on October 17, 2018, 05:01:30 PM
В приложении архив со всеми картинками, можете попробовать у себя запустить, посмотреть сколько будет искать на картинке для анализа(ее я открывал стандартным просмоторщиком изображений и ставил "реальный размер", еще надо в скрипте закоментить COLORMODE, хотя и так срабатывало).
1. Монитор у меня один с разрешением 1366*768 :)
2. Размеры образцов следующие
39x18
35x17
39x17
53x12
Код тоже подправил:
Code: (clickermann) [Select]
#name "Поиск окон"
SUB(InitWindows)
   GETSCREEN(33,$_ymin,1143,150)
   COLORMODE(6,33,$_ymin,1143,150)
   IF_PICTURE_IN(33,$_ymin,1143,150,"Drons.bmp",4144959,99)
      PRINT("Дроны X=",$_return1," Y=",$_return2)
   ELSE
      PRINT("Дроны не найдены")
   END_IF
   IF_PICTURE_IN(33,$_ymin,1143,150,"Object.bmp",4144959,98)
      PRINT("Объект X=",$_return1," Y=",$_return2)
   ELSE
      PRINT("Объекты не найдены")
   END_IF
   IF_PICTURE_IN(33,$_ymin,1143,150,"Overview.bmp",4144959,99)
      PRINT("Обзорная X=",$_return1," Y=",$_return2)
   ELSE
      PRINT("Обзорная не найдена")
   END_IF
END_SUB 
SUB(SearchSanshaHaven)
   GETSCREEN(33,$_ymin,600,517)
   COLORMODE(6,33,$_ymin,600,517)
   IF_PICTURE_IN(33,$_ymin,600,517,"SanshaHaven.bmp",4144959,100)
      PRINT("Гавань X=",$_return1," Y=",$_return2)
   ELSE
      PRINT("Гавань не найдена")
   END_IF
END_SUB
InitWindows()
SearchSanshaHaven()
HALT