|
|
|
Разработка findcolor, findimage, Pure lua |
|
|
DarkMaster |
30.3.2021, 21:08
|
Модератор UOPilot
Сообщений: 9.476
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27855
Пользователь №: 11.279
|
Можно удалить. Мой код тестов: Код speed = 0 catch = 0 local r
showwindow() wait(100)
log(os.clock()) local t = os.clock() for i = 1, 1 do -- r = clr.findcolor(0, 0, 1919, 1079, {3302600,3302601,3302602,3302603,3302604}, "image/test.bmp", 100, 5, "a") -- r = clr.findcolor(1810, 970, 1919, 1079, {3302600,3302601,3302602,3302603,3302604}, 593568, 100, 10, "r") -- r = clr.findcolor(0, 0, 1919, 1079, 3302600, "image/test.bmp", 100, 6, "a") -- r = clr.findcolor(0, 0, 1919, 1079, 3302600 , 2, 100, 6, "a") end log(os.clock() - t) log(speed) log(catch)
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
Madeus |
30.3.2021, 22:51
|
Apprentice
Сообщений: 283
Регистрация: 19.11.2019 Группа: Пользователи Наличность: 8501
Пользователь №: 19.451
Возраст: 32
|
У меня одного если не указать "abs" то ищет в фулхд, хотя указаны конкретные координаты? Лог без abs Код 268554272 1921 1081 5764 268554272 273787983 5764
Лог с abs Код 12398680 63 60 192 12398680 12410199 192
Кстати такой баг был замечен и со старым getimage
|
|
|
|
DarkMaster |
31.3.2021, 0:45
|
Модератор UOPilot
Сообщений: 9.476
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27855
Пользователь №: 11.279
|
Sutra, я тут в итоге все-таки наткнулся на один ужас в загашниках... Сразу предупреждаю - это делалось, когда у нас был убогий crystal lua, не было luajit и все работало через Ж из-за этого crystal. Писалось чисто ради теста и экспериментов с графикой и пониманием bmp. Короче скринилка есть, она работает, но нужно зажмуриться, скопировать код и никогда в него не смотреть. Она еще и дикий тормоз, но вроде шуршит. зажмурься
Код local ffi = require[[ffi]] local clr = require[[lua_system\color]]
local function full_trash(path, a, w, h, l)
local binary = {} function binary.writeInt(file, x) local b4=x%256 x=(x-x%256)/256 local b3=x%256 x=(x-x%256)/256 local b2=x%256 x=(x-x%256)/256 local b1=x%256 x=(x-x%256)/256 return file:write(string.char(b4,b3,b2,b1))
end
local f = io.open(path, 'wb') f:write([[BM]]) binary.writeInt(f, h*w*3+54) f:write(string.char(0)) f:write(string.char(0)) f:write(string.char(0)) f:write(string.char(0)) f:write(string.char(0x36)) f:write(string.char(0)) f:write(string.char(0)) f:write(string.char(0)) f:write(string.char(0x28)) f:write(string.char(0)) f:write(string.char(0)) f:write(string.char(0)) binary.writeInt(f, w) binary.writeInt(f, h) f:write(string.char(0x1)) f:write(string.char(0)) f:write(string.char(0x18)) f:write(string.char(0)) f:write(string.char(0)) f:write(string.char(0)) f:write(string.char(0)) f:write(string.char(0)) binary.writeInt(f, w*h*3) for i = 1, 16 do f:write(string.char(0)) end
--for i = a, a+l*w, l do --for i = a, a+l*w, l do log(a,l,h) local i = a+l*h-l log() log(i,a) while i >= a do for j = i, i+l-1, 3 do f:write(string.char(ffi.cast("unsigned char*", j)[0], ffi.cast("unsigned char*", j)[1], ffi.cast("unsigned char*", j)[2] )) end i = i - l end
f:close() end
showwindow() wait(100)
local a, w, h, l = clr.getimage(0,0,1919,1079,0) full_trash([[image\my_pic.bmp]], a, w, h, l)
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
DarkMaster |
31.3.2021, 3:06
|
Модератор UOPilot
Сообщений: 9.476
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27855
Пользователь №: 11.279
|
100 прогонов во всех тестах
Фулл хд. Абс выкл. r = clr.findcolor(0, 0, 1919, 1079, 3302600 , 2, 100, 6, "a") полное время выполнения: 8.4 секунды. время анализа изображения: 0.36 секунды.
Фулл хд. Абс вкл. r = clr.findcolor(0, 0, 1919, 1079, 3302600 , 2, 100, 6, "a", "abs") полное время выполнения: 9.941 время анализа изображения: 0.37000000000018
Область 1/100 фулл хд. Абс выкл. r = clr.findcolor(0, 0, 191, 107, 3302600 , 2, 100, 6, "a") end полное время выполнения: 8.789 время анализа изображения: 0.0039999999999054
Область 1/100 фулл хд. Абс вкл. r = clr.findcolor(0, 0, 191, 107, 3302600 , 2, 100, 6, "a", abs) полное время выполнения: 8.4830000000001 время анализа изображения: speed: 0.010999999999967
speed это как раз для оценки скорости алгоритма сравнения. Все остальное уходит на парсинг и захват изображения.
В целом абс существенным образом не повлияло на общее время выполнения. Тем не менее по каким-то причинам захват большой области происходил чуть дольше именно с абс, чем такой же области без абс. При уменьшении области в 100 раз можно наблюдать идеально ровное уменьшение времени поиска в 100 раз в рамках именно анализа изображения. Почему при абс время поиска сокращается только в 30 раз для меня некоторая загадка. Если взглянуть на картину в целом, то время анализа просто тонет во времени захвата изображения. В среднем анализ занял 4% времени при поиске фул хд, и 0.087% при поиске в области 1/100 от фулл хд.
Сообщение отредактировал DarkMaster - 31.3.2021, 3:08
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|