Zireael |
Отправлено: 22 Ноября, 2024 - 13:59:33
|
Эксперт
Покинул форум
Сообщений всего: 4468
Дата рег-ции: Нояб. 2017
Репутация: 585
|
Цитата: Пробовал несколькими секторами выделять, в сохранённом изображении фон черный кроме активных секторов.
Указать цвета фона 0. Это чёрный цвет.
Цитата: и что делать в итоге с тем, что у одной и той же фигуры разные названия и разные этапы прохода?
Можно искать с текстом, выделить то что нужно искать, остальное будет как фон.
Либо искать картинку без текста, потом относительно найденных координат распознать текст. |
|
|
Evgeniy-39rus |
Отправлено: 22 Ноября, 2024 - 14:02:13
|
Прохожий
Покинул форум
Сообщений всего: 22
Дата рег-ции: Нояб. 2024
Репутация: 0
|
может идти по пути поиска не изображения, а надписи? Но надписи тоже большие и они по всему экрану, зона поиска почти весь экран.
(Добавление)
Zireael пишет: Цитата: Пробовал несколькими секторами выделять, в сохранённом изображении фон черный кроме активных секторов.
Указать цвета фона 0. Это чёрный цвет.
Цитата: и что делать в итоге с тем, что у одной и той же фигуры разные названия и разные этапы прохода?
Можно искать с текстом, выделить то что нужно искать, остальное будет как фон.
Либо искать картинку без текста, потом относительно найденных координат распознать текст.
спасибо, буду тестировать |
|
|
Zireael |
Отправлено: 23 Ноября, 2024 - 15:56:01
|
Эксперт
Покинул форум
Сообщений всего: 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));
}
|
|
|
Kibor |
Отправлено: 26 Ноября, 2024 - 08:31:00
|
Эксперт
Просматривает форум
Сообщений всего: 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).
Резюме:
Этот код загружает изображение с диска, ищет его на экране и сообщает о времени, потраченном на поиск, а также количестве найденных изображений. Картинка ищется с учетом отклонений в цвете, точности поиска и возможных фонов. |
|
|
Evgeniy-39rus |
Отправлено: 26 Ноября, 2024 - 23:51:47
|
Прохожий
Покинул форум
Сообщений всего: 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. Добиться нормальной работы кода по пуску и останову бота от клавиш на клавиатуре.
Огромной спасибо вам за подсказки. |
|
|
Zireael |
Отправлено: 27 Ноября, 2024 - 01:01:04
|
Эксперт
Покинул форум
Сообщений всего: 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]);
} |
|
|
|