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

Основной раздел => Общие вопросы => Topic started by: Regaf on December 12, 2014, 12:57:04 PM

Title: как найти фрагмент изображения по образцу из файла?
Post by: Regaf on December 12, 2014, 12:57:04 PM
Подскажите  на компьютере сохранен небольшой фрагмент 2х2 см. скриншота рабочего стола в формате jpeg нужно чтобы кликерман отыскал этот фрагмент на рабочем столе и кликнул по нему. файл jpeg будет сделан на другом компьютере на котором возможно установлено  другое разрешение экрана. реально это сделать, если да то как?
Title: Re: как найти фрагмент изображения по образцу из файла?
Post by: Oraven on December 12, 2014, 01:49:16 PM
Открываешь справку, читаешь раздел Экран, функция IF_PICTURE_IN.

Начнем с того что фрагмент должен быть в BMP 24bit формате. Естественно конвертировать из JPG в BMP недопустимо. Размер фрагмента должен быть не более 50x50 пикселов.
Конечно кликер проглотит любой размер, но чем больше картинка тем дольше поиск, вплоть до зависания. Например в картинке 50x50 2500 пикселов, а в 100х2 всего 200. В результате вторая картинка найдется гораздо быстрее.

Полученный фрагмент нужно положить в туже папку где лежит скрипт.
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
END_IF

Можно также сделать снимок самим кликером, функция SCREENSHOTEX позволяет сохранить заданную область
Code: (clickermann) [Select]
GETSCREEN // делаем снимок в буфер кликера
SCREENSHOTEX(400,400, 450,450, "Image_", 0) // сохраняем снимок
HALT // стоп
Title: Re: как найти фрагмент изображения по образцу из файла?
Post by: Regaf on December 13, 2014, 05:00:55 PM
попробовал так как вы написали. в неподвижных играх все отлично, но для той что я хотел автоматизировать процесс не подходит. в игре названия кораблей которые нудно атаковать написаны вроде бы не подвижно, но похоже что текст и и фон за текстом с небольшой прозрачностью и движущийся фон игры все время не значительно меняет  изображение, глазом этого не вижу но кликер не находит заданный фрагмент.  Можете подсказать как это победить?
Title: Re: как найти фрагмент изображения по образцу из файла?
Post by: Oraven on December 13, 2014, 05:16:17 PM
Используй цветокоррекцию, она сократит оттенки. И процент совпадения, позволит проигнорить несоответствующие пикселы.

Делаем скриншот с цветокоррекцией, вырезаем фрагмент
Code: (clickermann) [Select]
// Получение скриншота с цветокоррекцией (фильтр 6)
GETSCREEN
COLORMODE(6)
SCREENSHOT
HALT

Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6) // указываем тот же уровень
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "file.bmp", -1, 80) // без прозрачности, 80% совпадения
   LCLICK($_return1, $_return2)
   WAITMS(100)
END_IF
Title: Re: как найти фрагмент изображения по образцу из файла?
Post by: Regaf on December 15, 2014, 01:36:47 PM
в моем случае фон за текстом который нужно искать меняется от светло синего до черного. попробовал применить COLORMODE(6) не помогло. пробовал COLORMODE(8 ) сохраненная картинка получается идеальной (белый текст, черный фон) но все равно не находит ее кликер даже с погрешность 50%
Title: Re: как найти фрагмент изображения по образцу из файла?
Post by: Vint on December 15, 2014, 04:09:55 PM
Покажи скрины и картинку поиска, а то так гадать можно до второго пришествия.
(В PNG или BMP)

P.S И часть кода с поиском, а то тут всякое бывало...
Title: Re: как найти фрагмент изображения по образцу из файла?
Post by: Regaf on December 16, 2014, 12:43:58 PM
как вставить изображение в ответ не разобрался. прикрепил как вложение.

так сохраню картинку
Code: [Select]
GETSCREEN
COLORMODE(6)
SCREENSHOTEX(1234,334, 1262,348, "Image_", 0)
HALT // стоп

так ищу картинку в игре
Code: [Select]
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (0,0, $_xmax,$_ymax, "Image_0000.bmp", -1, 100)
   LCLICK($_return1, $_return2)
   WAITMS(100)
END_IF
Title: Re: как найти фрагмент изображения по образцу из файла?
Post by: Vint on December 16, 2014, 01:25:03 PM
А где картинка что ты ищешь? Которую заготовил?

Ну как минимум видно, что чётких границ нигде нет. Процент точно должен быть не 100.
И почему COLORMODE - 6, когда ты говорил 8.
Title: Re: как найти фрагмент изображения по образцу из файла?
Post by: Regaf on December 16, 2014, 01:57:17 PM
просто сохранен скрипт был COLORMODE с фильтром 6. как писал выше пробовал разные варианты в том числе и 8. также пробовал менять процент совпадения от 100 до 50 с шагом в 10. естественно фильтр COLORMODE ставил одинаковый как для сохранения картинки так и для поиска.
Title: Re: как найти фрагмент изображения по образцу из файла?
Post by: Regaf on December 16, 2014, 01:59:01 PM
и самый главный вопрос который надо наверное было задать раньше всего.  есть какая то возможность делать скриншот картинки на одной машине и передавать в виде файла на  другие, а на других машинах уже искать противника. на машинах разное разрешение и диагонали экранов. разрешение то выставить одинаковое можно но будет ли от этого толк?  смысл сего скрипта в том что бы 1 человек  одной командой указывал другим клиентам цель которую нужно дружно слить.
Title: Re: как найти фрагмент изображения по образцу из файла?
Post by: Vint on December 16, 2014, 02:34:30 PM
Можно, только синхронизировать нужно работу каким то образом. Чтобы ждал команды. Разрешение может быть разное.

И где этот "як." на первом скриншоте? С чем сравнивать? И желательно картинок несколько в разное время/месте.
Как будешь находить место, которое захватывать?
Самое главное нужно снизить процент совпадения. На сколько нужно подобрать, зависит от размера образца и как сильно корёжит искомую область.
Область выбрана не совсем удачно, куча чёрного не нужна.
Если ты всё время будешь захватывать именно такой размер 17х11 и в этом месте. То снижать думаю процентов на 5-7.
17х11=187 пикселов (всего)
5% = 9 пикс. Уже дофига на такой размер букв (но нужно смотреть другие варианты)

Уменьшить область отрубив чёрное, оставив не больше 1 пикс. рамки или вообще без неё. Тут важно как ты будешь область выцеплять.
Title: Re: как найти фрагмент изображения по образцу из файла?
Post by: Vint on December 16, 2014, 05:28:13 PM
Я так понял он ищет не звездолёты. Он ищет ники игроков и хочет передать часть отображаемого ника, чтобы другие компы/скрипты искали его у себя и нападали.
Т.е. он подумал и выбрал цель и все на неё кинулись толпой.
Title: Re: как найти фрагмент изображения по образцу из файла?
Post by: Vint on December 16, 2014, 06:38:39 PM
Сумма пикселей там не катит. Сглаживание сильно разнит текст. И панелька с ником перетекает в полупрозрачность.