Автоматизация и боты

 Помощь      Поиск      Пользователи
Сайт Кибор     Программируемый кликер Кибор     Видео обучение     Заказать бот

 Страниц (2): [1] 2 »   

> Описание: Способы анализа картинок
tyyty77
Отправлено: 11 Октября, 2023 - 17:41:41
Post Id



Пользователь
Прохожий


Покинул форум
Сообщений всего: 3
Дата рег-ции: Сент. 2023  
Репутация: 0




Всем доброго времени суток.
У меня возник вопрос по поводу поиска изображений. Точнее сказать по поводу анализа изображения.
функция FindImage помогает найти картинку на экране, но мне нужно немножко другое.

В одном и том же месте на экране показывается случайная из 300 картинок 50х50 пикселей. Картинки делятся на 2 категории.
Задача состоит в том, чтоб определить к какой из двух категорий относится картинка
.

На данный момент я думаю сделать это с помощью FindImage. Искать последовательно каждую картинку из Категории№1 в выбранной зоне, если найдет значит это Категория№1, если нет соответственно Категория№2. Но думаю такой способ не будет быстрым в работе.
Существует ли способ сделать это по-другому?
Заранее благодарю за ваши идеи и советы.
 
 Top
resident
Отправлено: 11 Октября, 2023 - 21:18:04
Post Id



Пользователь
Участник


Покинул форум
Сообщений всего: 72
Дата рег-ции: Янв. 2023  
Репутация: 0




Если одно и то же место, то обозначив область поиска в 50х50 от картинки будет сравниваться по одному пикселю, если не совпало, то будет проверяться следующая картинка. Вполне себе быстро.
 
 Top
Kibor
Отправлено: 12 Октября, 2023 - 03:59:24
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 tyyty77 пишет:
Искать последовательно каждую картинку из Категории№1 в выбранной зоне, если найдет значит это Категория№1, если нет соответственно Категория№2. Но думаю такой способ не будет быстрым в работе.

Достаточно быстрый. Но не достаточно надежный.
А если там вообще не будет никакой категории? От подумает что вторая.
Искать надо все.
Ищите и ту и ту. 2 цикл делайте.
Искать надо по заранее сделанному скриншоту.
По экрану будет долго, так как каждый раз будет делаться новый снимок.


Поиск 300 разных картинок 50 на 50 в зоне 70 на 70 занимает у меня 80 мс. Можно разбить на 2 цикла с поиском по 150 (разные категории)
CODE:
/*
//Создаем 300 картинок для теста
int Image[300][50][50];
loadimage (#Image[0][0][0], "D:\Image_0.bmp");//Изображение 50 на 50

for (int n=0; n<300; n++)
{
saveimage(#Image[0][0][0], "D:\t\Image_"+format(n)+".bmp");//Копируем его 300 раз, для теста
}
*/


int Image[300][50][50];

