|
Findimage из файла |
|
|
| Tindome |
6.5.2026, 13:01
|
 
Neophyte
Сообщений: 41
Регистрация: 16.10.2014 Группа: Пользователи Наличность: 23
Пользователь №: 17.059

|
Можно ли искать шаблон не на экране а на заранее сделанном скрине ? что-то типа:
local found = findimage(0, 0, width, height, main_image, template, acc)
где templates - предварительно сохраненный шаблон, main_image - скриншот сделанный UO, сохраненный на диск и затем загруженный в память
width, height размеры main_image высчитанные как width = x2 - x1 и height = y2 - y1 от тех координат что задавались при создавании скриншота. ну и acc - точность поиска.
|
|
|
|
|
|
| DarkMaster |
6.5.2026, 15:30
|
          
Модератор UOPilot
Сообщений: 9.791
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 30326
Пользователь №: 11.279

|
Код Loadimage (Lua) Описание loadimage - функция загрузки изображения в память. Чтобы при каждом поиске не загружать картинку с HDD. Возвращает 4 параметра: Адрес в памяти, Ширина, Высота, Длина строки в байтах.
Синтаксис Привязка к окну: необязательно. Работа со свернутым окном: да.
loadimage (<filename>) Где: <filename> - путь и имя файла. Заключаются в квадратные скобки [[C:\UoPlot\image\picture1.bmp]] или кавычки "C:\\UoPlot\\image\\picture1.bmp", при этом \ заменить на \\. Если путь содержит пробелы, то нужно заключить путь в квадратные скобки и кавычки: [["C:\UoPlot image\picture1.bmp"]]. Если указано только имя, изображение должно находиться рядом с exe пилота.
address, width, height, length = loadimage ([[C:\UoPlot\image\picture1.bmp]]) -- загрузить картинку picture1.bmp из C:\UoPlot\image log (address) -- адрес в памяти log (width) -- ширина изображения log (height) -- высота изображения log (length) -- длина строки в байтах -- можно не указывать путь, картинка picture4.bmp должна быть рядом с exe пилота address, width, height, length = loadimage ("picture4.bmp") -- если загружается несколько картинок, то используется массив arr = {} -- объявление массива table.insert (arr, {loadimage ([[C:\UoPlot\image\picture1.bmp]])}) -- загрузить картинку picture1.bmp из C:\UoPlot\image table.insert (arr, {loadimage ([[C:\UoPlot\image\picture2.bmp]])}) -- загрузить картинку picture2.bmp из C:\UoPlot\image table.insert (arr, {loadimage ([[C:\UoPlot\image\picture3.bmp]])}) -- загрузить картинку picture3.bmp из C:\UoPlot\image log (arr[1][1]) -- адрес в памяти первой картинки log (arr[2][1]) -- адрес в памяти второй картинки log (arr[3][1]) -- адрес в памяти третьей картинки
в findimage в качестве метода поиска используйте адрес загруженного изображения Сообщение отредактировал DarkMaster - 6.5.2026, 15:29
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна.
|
|
|
|
|
|
| Tindome |
6.5.2026, 17:57
|
 
Neophyte
Сообщений: 41
Регистрация: 16.10.2014 Группа: Пользователи Наличность: 23
Пользователь №: 17.059

|
Цитата(DarkMaster @ 6.5.2026, 15:30)  Код Loadimage (Lua) Описание loadimage - функция загрузки изображения в память. Чтобы при каждом поиске не загружать картинку с HDD. Возвращает 4 параметра: Адрес в памяти, Ширина, Высота, Длина строки в байтах.
Синтаксис Привязка к окну: необязательно. Работа со свернутым окном: да.
loadimage (<filename>) Где: <filename> - путь и имя файла. Заключаются в квадратные скобки [[C:\UoPlot\image\picture1.bmp]] или кавычки "C:\\UoPlot\\image\\picture1.bmp", при этом \ заменить на \\. Если путь содержит пробелы, то нужно заключить путь в квадратные скобки и кавычки: [["C:\UoPlot image\picture1.bmp"]]. Если указано только имя, изображение должно находиться рядом с exe пилота.
address, width, height, length = loadimage ([[C:\UoPlot\image\picture1.bmp]]) -- загрузить картинку picture1.bmp из C:\UoPlot\image log (address) -- адрес в памяти log (width) -- ширина изображения log (height) -- высота изображения log (length) -- длина строки в байтах -- можно не указывать путь, картинка picture4.bmp должна быть рядом с exe пилота address, width, height, length = loadimage ("picture4.bmp") -- если загружается несколько картинок, то используется массив arr = {} -- объявление массива table.insert (arr, {loadimage ([[C:\UoPlot\image\picture1.bmp]])}) -- загрузить картинку picture1.bmp из C:\UoPlot\image table.insert (arr, {loadimage ([[C:\UoPlot\image\picture2.bmp]])}) -- загрузить картинку picture2.bmp из C:\UoPlot\image table.insert (arr, {loadimage ([[C:\UoPlot\image\picture3.bmp]])}) -- загрузить картинку picture3.bmp из C:\UoPlot\image log (arr[1][1]) -- адрес в памяти первой картинки log (arr[2][1]) -- адрес в памяти второй картинки log (arr[3][1]) -- адрес в памяти третьей картинки
в findimage в качестве метода поиска используйте адрес загруженного изображения Ну то есть запись в виде findimage(0, 0, width, height, template, main_image, acc) где local main_image = loadimage [[C:/UoPlot/image/picture1.bmp]] вполне себе рабочая вещь. Осталось только понять почему эта зараза не видит соответствия даже при accuracy 60%
|
|
|
|
|
|
| DarkMaster |
6.5.2026, 18:51
|
          
