Здравствуйте, гость ( Вход | Регистрация )

30 страниц V « < 10 11 12 13 14 > »   
Ответить в эту темуОткрыть новую тему
> Разработка findcolor, findimage, Pure lua
Cockney
сообщение 7.4.2021, 16:49
Сообщение #221


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22549
Пользователь №: 16.156



В чем смысл так часто очищать память ? На производительность это хуже только повлияет.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 7.4.2021, 16:51
Сообщение #222


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Да понял я уже это Дарк, спасибо. Кстати в дремучем Паскале на каждое new было своё dispose. Жаль, что здесь нет такого.

Цитата
В чем смысл так часто очищать память ? На производительность это хуже только повлияет

Мне производительность нужна, когда я осуществляю поиск сканируя экран. А когда уже всё случилось, мне эти доли секунды глубоко по барабану.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 7.4.2021, 16:52
Сообщение #223


***********

Модератор UOPilot
Сообщений: 9.743
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29659
Пользователь №: 11.279



Цитата
В чем смысл так часто очищать память ? На производительность это хуже только повлияет.

1 битовая маска фул хд чуть меньше 6 метров. Если скринить в одно и то же место - проблем нет. Если ты дергаешь постоянно в новые места, то будут проблемы. Зависит от задачи по большому счету.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 7.4.2021, 17:03
Сообщение #224


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Это требуется только в критичных (надеюсь пока критичных) ситуациях. Но крутится всё в одном глобальном цикле. Никакой памяти не хватит если её не чистить.

Дарк, не будет проблем. Очистка памяти не дольше её выделения. Всю жизнь все так программировали.

Цитата
Зависит от задачи по большому счету.
Я же сказал НЕБОЛЬШАЯ. У меня ничего не бывает большим. А задача - "найти и обезвредить". (IMG:style_emoticons/default/biggrin.gif)

А вообще, вы наверное правы. Экономить память - древняя дурная привычка, когда вся оперативка составляла 512 КБ. Наверное проще выделить 1000 массивов и пускай висят в памяти, благо этого дерьма хватает.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 7.4.2021, 17:52
Сообщение #225


********

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) *

Мне производительность нужна, когда я осуществляю поиск сканируя экран. А когда уже всё случилось, мне эти доли секунды глубоко по барабану.



А после поиска еще поиск....
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 8.4.2021, 12:11
Сообщение #226


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Цитата
А после поиска еще поиск....

Ну конечно. Только для следующего поиска совершенно не критична погрешность пусть даже в 1 сотую секунды. Я не думаю что очистка памяти осуществляется дольше. Мы тут с десятыми долями боремся и даже с секундами при использовании параметра похожесть картинки. Мне вполне хватало скорости, кроме одного уникального случая, про который я спросил и с которого и началась вся эта заворуха.
Спасибо всем за инфу. Я для себя принял решение. При старте скрипта, для всей зоны видимости, просто объявлю сразу 2-3 сотни СИ-шных массивов нужного мне объёма памяти, вот и всё. Памяти полно, чего её жалеть.

А при работе с памятью, собственно нужно (желательно) соблюдать одно условие, по принципу работы стека. То есть исключать сумбур, а последовательно выделять и освобождать память, дабы исключить фрагментацию памяти.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 8.4.2021, 12:47
Сообщение #227


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Я всё думал про алгоритм Кнайта. Вы почитайте историю развития. Что там написано - ищет по уникальному для картинки цвету (абсолютно прагматичный подход), но он не должен быть ничем перекрыт. Погрешность прикручена уже позже. Думаю весь секрет скорости зарыт здесь. Возможно осуществляется и какой-то анализ экрана (то на чём ищется картинка).
А вот тут и возникает вопрос, что лучше, иметь скорость при использовании похожести, но не иметь 100% достоверности или наоборот. Практические аспекты использования имиджа в разных ситуациях я уже приводил. Принцип Кнайта очень даже хорош. Я пытаюсь делать собственно то же самое - ЗАДАТЬ УНИКАЛЬНОСТЬ для искомой картинки, но совершенно иным способом.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 8.4.2021, 13:02
Сообщение #228


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Я проделал небольшой эксперимент. Запоганил слегка тестовый экран Дарка на 10%. Фоном принял то же пиксель, что для финда Кнайта. У моего алгоритма похожесть 90% (на 91% не найдёт картинку), а у Кнайта - это 85%. Неплохой вопрос почему?

Это если у Кнайта делать погрешность 0, а вот если делаю погрешность 10%, то и у Кнайта тоже похожесть становится 90%.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 8.4.2021, 13:03
Сообщение #229


***********

Модератор UOPilot
Сообщений: 9.743
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29659
Пользователь №: 11.279



Цитата
Думаю весь секрет скорости зарыт здесь. Возможно осуществляется и какой-то анализ экрана (то на чём ищется картинка).

Это оптимизации и не более. При поиске бОльшего числа картинок, чем есть на экране - оптимизации сразу становятся неактуальными. Если есть изображение подподающее под заданные параметры - он его 100% найдет.

Цитата
У моего алгоритма похожесть 90% (на 91% не найдёт картинку), а у Кнайта - это 85%. Неплохой вопрос почему?

Что есть похожесть? Есть точность и девиэйшн


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 8.4.2021, 13:08
Сообщение #230


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Ну в общем, по крайней мере лично для себя, я вопрос решил. Не буду я больше ничего изобретать. Буду пользоваться своим. Надо просто грамотно организовывать поиск и никаких проблем не возникает.

