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

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

 Страниц (4): « 1 2 3 [4]   

> Без описания
Zireael
Отправлено: 22 Ноября, 2024 - 13:59:33
Post Id



Пользователь
Эксперт


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




 Цитата:
Пробовал несколькими секторами выделять, в сохранённом изображении фон черный кроме активных секторов.

Указать цвета фона 0. Это чёрный цвет.
 Цитата:
и что делать в итоге с тем, что у одной и той же фигуры разные названия и разные этапы прохода?

Можно искать с текстом, выделить то что нужно искать, остальное будет как фон.
Либо искать картинку без текста, потом относительно найденных координат распознать текст.
 
 Top
Evgeniy-39rus
Отправлено: 22 Ноября, 2024 - 14:02:13
Post Id



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


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




может идти по пути поиска не изображения, а надписи? Но надписи тоже большие и они по всему экрану, зона поиска почти весь экран.
(Добавление)
 Zireael пишет:
 Цитата:
Пробовал несколькими секторами выделять, в сохранённом изображении фон черный кроме активных секторов.

Указать цвета фона 0. Это чёрный цвет.
 Цитата:
и что делать в итоге с тем, что у одной и той же фигуры разные названия и разные этапы прохода?

Можно искать с текстом, выделить то что нужно искать, остальное будет как фон.
Либо искать картинку без текста, потом относительно найденных координат распознать текст.

спасибо, буду тестировать
 
 Top
Evgeniy-39rus
Отправлено: 23 Ноября, 2024 - 14:03:39
Post Id



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


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




подскажите какого объема должна быть примерно картинка для быстрого поиска на экране? у мена получаются по 20-30кб. когда выделяешь части картинки то остальное заливается черным цветом и объем у нее такой де как и у целой картинки.
В данный момент не могу найти решения по точному поиску изображения. Изображений к тому же может быть 2-3 одинаковых и их по очереди надо прожимать.
 
 Top
Zireael
Отправлено: 23 Ноября, 2024 - 15:56:01
Post Id



Пользователь
Эксперт


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




 Цитата:
подскажите какого объема должна быть примерно картинка для быстрого поиска на экране?

Влияет не размер картинки, а количество искомых пикселей, те что являются фоном пропускаются при поиске.

Вот код, можно проверить зависимость времени поиска картинки от параметров.
CODE:
string PathToImage = "C:\4.1.bmp"; // путь к картинке
int r = 5; // отклонение в цвете (0-255)
int p = 95; // точность поиска (1-100)
int count = 10; // сколько картинок искать
int ColorFon = 0; // цвет фона, -1 если цвет фона не используется