Модератор UOPilot
Сообщений: 9.791
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 30326
Пользователь №: 11.279

|
приношу извинения. Я ошибочно прочитал ваше изначальное сообщение. Можно подгрузить изображение через loadimage и искать его, но искать можно только на экране. В файле не получится вроде бы. Не помню точно этот момент. Тут ошибочка: findimage(0, 0, width, height, template, main_image, acc) надо: local result, err = findimage(0, 0, width, height, {template}, main_image, acc) log(err)
err что-нибудь показывает?
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____ Контакт актуален, подпись актуальна.
|
|
|
|
|
|
| Tindome |
6.5.2026, 22:52
|
 
Neophyte
Сообщений: 41
Регистрация: 16.10.2014 Группа: Пользователи Наличность: 23
Пользователь №: 17.059

|
Цитата(DarkMaster @ 6.5.2026, 18:51)  приношу извинения. Я ошибочно прочитал ваше изначальное сообщение. Можно подгрузить изображение через loadimage и искать его, но искать можно только на экране. В файле не получится вроде бы. Не помню точно этот момент. Тут ошибочка: findimage(0, 0, width, height, template, main_image, acc) надо: local result, err = findimage(0, 0, width, height, {template}, main_image, acc) log(err)
err что-нибудь показывает?
эээ завтра проверю. а почему template в фигурных скобках? это ведь такая же bmp'шка подгруженная в переменную template как и main_image
|
|
|
|
|
|
| Tindome |
7.5.2026, 8:55
|
 
Neophyte
Сообщений: 41
Регистрация: 16.10.2014 Группа: Пользователи Наличность: 23
Пользователь №: 17.059

