|
|
  |
Разработка findcolor, findimage, Pure lua |
|
|
sutra |
7.4.2021, 17:03
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Это требуется только в критичных (надеюсь пока критичных) ситуациях. Но крутится всё в одном глобальном цикле. Никакой памяти не хватит если её не чистить. Дарк, не будет проблем. Очистка памяти не дольше её выделения. Всю жизнь все так программировали. Цитата Зависит от задачи по большому счету. Я же сказал НЕБОЛЬШАЯ. У меня ничего не бывает большим. А задача - "найти и обезвредить". (IMG: style_emoticons/default/biggrin.gif) А вообще, вы наверное правы. Экономить память - древняя дурная привычка, когда вся оперативка составляла 512 КБ. Наверное проще выделить 1000 массивов и пускай висят в памяти, благо этого дерьма хватает.
|
|
|
|
Cockney |
7.4.2021, 17:52
|
       
Master
Сообщений: 1.403
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 22549
Пользователь №: 16.156

|
Цитата(DarkMaster @ 7.4.2021, 16:52)  1 битовая маска фул хд чуть меньше 6 метров. Если скринить в одно и то же место - проблем нет. Если ты дергаешь постоянно в новые места, то будут проблемы. Зависит от задачи по большому счету.
Это понятно. Имелись в виду пулы таких масок. Скажем пул на серию из 24 изображений. Перебрали все - занулили через memset(). Вопрос больше к выделению памяти. Как она выделяется ? Несколько подходов есть. Можно через виндовые функции по типу HeapAlloc(), а можно через менеджер памяти, который дает язык (Pascal в этом и удобен). В первом случае просить каждый раз - очень медленно. Второй - быстро, но память по факту в систему не возвращается. Это уже так, конечно, придирки, но вроде тут о скорости речь. Цитата(sutra @ 7.4.2021, 16:51)  Мне производительность нужна, когда я осуществляю поиск сканируя экран. А когда уже всё случилось, мне эти доли секунды глубоко по барабану.
А после поиска еще поиск....
|
|
|
|
sutra |
8.4.2021, 12:11
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата А после поиска еще поиск.... Ну конечно. Только для следующего поиска совершенно не критична погрешность пусть даже в 1 сотую секунды. Я не думаю что очистка памяти осуществляется дольше. Мы тут с десятыми долями боремся и даже с секундами при использовании параметра похожесть картинки. Мне вполне хватало скорости, кроме одного уникального случая, про который я спросил и с которого и началась вся эта заворуха. Спасибо всем за инфу. Я для себя принял решение. При старте скрипта, для всей зоны видимости, просто объявлю сразу 2-3 сотни СИ-шных массивов нужного мне объёма памяти, вот и всё. Памяти полно, чего её жалеть. А при работе с памятью, собственно нужно (желательно) соблюдать одно условие, по принципу работы стека. То есть исключать сумбур, а последовательно выделять и освобождать память, дабы исключить фрагментацию памяти.
|
|
|
|
DarkMaster |
8.4.2021, 14:05
|
          
Модератор UOPilot
Сообщений: 9.743
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29659
Пользователь №: 11.279