int PosX[99], PosY[99];
int Image0[1920][1080];
if(loadimage(#Image0[0][0], PathToImage) < 0)
{
messagebox("Не удалось загрузить картинку");
}
else
{
int C, W, H;
getdisplay(C, W, H);
int t = gettime();
int result = findimage(SWIFT, count, #Image0[0][0], ColorFon, #PosX[0], #PosY[0], 0, 0, W, H, r,r,r,r,r,r,p,1,-1);
messagebox("На поиск затрачено времени: " +format(gettime()-t)+"^r^nНайдено изображений: "+format(result));
}
 
 Top
Evgeniy-39rus
Отправлено: 23 Ноября, 2024 - 17:08:35
Post Id



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


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




я пока не умею использовать коды
 
 Top
Kibor
Отправлено: 26 Ноября, 2024 - 08:31:00
Post Id



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


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




 Evgeniy-39rus пишет:
я пока не умею использовать коды

Кстати чат GPT довольно не плохо описывает работу кода Кибор, если в него его вставить.
Если перепутает с другим языком, надо напомнить ему что это код Кибор.
Но только модель GPT-4. Другие про Кибор не знают.
И вообще по программе может что то подсказать..
(Добавление)
 Evgeniy-39rus пишет:
я пока не умею использовать коды

Вот я попросил прокомментировать код который дал Zireael

Написал в ChatGPT
CODE:
Прокомментируй код
string PathToImage = "C:\4.1.bmp"; // путь к картинке
int r = 5; // отклонение в цвете (0-255)
int p = 95; // точность поиска (1-100)
int count = 10; // сколько картинок искать
int ColorFon = 0; // цвет фона, -1 если цвет фона не используется

int PosX[99], PosY[99];
int Image0[1920][1080];
if(loadimage(#Image0[0][0], PathToImage) < 0)
{
messagebox("Не удалось загрузить картинку");
}
else
{
int C, W, H;
getdisplay(C, W, H);
int t = gettime();
int result = findimage(SWIFT, count, #Image0[0][0], ColorFon, #PosX[0], #PosY[0], 0, 0, W, H, r,r,r,r,r,r,p,1,-1);
messagebox("На поиск затрачено времени: " +format(gettime()-t)+"^r^nНайдено изображений: "+format(result));
}



Ответ ChatGPT
CODE:
Давайте разберем и прокомментируем ваш код шаг за шагом:

string PathToImage = "C:\\4.1.bmp"; // путь к картинке

Здесь создается строковая переменная PathToImage, которая содержит путь к изображению. Важно заметить, что в строках путей на Windows используются обратные слэши \, которые нужно экранировать, то есть писать как \\, чтобы избежать ошибок синтаксиса. Поэтому путь к картинке в данном случае — C:\4.1.bmp.

int r = 5; // отклонение в цвете (0-255)

Переменная r задает отклонение цвета при поиске изображения. Значение от 0 до 255, где 0 — это точное совпадение цвета, а 255 — максимально возможное отклонение.

int p = 95; // точность поиска (1-100)

Переменная p задает точность поиска изображения. Значение от 1 до 100, где 100 означает наибольшую точность (меньше ошибок при нахождении). Это, вероятно, влияет на то, насколько строго будет искать изображение в окне, насколько маленькие отклонения от эталона будут разрешены.

int count = 10; // сколько картинок искать

Переменная count указывает, сколько раз программа будет искать картинку на экране. Это значение ограничивает количество результатов поиска.

int ColorFon = 0; // цвет фона, -1 если цвет фона не используется

Переменная ColorFon задает цвет фона для поиска. Если цвет фона не используется, то параметр принимает значение -1. Иначе, если цвет фона важен для поиска, необходимо указать его значение.

int PosX[99], PosY[99];

Здесь создаются два массива PosX и PosY, которые будут хранить координаты найденных изображений на экране. Максимально можно найти 99 изображений.

int Image0[1920][1080];

Создается двумерный массив Image0 размером 1920x1080, в котором будет храниться пиксельное представление картинки, загруженной из файла. Размеры массива предполагают, что картинка будет иметь разрешение 1920x1080.

if(loadimage(#Image0[0][0], PathToImage) < 0)
{
messagebox("Не удалось загрузить картинку");
}

Функция loadimage пытается загрузить картинку по указанному пути PathToImage в массив Image0. Если загрузка не удалась (возвращается отрицательное значение), программа выводит сообщение о том, что не удалось загрузить картинку.

else
{
int C, W, H;
getdisplay(C, W, H);
int t = gettime();
int result = findimage(SWIFT, count, #Image0[0][0], ColorFon, #PosX[0], #PosY[0], 0, 0, W, H, r,r,r,r,r,r,p,1,-1);
messagebox("На поиск затрачено времени: " + format(gettime()-t) + "^r^nНайдено изображений: " + format(result));
}

Если картинка была успешно загружена, выполняется следующий блок:

getdisplay(C, W, H);: Эта функция получает информацию о текущем экране, такие как цвет экрана C, а также ширину (W) и высоту (H) экрана. Эти параметры будут использованы для поиска изображений на экране.

int t = gettime();: Получаем текущее время в миллисекундах. Это нужно для измерения времени, которое уйдет на поиск изображения.

int result = findimage(SWIFT, count, #Image0[0][0], ColorFon, #PosX[0], #PosY[0], 0, 0, W, H, r, r, r, r, r, r, p, 1, -1);: Функция findimage выполняет поиск изображения на экране.
SWIFT — возможно, это константа, которая задает способ поиска (например, скорость поиска).
count — количество картинок для поиска.
#Image0[0][0] — ссылка на массив пикселей загруженной картинки.
ColorFon — цвет фона, который можно игнорировать (или не использовать).
#PosX[0], #PosY[0] — массивы, куда будут записаны координаты найденных изображений.
0, 0, W, H — области экрана, на которой будет осуществляться поиск (в данном случае, по всему экрану от (0, 0) до (W, H)).
r, r, r, r, r, r — отклонения по цвету для каждого канала RGB.
p — точность поиска.
1, -1 — дополнительные параметры для настройки поиска.

messagebox("На поиск затрачено времени: " + format(gettime()-t) + "^r^nНайдено изображений: " + format(result));: После завершения поиска выводится сообщение, показывающее:
Время, которое прошло с момента начала поиска (разница между текущим временем и t).
Количество найденных изображений (result).

Резюме:

Этот код загружает изображение с диска, ищет его на экране и сообщает о времени, потраченном на поиск, а также количестве найденных изображений. Картинка ищется с учетом отклонений в цвете, точности поиска и возможных фонов.
 
 Top
Evgeniy-39rus
Отправлено: 26 Ноября, 2024 - 17:21:13
Post Id



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


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




как применить этот код? Вставить в какой то отдельный блок в своей схеме?
(Добавление)
 Evgeniy-39rus пишет:
как применить этот код? Вставить в какой то отдельный блок в своей схеме?

понял это просто код для теска каждого изображения по отдельности
 
 Top
Evgeniy-39rus
Отправлено: 26 Ноября, 2024 - 23:51:47
Post Id



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


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




 Zireael пишет:
 Цитата:
подскажите какого объема должна быть примерно картинка для быстрого поиска на экране?

Влияет не размер картинки, а количество искомых пикселей, те что являются фоном пропускаются при поиске.

Вот код, можно проверить зависимость времени поиска картинки от параметров.
CODE:
string PathToImage = "C:\4.1.bmp"; // путь к картинке
int r = 5; // отклонение в цвете (0-255)
int p = 95; // точность поиска (1-100)
int count = 10; // сколько картинок искать
int ColorFon = 0; // цвет фона, -1 если цвет фона не используется

int PosX[99], PosY[99];
int Image0[1920][1080];
if(loadimage(#Image0[0][0], PathToImage) < 0)
{
messagebox("Не удалось загрузить картинку");
}
else
{
int C, W, H;
getdisplay(C, W, H);
int t = gettime();
int result = findimage(SWIFT, count, #Image0[0][0], ColorFon, #PosX[0], #PosY[0], 0, 0, W, H, r,r,r,r,r,r,p,1,-1);
messagebox("На поиск затрачено времени: " +format(gettime()-t)+"^r^nНайдено изображений: "+format(result));
}

Огромное спасибо за код, очень облегчил тестирование изображения. А можно добавить в него, что бы он подсвечивал область которую он нашёл на экране?
(Добавление)
на данном этапе я уже добился рабочего бота, осталось его только усовершенствовать.
1. Добиться более быстрого поиска изображения. Путём уменьшения сектора изображения и сектора поиска.
2. модернизировать алгоритм, добавлением разных функций.
3. Добиться нормальной работы кода по пуску и останову бота от клавиш на клавиатуре.
Огромной спасибо вам за подсказки.
 
 Top
Zireael
Отправлено: 27 Ноября, 2024 - 01:01:04
Post Id



Пользователь
Эксперт


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




 Цитата:
А можно добавить в него, что бы он подсвечивал область которую он нашёл на экране?

CODE:
string PathToImage = "C:\4.1.bmp"; // путь к картинке
int r = 5; // отклонение в цвете (0-255)
int p = 95; // точность поиска (1-100)
int count = 10; // сколько картинок искать
int ColorFon = 0; // цвет фона, -1 если цвет фона не используется

int array[2560][1440];
initialarray(#array[0][0], rgb(255, 0, 255));
int PosX[99], PosY[99];
int Image0[1920][1080];
if(loadimage(#Image0[0][0], PathToImage) < 0)
{
messagebox("Не удалось загрузить картинку");
}
else
{
int C, W, H;
getdisplay(C, W, H);
int t = gettime();
int result = findimage(SWIFT, count, #Image0[0][0], ColorFon, #PosX[0], #PosY[0], 0, 0, W, H, r,r,r,r,r,r,p,1,-1);
messagebox("На поиск затрачено времени: " +format(gettime()-t)+"^r^nНайдено изображений: "+format(result));

for(int i=0; i < result; i++) visual(i * 4, PosX[i], PosY[i], PosX[i] + imagewidth(#Image0[0][0]), PosY[i] + imageheight(#Image0[0][0]), 3);
sleep(3000);
}


function visual(int i, int sx, int sy, int ex, int ey, int width)
{
visualwindow(i, 0, 0, ex-sx, width, sx, sy, 100, #array[0][0]);
visualwindow(i + 1, 0, 0, width, ey-sy, sx, sy, 100, #array[0][0]);
visualwindow(i + 2, 0, 0, ex-sx+width, width, sx, ey, 100, #array[0][0]);
visualwindow(i + 3, 0, 0, width, ey-sy, ex, sy, 100, #array[0][0]);
}
 
 Top
Страниц (4): « 1 2 3 [4]
Сейчас эту тему просматривают: 2 (гостей: 1, зарегистрированных: 1) » Kibor
« Вопросы и решение проблем »


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




Powered by