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

30 страниц V « < 20 21 22 23 24 > »   
Ответить в эту темуОткрыть новую тему
> Разработка findcolor, findimage, Pure lua
Cockney
сообщение 2.6.2021, 15:58
Сообщение #421


********

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



Цитата(sutra @ 2.6.2021, 15:37) *

А если попробовать unsigned int вместо int, какой будет результат? Вроде отрицательные координаты ни к чему. Хотя я понимаю, интересует вопрос ПОЧЕМУ так происходит.

Конечно надо понять причину, но принципе можно просто сдвинуть данные, пусть первые будут типа буфером.



Ничего не поменяется. Просто числа будут не отрицательные. Кажется установил причину такого поведения. Вся проблема в таком участке кода:

Код

// std::get возвращает ССЫЛКУ на вектор
// при этом компилятор выведет тип res как std::vector<FoundImage>, т.е. полноценный ОБЪЕКТ
auto res = std::get<std::vector<FoundImage>>(m_storage);


Т.е. происходит неявное копирование данных из хранилища в объект на стеке, а дальше указатель на данные в этом объекте уходят в тестовое приложение. Разумеется, когда указатель приходит приложению, то объект разрушается (т.к. лежит на стеке), и адрес становится не валидным. А т.к. с++ нужно максимальное ускорение, то память не обнуляется что видно по логам.

фикс заключается в:
Код
auto& res = ....


т.е. явно указать компилятору, что это ссылка на тип, который он должен вывести.

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


*******

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



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

ОК. Удачи.

Я вот что ещё хотел сказать. Препроцессинг, а он вообще нужен? У тебя и так вроде всё быстро, какой смысл ещё чего-то придумывать. А самое главное, что вряд ли что-то можно сильно улучшить. В одном случае будет лучше, а в другом хуже. Фишка в том, что надо искать неизвестно что, на экране где тоже неизвестно что может находиться. Я не знаю какой тут надо разрабатывать ИИ и на какой основе.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 2.6.2021, 16:40
Сообщение #423


********

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



Цитата(sutra @ 2.6.2021, 16:07) *

Я вот что ещё хотел сказать. Препроцессинг, а он вообще нужен? У тебя и так вроде всё быстро, какой смысл ещё чего-то придумывать. А самое главное, что вряд ли что-то можно сильно улучшить. В одном случае будет лучше, а в другом хуже. Фишка в том, что надо искать неизвестно что, на экране где тоже неизвестно что может находиться. Я не знаю какой тут надо разрабатывать ИИ и на какой основе.


В том то и дело, что быстро за счет него. По сути это "подготовка образов" для поиска, только автоматически. Т.е. выделение какой-то части по которой можно точно найти что-то на экране. Конечно, где-то хуже, где-то лучше, но и этот препроцессинг можно сделать как угодно. Можно выделять строго уникальные пиксели, можно скопления пикселей определенного цвета и т.д. Фишка в том, что основной алгоритм поиска не меняется, и мы просто снижаем кол-во данных для обработки. Да и утверждение о том, что ничего не известно немного неверно. У нас есть картинка, которую нужно найти, имеем пределы погрешности поиска, разбег каналов цвета и т.п.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 1.8.2021, 22:03
Сообщение #424


***********

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



Cockney, подскажи, а можно как-то создать прозрачно указатель на массив битмапа с учетом выравниваний? Чтобы избежать лишней математики и копирования. pragma pack или еще как-то?


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


********

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



Цитата(DarkMaster @ 1.8.2021, 22:03) *

Cockney, подскажи, а можно как-то создать прозрачно указатель на массив битмапа с учетом выравниваний? Чтобы избежать лишней математики и копирования. pragma pack или еще как-то?



Код

int stride = image->length - image->width * 3;
int pixelOffset = 0;

for (int y = 0; y < image->height; y++, pixelOffset += stride){
   for (int x = 0; x < image->width; x++, pixelOffset += 3) {
      image->data[pixelOffset] = 0;
      image->data[pixelOffset + 1] = 0;
      image->data[pixelOffset + 1] = 0;
   }
}
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 2.8.2021, 1:37
Сообщение #426


********

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



Иначе говоря - просто создать указатель на непрерывный блок нельзя. Без копирования в смысле.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 2.8.2021, 1:45
Сообщение #427


***********

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



Я, к сожалению, не случайно выбрал формулировку. Хотелось бы все-таки с луа все это делать (уж прости грешного). А по адресам там бегать только через cast, который садит скорость до безумия. Т.е. идейно обращение в виде arr[x][y], при этом очевидно, что компилятор должен понимать, что там есть выравнивание. Ну либо я просто не догоняю как без просадки скорости бегать чистыми указателями в рамках ffi.

