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

Основной раздел => Общие вопросы => Topic started by: m1hai on April 25, 2018, 09:50:59 PM

Title: Не находит изображение, IF_PICTURE_IN, SCANPICTURE
Post by: m1hai on April 25, 2018, 09:50:59 PM
Нужно найти аватарку группы (https://vk.com/behappy_1) (https://image.ibb.co/cwkcwx/inima.jpg) (https://imgbb.com/) от постов в середине экрана и вывести координаты.
Code: (clickermann) [Select]
GETSCREEN

COLORMODE(5)
IF_PICTURE_IN (536,323,1082,737,"inimaaa.bmp",-1,70)
print("нашёл:",$_return1, $_return2)
ELSE
print("не нашёл")
END_IF

Пробовал и с SCANPICTURE и тоже не находит. Попробовал IF_PIXEL_IN и по цвету находит.
В чём может быть проблема?
Битмап сделал сохраняя как в пейнте, стоит в папке со скриптом, пробовал 24-бит, 256, меньший размер, больший размер, всё равно не находит.
Помогите пожалуйста.
Title: Re: Не находит изображение, IF_PICTURE_IN, SCANPICTURE
Post by: i0 on April 26, 2018, 12:50:40 AM
если используешь перед поиском colormode(5), то и искомый фрагмент "inimaaa.bmp" должен быть из картинки с colormode(5)
выполни простейший скрипт
GETSCREEN
COLORMODE(5)
SCREENSHOT
и потом из скриншота в папке screens вырежи нужную тебе аватарку и сохрани в папку со скриптом
Title: Re: Не находит изображение, IF_PICTURE_IN, SCANPICTURE
Post by: Oraven on April 26, 2018, 07:22:56 AM
Нужно правильно подготавливать картинки.

Code: (clickermann) [Select]
GETSCREEN
COLORMODE(6)
IF_PICTURE_IN (536,323,1082,737,"inimaaa.bmp",-1,80)
   print("нашёл: ", $_return1,",",$_return2)
   MOVE($_return1,$_return2)
ELSE
   print("не нашёл")
END_IF

HALT
Title: Re: Не находит изображение, IF_PICTURE_IN, SCANPICTURE
Post by: m1hai on April 26, 2018, 04:06:07 PM
Спасибо большое, буду знать, не знаю почему потупил и не заметил свою ошибку. Хорошего дня. :)
Title: Re: Не находит изображение, IF_PICTURE_IN, SCANPICTURE
Post by: RomkaMarik on June 01, 2018, 03:41:49 PM
Всем привет. У меня аналогичная проблема. Написал скрипт - работает, поменял картинку поиска и все! Не работает!!! Хоть обратно подставлял ту, с которой работало, хоть другую. Что не так - не пойму.
Code: [Select]
//LCLICK(962,657)
GETSCREEN(180,190,512,225)
//COLORMODE(6)
WAITMS(500)
//WAITMS(500)
IF_PICTURE_IN(187,190,512,225,"L.bmp",0,70)
WAITMS(500)
LCLICK(962,657)
END_IF
halt
В заданной области (см. картинку 111111111111.jpg),  от двоеточия после слова "Имя" и до слова "Сила", ищу имя с английской "L". Фон черный, буква белая. После запуска скрипта ничего не происходит от слова "совсем". Если раскоментировать HALT то скрипт останавливается примерно через секунду. Если Halt оставить закомментированным, а раскоментировать  верхний LCLICK(962,657) (нижний соответственно закомментировать), то скрипт идет по кругу... Вывод: не обрабатывается область сканирования. Или, если точнее, в скрипте происходит постоянное совпадение.
Colormode - тоже не дал результатов.

Помогите разобраться
Title: Re: Не находит изображение, IF_PICTURE_IN, SCANPICTURE
Post by: Oraven on June 01, 2018, 05:04:49 PM
Ты ж понимаешь что если считать черное за прозрачность то белую L функция найдет везде где достаточно белого пространства?!
Title: Re: Не находит изображение, IF_PICTURE_IN, SCANPICTURE
Post by: RomkaMarik on June 01, 2018, 06:30:17 PM
Ок, проблема, как оказалось, действительно не такая. Прошу прощения, что влез не в ту тему по недопониманию происходящего... После некоторых экспериментов я понял, что происходит, но как решить - не знаю.
По поводу фона: не имеет значения учитываю я фон или нет. Это я проверил на практике.
Что происходит: Скрипт останавливается не в том цикле, где найдено совпадение по картинке, а в следующем. Как прикрепить видео - не знаю. Выложил на ГуглДиск
https://drive.google.com/file/d/1XfC6NIhpW5DgXJtkdWH2ca2U-SHH0S2U/view?usp=sharing
Title: Re: Не находит изображение, IF_PICTURE_IN, SCANPICTURE
Post by: dramster on June 02, 2018, 12:41:52 AM
посмотрел видео. я так понимаю, что нужно постоянно жать на эту зеленую кнопку, пока не появится адпись с буквой "Л".

