Author Topic: как найти фрагмент изображения по образцу из файла?  (Read 8292 times)

0 Members and 1 Guest are viewing this topic.

Regaf

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
Подскажите  на компьютере сохранен небольшой фрагмент 2х2 см. скриншота рабочего стола в формате jpeg нужно чтобы кликерман отыскал этот фрагмент на рабочем столе и кликнул по нему. файл jpeg будет сделан на другом компьютере на котором возможно установлено  другое разрешение экрана. реально это сделать, если да то как?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Открываешь справку, читаешь раздел Экран, функция 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 // стоп
« Last Edit: December 12, 2014, 01:55:11 PM by Oraven »

Regaf

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
попробовал так как вы написали. в неподвижных играх все отлично, но для той что я хотел автоматизировать процесс не подходит. в игре названия кораблей которые нудно атаковать написаны вроде бы не подвижно, но похоже что текст и и фон за текстом с небольшой прозрачностью и движущийся фон игры все время не значительно меняет  изображение, глазом этого не вижу но кликер не находит заданный фрагмент.  Можете подсказать как это победить?

Oraven

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3685
  • Котэ
    • View Profile
Используй цветокоррекцию, она сократит оттенки. И процент совпадения, позволит проигнорить несоответствующие пикселы.

Делаем скриншот с цветокоррекцией, вырезаем фрагмент
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

Regaf

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
в моем случае фон за текстом который нужно искать меняется от светло синего до черного. попробовал применить COLORMODE(6) не помогло. пробовал COLORMODE(8 ) сохраненная картинка получается идеальной (белый текст, черный фон) но все равно не находит ее кликер даже с погрешность 50%
« Last Edit: December 15, 2014, 01:41:40 PM by Regaf »

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Покажи скрины и картинку поиска, а то так гадать можно до второго пришествия.
(В PNG или BMP)

P.S И часть кода с поиском, а то тут всякое бывало...
« Last Edit: December 15, 2014, 04:16:08 PM by Vint »


Regaf

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
как вставить изображение в ответ не разобрался. прикрепил как вложение.

так сохраню картинку
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

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
А где картинка что ты ищешь? Которую заготовил?

Ну как минимум видно, что чётких границ нигде нет. Процент точно должен быть не 100.
И почему COLORMODE - 6, когда ты говорил 8.
« Last Edit: December 16, 2014, 01:29:39 PM by Vint »


Regaf

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
просто сохранен скрипт был COLORMODE с фильтром 6. как писал выше пробовал разные варианты в том числе и 8. также пробовал менять процент совпадения от 100 до 50 с шагом в 10. естественно фильтр COLORMODE ставил одинаковый как для сохранения картинки так и для поиска.

Regaf

  • Зашел в гости
  • *
  • Posts: 12
    • View Profile
и самый главный вопрос который надо наверное было задать раньше всего.  есть какая то возможность делать скриншот картинки на одной машине и передавать в виде файла на  другие, а на других машинах уже искать противника. на машинах разное разрешение и диагонали экранов. разрешение то выставить одинаковое можно но будет ли от этого толк?  смысл сего скрипта в том что бы 1 человек  одной командой указывал другим клиентам цель которую нужно дружно слить.

Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Можно, только синхронизировать нужно работу каким то образом. Чтобы ждал команды. Разрешение может быть разное.

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

Уменьшить область отрубив чёрное, оставив не больше 1 пикс. рамки или вообще без неё. Тут важно как ты будешь область выцеплять.
« Last Edit: December 16, 2014, 02:36:04 PM by Vint »


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Я так понял он ищет не звездолёты. Он ищет ники игроков и хочет передать часть отображаемого ника, чтобы другие компы/скрипты искали его у себя и нападали.
Т.е. он подумал и выбрал цель и все на неё кинулись толпой.


Vint

  • Супермодератор
  • Герой форума
  • *
  • Posts: 3935
  • Лечу куда хочу. cman 4.13.014x32, 4.14.003 W10
    • View Profile
Сумма пикселей там не катит. Сглаживание сильно разнит текст. И панелька с ником перетекает в полупрозрачность.