Цитата
Иначе говоря - просто создать указатель на непрерывный блок нельзя. Без копирования в смысле.

Ну вообще и да и нет. По крайней мере создав указатель на массив в ffi и указав тип данных ты спокойно можешь бегать индексами. Т.е. тут в чистом виде дает стрелять себе в ногу и речи о провеках чего либо просто нет - у тебя свободный доступ к памяти и ты спокойно можешь выйти за пределы массива с определенным шансом схватив эксепшн.

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


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


********

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



Цитата(DarkMaster @ 2.8.2021, 1:41) *

при этом очевидно, что компилятор должен понимать, что там есть выравнивание.



Не должен. Да, выравнивание есть для полей структур и элементов массивов, но применить напрямую к битмапу нельзя, ибо компилятор вообще не в курсе, что вот у какого-то указателя там каждый условный 30 байт будет выравниванием и максимум что может сделать, это выравнивать каждый пиксель до машинного слова, а это несовместимо с самим форматом bmp + оверхед по памяти. А идея с доступом "arr[x][y]" (если речь именно о битмапе) не будет работать без просадок в чем-то ни на одном языке. Так устроен формат. Либо пихай в какие-то внутренние структуры и трать процессор на парсинг, либо каждый раз при обращении считай новое смещение.

Цитата(DarkMaster @ 2.8.2021, 1:45) *

Ну вообще и да и нет. По крайней мере создав указатель на массив в ffi и указав тип данных ты спокойно можешь бегать индексами. Т.е. тут в чистом виде дает стрелять себе в ногу и речи о провеках чего либо просто нет - у тебя свободный доступ к памяти и ты спокойно можешь выйти за пределы массива с определенным шансом схватив эксепшн.


Во-первых, в какую именно ногу попали-то ? Размеры известны, обсчитывай ограничения сколько влезет...
Во-вторых, а кто мешает создать обертку ? Ну индекс то вроде не сложно посчитать и проверить, можно даже конец массива просчитать и при доступе проверять...

Цитата(DarkMaster @ 2.8.2021, 1:45) *

Ну вообще и да и нет. По крайней мере создав указатель на массив в ffi и указав тип данных ты спокойно можешь бегать индексами.



Хочу посмотреть как будет выглядеть описание типа данных, зная, что шаг выравнивания динамический и идет после каждой "строки", а не после каждого элемента, и по факту зависит от ширины изображения и не известен при компиляции.

Цитата(DarkMaster @ 2.8.2021, 1:45) *

быдлячество полное.



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


***********

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



Цитата
Во-первых, в какую именно ногу попали-то ? Размеры известны, обсчитывай ограничения сколько влезет...
Во-вторых, а кто мешает создать обертку ? Ну индекс то вроде не сложно посчитать и проверить, можно даже конец массива просчитать и при доступе проверять...

Я сказал, что дает стрелять в ногу - и это хорошо. Надо проверить - проверю.
Цитата
Хочу посмотреть как будет выглядеть описание типа данных

Ну вот я тоже хочу, поэтому и спросил =)


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


*******

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



Я уж просто перестал говорить на эту тему. Надоело. Смысл очень прост. Уйма примеров которые однозначно говорят, что при достижении какого-то количества итераций в циклах, lua начинает тормозить. Примерно в 4 раза, поэтому сделать скоростной и универсальный финд, на мой взгляд, проблематично. Буквально на днях, когда хотел попробовать сделать свой таймер (до того как мне показали красивое решение), натолкнулся опять на эти грабли. Там совсем всё просто было. НО при больших циклах - якорь. Это какая-то фишка компилятора, возможно и её можно обойти. Мне понятно одно, если этот якорь не устранить, то проблема со скоростью возникнет однозначно.

На своём финде тоже всё это обкатывал не раз. При малых зонах поиска - результат по скорости практически один в один как в бенчмарке (не учитывая потоки). Решил попробовать и распихал в разные потоки куски зон поиска - результат почти как в бенчмарке. НО стоило увеличить циклы (зоны поиска или величину картинок) - ЯКОРЬ.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 2.8.2021, 10:56
Сообщение #431


**********

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



Какой смысл играться со смещениями... работать с 32 битным изображением да и всё.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 2.8.2021, 11:23
Сообщение #432


***********

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



Цитата
НО при больших циклах - якорь.