Цитата
Что есть похожесть?

Это то, что показывает результат поиска у Кнайта, если найдена одна картинка - % похожести.

Моя терминология: похожесть - accurace; погрешность - deviation.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 8.4.2021, 13:22
Сообщение #231


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Я во всём люблю ясность. Любые ... если ... возможно - это не для меня. Всё должно быть абсолютно точно. Искаться то - что должно искаться и никак иначе. Но это лично моё субъективное мнение. А вам други - удачи, творческих побед и здоровья.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 8.4.2021, 13:26
Сообщение #232


***********

Модератор UOPilot
Сообщений: 9.743
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29659
Пользователь №: 11.279



У кнайта отображается точность при которой алгоритм посчитал достаточным для совпадения. Т.е. если мы зададим точность, скажем, в 80%, то первый же пиксель который перейдет границу в 80% будет последним. Т.е. имея, скажем, картинку из 100 пикселей и точность в 80% ты никогда не увидишь, что она нашлась с точностью 81%.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 8.4.2021, 13:38
Сообщение #233


********

Master
Сообщений: 1.403
Регистрация: 22.6.2013
Группа: Пользователи
Наличность: 22549
Пользователь №: 16.156



Цитата(DarkMaster @ 8.4.2021, 13:26) *

У кнайта отображается точность при которой алгоритм посчитал достаточным для совпадения. Т.е. если мы зададим точность, скажем, в 80%, то первый же пиксель который перейдет границу в 80% будет последним. Т.е. имея, скажем, картинку из 100 пикселей и точность в 80% ты никогда не увидишь, что она нашлась с точностью 81%.



А в чем смысл ? А если требуется найти лучшее совпадение ? Мне всегда казалось это нижний порог, ниже которого точность не может быть.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 8.4.2021, 13:57
Сообщение #234


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26717
Пользователь №: 16.971
Возраст: 29



Цитата
У кнайта отображается точность при которой алгоритм посчитал достаточным для совпадения. Т.е. если мы зададим точность, скажем, в 80%, то первый же пиксель который перейдет границу в 80% будет последним. Т.е. имея, скажем, картинку из 100 пикселей и точность в 80% ты никогда не увидишь, что она нашлась с точностью 81%.

Нет. Напишет процент совпадения от 80 до 100.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 8.4.2021, 14:05
Сообщение #235


***********

Модератор 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____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 8.4.2021, 14:17
Сообщение #236


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26717
Пользователь №: 16.971
Возраст: 29



Цитата
Он это сделает если, скажем, у тебя изображение из 9 пикселей.

30*30.
Цитата
Кстати кусок памяти созданный malloc тоже вполне успешно грохается когда не надо

Сборщик что ли удаляет?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 8.4.2021, 14:29
Сообщение #237


***********

Модератор UOPilot
Сообщений: 9.743
Регистрация: 2.12.2008
Группа: Супермодераторы
Наличность: 29659
Пользователь №: 11.279



Цитата
Сборщик что ли удаляет?

Ага. Причем вызываемый из функции, где оно создано - не трогает, а как только выйдет из функции первый же вызов сборщика грохает.


--------------------
Скрипты UOPilot под заказ.
Консультации по UOpilot 15$/час.
Услуги Lua разработчика (не пилот, проекты, постоянка)
Disсоrd:
Kov____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 8.4.2021, 18:14
Сообщение #238


*******

Adept
Сообщений: 923
Регистрация: 10.8.2018
Группа: Пользователи
Наличность: 0
Пользователь №: 19.007



Цитата
пришлось еще и отражение по вертикали написать ибо в норме bmp перевернутый верх ногами, но почему-то старые функции его переворачивали на родину

Вот и я про то же. Вопрос, а как его переворачивают? Поэлементно? Это же время, про которое мы тут толкуем. Я потестил получение битовой маски и с плюсом и с минусом, разницы не заметил. Разброс результатов большой (я уже говорил, что в lua тестить дело неблагодарное), но без какой-либо очевидной разницы.

Не, ну конечно loadimage не критичен наверное ко времени. Но я в очередной раз удивляюсь, как люди умудряются всё делать через жопу, в прямом смысле слова. Может конечно есть какая-то фишка в этом перевёртывании, но что-то никак не возьму в голову какая??

Вот сижу и думаю, как лучше переворачивать. Или может массово покарать грешников, и насильно обратить в правоверных? Наверное проще все файлы массово переделать под минус, делов то подправить в каждом заголовок, да переписать всё наоборот.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 9.4.2021, 1:42
Сообщение #239


**********

Elder
Сообщений: 3.480
Регистрация: 18.8.2014
Группа: Пользователи
Наличность: 26717
Пользователь №: 16.971
Возраст: 29



Цитата
Вопрос, а как его переворачивают?

Искать можно и перевернутую картинку, разумеется изображение, на котором искать тоже должно быть перевёрнуто.
Можно создать битмап в памяти и скопировать в него картинку, получить массив бит.
Либо копировать построчно через memcpy, обычно искомая картинка небольшой высоты, так что по времени это вообще ничего не стоит.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 9.4.2021, 3:11
Сообщение #240


***********

Модератор 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____
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

30 страниц V « < 10 11 12 13 14 > » 
Ответить в эту темуОткрыть новую тему
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0

 

- Текстовая версия | Версия для КПК Сейчас: 13.7.2025, 16:28
Designed by Nickostyle
Loading...