|
Цитата(DarkMaster @ 7.5.2026, 6:04)  потому, что когда создавался синтаксис, предполагалась возможность искать несколько изображений и соответственно передавать таблицу. синтаксис сделали, тело не обновили.
local found, err = findimage(0, 0, width, height, {template}, main_image, acc, count, dev) a runtime error. 86: attempt to compare number with nil не хочет он искать в скрине ((
|
|
|
|
|
|
| Tindome |
7.5.2026, 9:56
|
 
Neophyte
Сообщений: 41
Регистрация: 16.10.2014 Группа: Пользователи Наличность: 23
Пользователь №: 17.059

|
Цитата(DarkMaster @ 7.5.2026, 9:29)  Значит нашел с точностью совпадения 100%
у меня код сейчас выглядит вот так: код
Код --lua
-- Базовый путь к папке с изображениями local base_path = "D:/Games/uopilot/Scrin/ST/"
-- Инициализируем массив имён файлов local file_names = { "Atk140_Chcrit12.bmp", "atk150_uklon12.bmp", "top_sniper.bmp", "top_crit.bmp" }
-- Формируем массив полных путей (он же будет использоваться для поиска) local image_paths = {} for i = 1, #file_names do image_paths[i] = base_path .. file_names[i] end
-- Отладочная информация log("Количество файлов: " .. #image_paths)
-- Проверяем результат log("Пути сформированы:") for j = 1, #image_paths do log(j .. ": " .. image_paths[j]) end
-- Объявляем точность поиска, ограничение найденого и погрешность оттенка local acc = 70 local count = 5 local dev = 5
--Определяем точки захвата основного изобра local x1, y1 = 0, 0 local x2, y2 = 1920, 1080
-- Захватываем область экрана и сохраняем как 1_scrinshot.bmp local scr1 = getimage(x1, y1, x2, y2)
-- Проверка захвата if scr1 == 0 then log("Ошибка захвата экрана. Завершаем выполнение.") return end
-- Сохраняем local save_path = base_path .. "1_scrinshot.bmp" local success = saveimage(scr1, save_path) if not success then log("Ошибка: не удалось сохранить скриншот") deleteimage(scr1) return end
-- Безопасное освобождение памяти: проверяем, что слот существует if scr1 ~= 0 then deleteimage (scr1) end
-- Загружаем сохранённое изображение для поиска в нём local main_image = loadimage(save_path) if not main_image then log("Ошибка: не удалось загрузить сохранённое изображение") return end
-- Получаем размеры основного изображения local width = x2 - x1 local height = y2 - y1
-- Основной цикл поиска шаблонов в сохраненном файле while #image_paths > 0 do log("Осталось проверить: " .. #image_paths .. " изображений") local found_any = false
for j = #image_paths, 1, -1 do local template = loadimage(image_paths[j]) log("Загружен" .. template) if not template then log("Ошибка загрузки шаблона: " .. image_paths[j]) table.remove(image_paths, j) else local found, err = findimage(0, 0, width, height, {template}, main_image, acc, count, dev) log(found, err) if found > 0 then -- Получаем координаты центра найденного изображения local found_x = getfoundx() local found_y = getfoundy() log("Найдено: " .. image_paths[j] .. " в сохранённом файле") log("Координаты в файле: x=" .. found_x .. ", y=" .. found_y) table.remove(image_paths, j) found_any = true deleteimage(template) break -- Выходим после первого найденного else log("не вижу") deleteimage(template) end end wait(300) end
if not found_any then log("Все оставшиеся изображения не найдены. Завершаем поиск.") break end wait(500) end
log("Поиск завершён. Осталось изображений: " .. #image_paths)
при условии "if found > 0 then" код вываливается в ошибку: 9:49:21 1 (SHT1.txt, 0): Количество файлов: 4 9:49:21 1 (SHT1.txt, 0): Пути сформированы: 9:49:21 1 (SHT1.txt, 0): 1: D:/Games/uopilot/Scrin/ST/Atk140_Chcrit12.bmp 9:49:21 1 (SHT1.txt, 0): 2: D:/Games/uopilot/Scrin/ST/atk150_uklon12.bmp 9:49:21 1 (SHT1.txt, 0): 3: D:/Games/uopilot/Scrin/ST/top_sniper.bmp 9:49:21 1 (SHT1.txt, 0): 4: D:/Games/uopilot/Scrin/ST/top_crit.bmp 9:49:21 1 (SHT1.txt, 0): Осталось проверить: 4 изображений 9:49:21 1 (SHT1.txt, 0): Загружен67007328 9:49:21 1 (SHT1.txt, 0): nil 0 9:49:22 1 (SHT1.txt, 0): a runtime error. 86: attempt to compare number with nil --lua если условие сделать "if found and found.x and found.y then" код отрабатывает но ничего не видит 9:55:32 1 (SHT1.txt, 0): Количество файлов: 4 9:55:32 1 (SHT1.txt, 0): Пути сформированы: 9:55:32 1 (SHT1.txt, 0): 1: D:/Games/uopilot/Scrin/ST/Atk140_Chcrit12.bmp 9:55:32 1 (SHT1.txt, 0): 2: D:/Games/uopilot/Scrin/ST/atk150_uklon12.bmp 9:55:32 1 (SHT1.txt, 0): 3: D:/Games/uopilot/Scrin/ST/top_sniper.bmp 9:55:32 1 (SHT1.txt, 0): 4: D:/Games/uopilot/Scrin/ST/top_crit.bmp 9:55:32 1 (SHT1.txt, 0): Осталось проверить: 4 изображений 9:55:32 1 (SHT1.txt, 0): Загружен67007328 9:55:32 1 (SHT1.txt, 0): nil 0 9:55:32 1 (SHT1.txt, 0): не вижу 9:55:33 1 (SHT1.txt, 0): Загружен67776456 9:55:33 1 (SHT1.txt, 0): nil 0 9:55:33 1 (SHT1.txt, 0): не вижу 9:55:33 1 (SHT1.txt, 0): Загружен67007328 9:55:33 1 (SHT1.txt, 0): nil 0 9:55:33 1 (SHT1.txt, 0): не вижу 9:55:33 1 (SHT1.txt, 0): Загружен139336832 9:55:33 1 (SHT1.txt, 0): nil 0 9:55:33 1 (SHT1.txt, 0): не вижу 9:55:34 1 (SHT1.txt, 0): Все оставшиеся изображения не найдены. Завершаем поиск. 9:55:34 1 (SHT1.txt, 0): Поиск завершён. Осталось изображений: 4 Сообщение отредактировал DarkMaster - 7.5.2026, 10:10
|
|
|
|
|
|
| Tindome |
7.5.2026, 10:26
|
 
Neophyte
Сообщений: 41
Регистрация: 16.10.2014 Группа: Пользователи Наличность: 23
Пользователь №: 17.059

|
Цитата(DarkMaster @ 7.5.2026, 10:14)  И какой тут процент генерации АИ? 99? На кой черт тут все это? Сделайте две строчки из loadimage и findimage и посмотрите работает это или нет.
нет ) но загрузка файлов была аишкой сделана я делал через table.insert (img, {loadimage (path..[[pers_lvl.bmp]])})... мне показалось что айшкой сделано красивше ..., а ежели ты про комменты ну мне нравится когда в коде их дофига и если аишка вставляет коммент в код я не вижу ничего плохого в том чтобы он там остался... в конечном счете он для личного внутреннего пользования посему не вижу в этом никакого криминала
|
|
|
|
|
|
| Tindome |
7.5.2026, 12:55
|
 
Neophyte
Сообщений: 41
Регистрация: 16.10.2014 Группа: Пользователи Наличность: 23
Пользователь №: 17.059

|
Цитата(Tindome @ 7.5.2026, 11:53)  Ты про форвард слеш ?
Допустил что УО не нравится форвард слеш(хотя записывает файлы используя его отлично.. ну допустим), допустил что не нравится findimage искать полными путями находящимися в таблице.. окей решил загрузить файлы через table.insert код
--lua
local base_path = [[D:\Games\uopilot\Scrin\ST\]]
local file_names = { "Atk140_Chcrit12.bmp", "atk150_uklon12.bmp", "top_sniper.bmp", "top_crit.bmp" }
local image_paths = {} for i = 1, #file_names do image_paths[i] = base_path .. file_names[i] log(image_paths[i]) end
local templates = {} for i = 1, #image_paths do table.insert (templates, loadimage(image_paths[i])) end
лог
12:52:55 2 (autosaved_2.txt, 0): D:\Games\uopilot\Scrin\ST\Atk140_Chcrit12.bmp 12:52:55 2 (autosaved_2.txt, 0): D:\Games\uopilot\Scrin\ST\atk150_uklon12.bmp 12:52:55 2 (autosaved_2.txt, 0): D:\Games\uopilot\Scrin\ST\top_sniper.bmp 12:52:55 2 (autosaved_2.txt, 0): D:\Games\uopilot\Scrin\ST\top_crit.bmp 12:52:55 2 (autosaved_2.txt, 0): a runtime error. 20: wrong number of arguments to 'insert'
я теряюсь в догадках что инсерту не так ...
|
|
|
|
|
|
| Madeus |
7.5.2026, 13:15
|

    
Journeyman
Сообщений: 331
Регистрация: 19.11.2019 Группа: Пользователи Наличность: 12726
Пользователь №: 19.451
Возраст: 32

|
address, width, height, length = loadimage ([[C:\UoPlot\image\picture1.bmp]]) -- загрузить картинку picture1.bmp из C:\UoPlot\image
Т.е. loadimage возвращает 4 параметра. table.insert ожидает до 2 параметров. Ошибка об этом и пишет.
() table.insert (list: table, [pos: number,] value: any) Inserts element value at position pos in list, shifting up the elements list[pos], list[pos+1], ···, list[#list]. The default value for pos is #list+1, so that a call table.insert(t,x) inserts x at the end of list t.
|
|
|
|
|
|
| Tindome |
7.5.2026, 13:29
|
 
Neophyte
Сообщений: 41
Регистрация: 16.10.2014 Группа: Пользователи Наличность: 23
Пользователь №: 17.059

|
Цитата(Madeus @ 7.5.2026, 13:15)  address, width, height, length = loadimage ([[C:\UoPlot\image\picture1.bmp]]) -- загрузить картинку picture1.bmp из C:\UoPlot\image
Т.е. loadimage возвращает 4 параметра. table.insert ожидает до 2 параметров. Ошибка об этом и пишет.
() table.insert (list: table, [pos: number,] value: any) Inserts element value at position pos in list, shifting up the elements list[pos], list[pos+1], ···, list[#list]. The default value for pos is #list+1, so that a call table.insert(t,x) inserts x at the end of list t.
то бишь по сути надо вгружать не картинку, а массив из 4х параметров в массив...
|
|
|
|
|
|
| Tindome |
7.5.2026, 13:40
|
 
Neophyte
Сообщений: 41
Регистрация: 16.10.2014 Группа: Пользователи Наличность: 23
Пользователь №: 17.059

|
Цитата(DarkMaster @ 7.5.2026, 13:17)  insert это образец AI мусора. Код конкретно в вашем случае можно вообще не заморачиваться и: Код local full_path_images = {} for i = 1, #names do full_path_images[i] = preffix..names[i] end
// используйте тег [code] чтобы не ломать глаза эээ я прошу прощения, но этот элемент Ai мусора я взял со странички вики Loadimage (Lua) ... https://uopilot.uokit.com/wiki/index.php?ti...Loadimage_(Lua)
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|