for (int n=0; n<300; n++)
{
loadimage (#Image[n][0][0], "D:\t\Image_"+format(n)+".bmp");//Загружаем наши 300 картинок (Они должны быть разные. Это тест)
}
int PosX, PosY;
int ZonaX1=100, ZonaY1=500, ZonaX2=170, ZonaY2=570;
int SCREEN[70][70];


int time=gettime();
screen (#SCREEN[0][0], ZonaX1, ZonaY1, ZonaX2, ZonaY2, -1);//Делаем скрин зоны в которой ищем. 70 на 70
for (n=0; n<300; n++)
{
findimage(1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, #SCREEN[0][0]);
}
messagebox (gettime()-time);



Поиск 300 разных картинок 50 на 50, с разбежностью цвета 20, в зоне 70 на 70 занимает у меня 150 мс. При условие включения быстрого поиска -(для просмотра ссылки Вам необходимо авторизоваться)
CODE:
/*
//Создаем 300 картинок для теста
int Image[300][50][50];
loadimage (#Image[0][0][0], "D:\Image_0.bmp");//Изображение 50 на 50

for (int n=0; n<300; n++)
{
saveimage(#Image[0][0][0], "D:\t\Image_"+format(n)+".bmp");//Копируем его 300 раз
}
*/


int Image[300][50][50];

for (int n=0; n<300; n++)
{
loadimage (#Image[n][0][0], "D:\t\Image_"+format(n)+".bmp");
}
int PosX, PosY;
int ZonaX1=100, ZonaY1=500, ZonaX2=170, ZonaY2=570;
int SCREEN[70][70];
int r=20;
int p=100;

int time=gettime();
screen (#SCREEN[0][0], ZonaX1, ZonaY1, ZonaX2, ZonaY2, -1);//Делаем скрин зоны в которой ищем. 70 на 70
for (n=0; n<300; n++)
{
findimage (SWIFT, 1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, r, r, r, r, r, r, p, 1, #SCREEN[0][0]);
}
messagebox (gettime()-time);


Поиск 300 разных картинок 50 на 50 в зоне 600 на 300 занимает у меня 400 мс
Это уже не просто сравнение, а поиск координат в большой зоне.
CODE:
/*
//Создаем 300 картинок для теста
int Image[300][50][50];
loadimage (#Image[0][0][0], "D:\Image_0.bmp");//Изображение 50 на 50

for (int n=0; n<300; n++)
{
saveimage(#Image[0][0][0], "D:\t\Image_"+format(n)+".bmp");//Копируем его 300 раз, для теста
}
*/


int Image[300][50][50];

for (int n=0; n<300; n++)
{
loadimage (#Image[n][0][0], "D:\t\Image_"+format(n)+".bmp");//Загружаем наши 300 картинок (Они должны быть разные. Это тест)
}
int PosX, PosY;
int ZonaX1=100, ZonaY1=200, ZonaX2=700, ZonaY2=500;
int SCREEN[600][300];


int time=gettime();
screen (#SCREEN[0][0], ZonaX1, ZonaY1, ZonaX2, ZonaY2, -1);//Делаем скрин зоны в которой ищем. 600 на 300
for (n=0; n<300; n++)
{
findimage(1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, #SCREEN[0][0]);
}
messagebox (gettime()-time);
 
 Top
GreatProgram
Отправлено: 17 Ноября, 2023 - 18:31:26
Post Id



Пользователь
Участник


Просматривает форум
Сообщений всего: 61
Дата рег-ции: Сент. 2022  
Репутация: 2




Здравствуйте! Работаю в визуальном редакторе,
будет ли конфликт в работе когда это дело скомпилируется в Киборе?
Я о функциях Findimage, loadimage, screen и т.д.
(Честно мне самому кажется этот вопрос глупым, и я знаю ответ,
но мне хочется быть уверенным, что конфликта не будет...

Так же вводит в ступор количество параметров в Findimage, например в киборе это может
выглядеть так:
CODE:
findImage(1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, #SCREEN[0][0]);


а при анализе в Киборе, то что сгенерировал визуальный редактор:
CODE:
FindImage(1, #Screen[0][0], #W_Kib, W_Kib.leftclient, W_Kib.topclient, #Image0[0][0], 1, 0, 0, 0, #K_Kib, #X_Kib[0], #Y_Kib[0], 0, 0, eX_Kib, eY_Kib, 0, 0, -1, 0, 100, 0, 0, "0, 0, 0, 0", 0, "Бездействие", 0, 0, 0, 0, 5, 5, 0, 0);


А далее следует объявление function FindImage(с огромным количеством параметров){и телом...}

В общем это и вызывает в первую очередь недопонимание, что будет если я буду писать в визуальном редакторе в блоке кода код на поиск изображений, так же хотелось бы каждому изображению присвоить свою переменную для идентификации (найдено/не найдено)
Подскажите пожалуйста...
 
 Top
Kibor
Отправлено: 17 Ноября, 2023 - 18:43:38
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




Функции которые генерирует виз редактор, это не просто findimage. Это блок в котором содержится findimage и который выполняет много других задач, кроме поиска изображения.
Поэтому там столько параметров.
Конфликта не будет.
 
 Top
GreatProgram
Отправлено: 18 Ноября, 2023 - 14:36:23
Post Id



Пользователь
Участник


Просматривает форум
Сообщений всего: 61
Дата рег-ции: Сент. 2022  
Репутация: 2




(Не обязательно к прочтению!) Не ругайте сильно меня что задаю этот вопрос не в той теме. Это кончено относиться к арифметическим операторам...

Как проверить четное число или нет? Не нашел тут оператор % да и булевых тоже нету...
(Добавление)
В общем я решил это так:
CODE:
int a=0, b;
double c;


b=3; //тут надо присвоить Ваше проверяемое число

a=b/2;
c=b/2;

if (a==c) messagebox ("Четное");
else messagebox ("Не четное");
 
 Top
Kibor
Отправлено: 18 Ноября, 2023 - 14:58:19
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




 GreatProgram пишет:
Как проверить четное число или нет? Не нашел тут оператор % да и булевых тоже нету


и не надо они кликеру.

CODE:
messagebox (ch(8));

function ch(double a)
{
int b=a/2;
if (a==b*2) return 1;
return 0;
}
 
 Top
GreatProgram
Отправлено: 19 Ноября, 2023 - 12:35:44
Post Id



Пользователь
Участник


Просматривает форум
Сообщений всего: 61
Дата рег-ции: Сент. 2022  
Репутация: 2




findimage (SWIFT, 1, #Image[n][0][0], -1, #PosX, #PosY, 0, 0, ZonaX2-ZonaX1, ZonaY2-ZonaY1, r, r, r, r, r, r, p, 1, #SCREEN[0][0]);

Подскажите пожалуйста, что принимает этот параметр (Выделил красным)? И какие значения он может иметь.

Еще хотел узнать, если у меня не используются переменные PosX PosY. То что вместо них можно поставить может быть этот параметр имеет ключ какой либо, что бы не использовать их?

(Отредактировано автором: 19 Ноября, 2023 - 12:43:28)

 
 Top
Kibor
Отправлено: 19 Ноября, 2023 - 12:45:23
Post Id



Администратор
Эксперт


Покинул форум
Сообщений всего: 8217
Дата рег-ции: Март 2013  
Откуда: Одесса
Репутация: 357




0 или 1
К примеру у вас большая разбежность оттенков и малый процент совпадения стоит. Тогда в месте где на самом деле находится 1 фрагмент будет найдено много, с небольшим смещением координат x y.
Если поставить 1, то в зоне где уже найдено одно изображение больше не будет искаться, даже если они подходят под параметры поиска.
Надо ставить 1.
(Добавление)
 GreatProgram пишет:
Еще хотел узнать, если у меня не используются переменные PosX PosY. То что вместо них можно поставить может быть этот параметр имеет ключ какой либо, что бы не использовать их?

Там должны быть указатели на переменные типа int, куда запишутся координаты найденного фрагмента.
 
 Top
GreatProgram
Отправлено: 19 Ноября, 2023 - 12:53:50
Post Id



Пользователь
Участник


Просматривает форум
Сообщений всего: 61
Дата рег-ции: Сент. 2022  
Репутация: 2




С первым вопросом понял Вас. Спасибо.
А вот второй я так понимаю это обязательно, так как так написана функция и она не предусматривает работы по другому... Да про int знаю и указатель #, просто мне этот функционал не несет никакой практической пользы. Нет необходимости потом по этим координатам переносить мышь и т.д. В общем это вшитая фича в функцию?
 
 Top
Страниц (2): [1] 2 »
Сейчас эту тему просматривают: 1 (гостей: 1, зарегистрированных: 0)
« Вопросы и решение проблем »


Все гости форума могут просматривать этот раздел.
Только зарегистрированные пользователи могут создавать новые темы в этом разделе.
Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.
 




Powered by