|
Цитата А в чем смысл ? А если требуется найти лучшее совпадение ? Мне всегда казалось это нижний порог, ниже которого точность не может быть. Ну я положим тоже не знаю. Смысл теоретически мог быть заключен в скорости поиска, но для меня это тоже не совсем ясно. Приходилось постепенно повышать порог, чтобы понять когда реально находит. Этот момент тоже планировалось пересмотреть. Под финды вообще в планах было сделать 2 функции под каждый. Одна человеческая, с нормальными параметрами, парсингом и т.д. и вторую - пушку в которой нет парсинга, левых преобразований, вызовов других функций и т.д. Это я к чему. В человеческую вполне укладывается лишний if даже если он реально нагрузит. Во вторую - естественно нет. А у нас на данный момент нечто среднее. Про финд все мысли... Пока привожу остальное в порядок. Написаны loadimage, image_copy (куска или целиком), переработан saveimage, пришлось еще и отражение по вертикали написать ибо в норме bmp перевернутый верх ногами, но почему-то старые функции его переворачивали на родину. Короче образец логичности и стандартизации пока что. Ну и доков там писать тонну надо еще. Нормально задокументировать + ~1к строк в гору. Цитата Нет. Напишет процент совпадения от 80 до 100. Он это сделает если, скажем, у тебя изображение из 9 пикселей. Тогда у тебя каждый пиксель будет давать 11.(1)%, соответственно 7 пикслей мало, сработает только на 8 пикселях, а это будет 88.(8)%. Ну и получишь ты соответственно 88 или 89 точности (не знаю куда оно округляет, скорее всего trunc). Кстати кусок памяти созданный malloc тоже вполне успешно грохается когда не надо, если он был local. Причем жесткая ирония в том, что грохается не смотря на присвоение upvalue массиву через вызов функции (в буфер добавляю). Сообщение отредактировал DarkMaster - 8.4.2021, 13:58
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
sutra |
8.4.2021, 18:14
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата пришлось еще и отражение по вертикали написать ибо в норме bmp перевернутый верх ногами, но почему-то старые функции его переворачивали на родину Вот и я про то же. Вопрос, а как его переворачивают? Поэлементно? Это же время, про которое мы тут толкуем. Я потестил получение битовой маски и с плюсом и с минусом, разницы не заметил. Разброс результатов большой (я уже говорил, что в lua тестить дело неблагодарное), но без какой-либо очевидной разницы. Не, ну конечно loadimage не критичен наверное ко времени. Но я в очередной раз удивляюсь, как люди умудряются всё делать через жопу, в прямом смысле слова. Может конечно есть какая-то фишка в этом перевёртывании, но что-то никак не возьму в голову какая?? Вот сижу и думаю, как лучше переворачивать. Или может массово покарать грешников, и насильно обратить в правоверных? Наверное проще все файлы массово переделать под минус, делов то подправить в каждом заголовок, да переписать всё наоборот.
|
|
|
|
DarkMaster |
9.4.2021, 3:11
|
          
Модератор UOPilot
Сообщений: 9.743
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29659
Пользователь №: 11.279

|
Цитата Вот и я про то же. Вопрос, а как его переворачивают? Поэлементно? Я переворачивал построчно через memcpy. Цитата Не, ну конечно loadimage не критичен наверное ко времени. Но я в очередной раз удивляюсь, как люди умудряются всё делать через жопу, в прямом смысле слова. Может конечно есть какая-то фишка в этом перевёртывании, но что-то никак не возьму в голову какая?? Для меня вообще интересно за каким чертом изначально сделали через жопу сам формат битовой маски, который подразумевает именно перевернутый вид. Я так преполагаю кнайта задрало выносить мозг перевернутой алгоритмизацией и он просто крутанул. То же получение каринки через gdi по скорости не отличается, разница в написании заключается в минусах проставленных в двух местах. Так же есть версия, что метод 2 получает изображение не перевернутым и я практически уверен, что метод 1 который изначально был сделан работает именно в нормальном виде ибо это чисты get_pixel, который всю область собирает. Т.е. получился некоторый "исторически сложившийся" код, который вроде логичен и адекватен, но не соответствует стандартам(имхо не логичным и неадекватным). В итоге непонятный зоопарк. Цитата Вот сижу и думаю, как лучше переворачивать. Или может массово покарать грешников, и насильно обратить в правоверных? Наверное проще все файлы массово переделать под минус, делов то подправить в каждом заголовок, да переписать всё наоборот. Хз. Имхо надо допилить финдимидж и обрабатывать все в перевернутом виде и ничего не крутить. Главный вопрос в том, как это делать... Впринципе можно и в старый финд подсовывать перевернутые изображения, но там тогда изменится порядок нахождения. Цитата Искать можно и перевернутую картинку, разумеется изображение, на котором искать тоже должно быть перевёрнуто. Если брать луа, то искать перевернутую сохраняя направление поиска не очень удобно. for тут работать на понижение не умеет, т.е. работа пойдет через while, а он медленный. Ну и писать несколько тяжелее.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
|
  |
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|