а теперь давай посмотрим что ты написал в скрипте:
делаем скрин и ищем букву Л - не нашли - ждем немного и жмем на кнопку - после нажатия СРАЗУ  МГНОВЕННО снова делаем скрин.... и как ты думаешь, в момент перед кликом и сразу после него чтото изменится на нашем экране? да ничего не изменится, и буквы Л ни в коем разе там не появится, картинка не успеет подгрузиться. поэтому в конце после клика по зеленой кнопке, требуется соответствующая задержка, чтобы твоя буква подгрузилась и появилась на экране.

если ничего не понял, то :
Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN
   move($_return1, $_return2)
   halt
END_IF

wait(1)

LCLICK

wait(2)

образно
Title: Re: Не находит изображение, IF_PICTURE_IN, SCANPICTURE
Post by: Hito on June 02, 2018, 08:57:58 PM
Вообще я в таких случаях делаю скрин перед кликом в той области, которая после клика должна измениться, и после самого клика запускаю цикл с таймером. Из цикла выход в двух вариантах. 1 - таймер истек (тогда повторяю операцию) и 2 - картинка, с которой я делал скрин, сменилась (это значит, что клик прошел удачно и вот теперь можно анализировать экран)

Code: (clickermann) [Select]
GETSCREEN
IF_PICTURE_IN(187,190,512,225,"L.bmp",0,70)
   // L.bmp найдена и если нужно кликнуть на картинку, то я иногда извращаюсь  :)
   LCLICK($_return1+(ширина_картинки/2), $_return2+(высота_картинки/2))
else
   SCREENSHOTFIX(187,190,512,225, "proverka.bmp", 0) // Если L.bmp не найдена, то делаем проверочный скрин
   $click = 0
   WHILE($click = 0) // Запускаем цикл
      GETSCREEN
      IF_PICTURE_IN(187,190,512,225,"proverka.bmp",0,70) // Если проверочный скрин найден, значит соперник не сменился
         LCLICK(962,657) // На сколько я понял, это клик на кнопку "Сменить соперника"  - кликаем
         
         $time = $_time_t + 5 // Запускаем цикл с таймером на 5 сек
         WHILE($time > $_time_t)
            GETSCREEN
            IF_PICTURE_IN(187,190,512,225,"proverka.bmp",0,70) // В течении 5 секунд ждем, пока проверочный скрин не будет найден
               WAITMS(50)
            ELSE
               $time = 0 // Если мы его не нашли, значит соперник сменился и мы выходим из этого цикла
               $click = 1 // и предыдущего
            END_IF
         END_CYC
         // Если же проверочный скрин так и останется на месте,
         //значит страница вообще не отреагировала на клик, либо зависла, или еще что-то.
         // В таком случае мы выйдем из цикла с таймером
         // Но останемся в предыдущем цикле и снова кликнем и
         // снова будем ждать, пока картинка сменится
      else
         $click = 1
      END_IF
   END_CYC
END_IF
halt

И я тебя уверяю, что такая схема будет работать точнее и быстрее, чем с твоими WAITMS(500)  :)
В скрипте паузы должны быть минимальными (только для разгрузки процессора). Все остальные ожидания должны быть "интеллектуальными" и сбоеустойчивыми ))
Title: Re: Не находит изображение, IF_PICTURE_IN, SCANPICTURE
Post by: Hito on June 09, 2018, 08:40:15 AM
Code: (clickermann) [Select]
            IF_PICTURE_IN(187,190,512,225,"proverka.bmp",0,70) // В течении 5 секунд ждем, пока проверочный скрин не будет найден
               WAITMS(50)
            ELSE
               $time = 0 // Если мы его не нашли, значит соперник сменился и мы выходим из этого цикла
               $click = 1 // и предыдущего
            END_IF

Кстати... Опытным путем показало, что в некоторых случаях нужно проверять не только исчезновение проверочного скрина, но и появления, после этого, какого-нибудь скрина, который было бы видно только при полной загрузке новой страницы, или какой-либо панели.