Я наблюдал некоторые проблемы при большом количестве захватов изображений. Есть подозрение, что выделение памяти тут виновато. Для себя принял решение просто выделить постоянный буфер равный размеру экрана. Если что-то экстравагантное будет - увеличить буфер один раз и жить спокойно. По поводу пользовательских гетимиджей тоже можно подумать чтобы создавать некоторую область и не высвобожадть полностью даже при вызове deleteimage. Чтобы подобных граблей не было.

Цитата
Какой смысл играться со смещениями... работать с 32 битным изображением да и всё.

Дергать изображение которое по факту 24 бита, конвертить в 32. В итоге время копирования больше, памяти жрется больше. Так сделать безусловно можно и на мой взгляд в данном случае очевидно, что лучше пожертвовать памятью, чем камнем при переборе, тем не менее хочется красиво.


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


*******

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



Не думаю что память виновата. Устал повторять ... десятки раз, в разных случаях, наблюдались тормоза. Наверное просто так работает оптимизация. Сам момент тормозов я вычислить не смог. Каждый раз по разному реагирует. В том числе и при одновременной обработке нескольких изображений (тоже уже даже на реальных примерах показывал). Всегда ли наступают тормоза, я не знаю. Мне это уже не интересно. Ясно одно - факт тормоза присутствует, вот почему наверное на lua суперскорости на все случаи жизни получить не получится. Мне эти тормоза не мешают. Глупые гипотетические примеры ворочать фулХД для 1000 картинок я не рассматриваю. На практике всё очень даже неплохо выглядит. Во всяком случае всё что требуется искать лично мне ищется в разы быстрее, чем работает стандартный getimage. Теперь такой проблемы нет.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
sutra
сообщение 2.8.2021, 12:35
Сообщение #434


*******

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



Вот буквально делал анализ экрана, снимал и записывал в файл образы размером 20*510 пикселей - почти 1000 кадров в секунду (749 файлов за 0,933 сек и теперь это точно 0,933). На адекватных циклах всё очень быстро работает.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 2.9.2021, 10:16
Сообщение #435


***********

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



Мои подозрения подтвердились. Проблемы с падением производительности удалось воспроизвести. Резко росло количество GDI хендлов. Т.е. просто не удаляются старые изображения. У меня были изменения в delete и возвращаемых значениях getimage - отсюда несоответствие ожидаемых параметров, как следствие память и хендлы просто не чистились. Причем все было ровно, как говорил sutra - все начило работать медленнее и медленнее. При достижении ровно 10000 хендлов все умирало, количество больше не росло.

Вообще есть подозрения, что хендлы нужно убивать сразу. Как-то странно я разнес все это по разным функциям.


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


****

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



Ждем фикса и рабочий findimage?)
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 2.9.2021, 15:28
Сообщение #437


***********

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



По колору фикс есть. Теперь стало интереснее и финдимидж довести. Скорее всего будет переход на 32 бита из-за проблем с выравниванием. Ибо читать по указателю можно только через cast, а cast оказался главным тормозом. Читать же через индексы массива хрен прочитаешь из-за друных смещений. Короче проблемы вроде как локализованы, дальше можно писать.


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


***********

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



Кстати по непоняткам с причинами, следствием и т.д. Оно тупить начинало не всегда. Обнаружено было, что только при отсутсвтии искомого цвета это происходило. А тестили естественно на живых примерах.


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


*******

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



Ждёмс! Обязательно потестим. Но что-то мне подсказывает, всё равно будут тормоза, возможно только у меня. Наверное у меня рука тяжёлая и у меня всё не как у людей. Вечно я умудряюсь залезть в какие-то дебри. В любом случае, чтобы не получилось, в итоге - это будет совершенно несопоставимо и по качеству поиска и по скорости со стандартом. Во всяком случае я очень доволен результатами даже своих алгоритмов.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
Cockney
сообщение 21.4.2022, 23:23
Сообщение #440


********

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



Доброго времени суток. На протяжении долгого времени экспериментировал с подходами поиска когда была свободная минутка. Что изменилось:

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

2) Изменил алгоритм препроцессинга искомого изображения. Стало умнее, сильно режет нагрузку поиска, а значит ищется быстрее.

3) Различные недоработки которые смог поймать.


Если кому интересно - погоняйте, будет здорово если всплывет что-то серьезное.

P.s. пароль: uopilot

P.s.s. накидайте примеров в архивчиках вида (на чем идет поиск, что ищется и конфиг запуска, результаты)


Прикрепленные файлы
Прикрепленный файл  release_20220421.zip ( 4,77 мегабайт ) Кол-во скачиваний: 31
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения

30 страниц V « < 20 21 22 23 24 > » 
Ответить в эту темуОткрыть новую тему
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 

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