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

|
Да почему рисовать, почему резать? Всё ищется без процентовки, у меня это параметр sim (similar - похожесть) . Лично я её использую только при поиске перекрытых друг другом картинок (мишеней например и там нет таких размеров, всё быстро поэтому) ну и иногда возможен вариант, когда тоже без similar не получается, если может быть расположен на картинке прицел (и тоже нет пропуска такого гигантского количества пикселей). Всё остальное ищется диапазоном, который я задаю 2-мя параметрами dev - абсолютное отклонение (требуется обычно для тёмных пикселей) и acc - процент отклонения цвета. Мой алгоритм как раз и позволяет автоматом задавать поиск. Надо мне искать только "красненькое", не обращая внимание на другие пиксели картинки. Я и формирую псевдокартинку условием r=100, R=255 или как в твоём примере задал фон r=195 и всех делов. На самом деле всё чудесненько и быстренько ищется. Просто если и similar ускорить - это будет КОСМОС.
Лично я не знаю ни одного случая и даже не могу представить мысленно, когда меня бы что-то напрягло так, что это не ищется. Процентовка на малых картинках отрабатывает тоже на ура.
|
|
|
|
sutra |
10.4.2021, 18:49
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
И ещё один довод, тоже уже говорил про это. Иногда наоборот эта процентовка только мешает искать то, что надо. Тоже надо думать и понимать какой процент схожести задавать. 80% - это очень много. Пятая часть предполагается мусор - это что же за картинка такая??? Цитата Частично прозрачный текст на изменяющемся фоне с нечеткими границами, отрисованный через сглаживание шрифтов. У меня было... Печальная история. Да не поможет тут процентовка, диапазоном надо играть. ПРОЦЕНТОМ отклонения цвета, а не пропуском мусора. Я понял про что ты говоришь. Так буковки то МАЛЕНЬКИЕ, там даже пропуск мусора не влияет на скорость. Да - это наиболее сложный поиск. Без головы юзер его не выполнит, а с головой я тебе найду запросто. Возможно придётся создать несколько наборов картинок, я такими наборами влёгкую побеждаю сглаживание. Всё ищется, на практике уже, а не в теории.
|
|
|
|
DarkMaster |
10.4.2021, 18:53
|
          
Модератор UOPilot
Сообщений: 9.735
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 29623
Пользователь №: 11.279

|
Цитата Да не поможет тут процентовка, диапазоном надо играть. ПРОЦЕНТОМ отклонения цвета, а не пропуском мусора. Угу, а потом оказывается, что один из самых контрастных и значимых пикселей прыгает в право-влево на единичку. А такие будут в каждом изображении при выше описанных условиях. И тут как раз точность очень сильно поможет. Обрезать весь фон тоже не реально. В итоге приходится искать не понятно что, и не дай бог еще спутать разные символы. Частично перекрытые изображения тоже бывают не так редко. Вообще из практики могу сказать, что если задаешь больше 95% точности, то это к прекрасным вечерам в пэинте. 92% самая золотая середина.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
sutra |
10.4.2021, 19:17
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Цитата Это пока у тебя их не тыща картинок) Сглаживание, jpg эффекты, фон, прозарчность. А ты пробовал? Я одним образом ищу примерно полторы тысячи, причём некоторые по нашим меркам огромные, типа 500*20, конечно я не лопачу весь экран, ищутся позиции, а по ним картинки. До последнего времени самое долгое 27-28 тысячных - это был getimage. Дарк, я же тебя не отговариваю, наоборот говорю, ищи причину, делай! (IMG: style_emoticons/default/biggrin.gif) Ну а если не получится, ну тогда обращайтесь, 12$ в час, буду искать ваши картинки. (IMG: style_emoticons/default/biggrin.gif)
|
|
|
|
sutra |
10.4.2021, 22:56
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
И у тебя Дарк, всё-таки короткая память. Я ведь ещё в 19 году тебе говорил, в смысле спрашивал, а как ты игнорируя мусор (отсеивая какую-то часть пикселей) будешь отличать например "О" от "Q" или "1" от "l" . Пропуск мусора - это крайний случай, прибегать к которому надо абсолютно осознанно и понимая что должно искаться, а что нет. В большинстве случаев пропуск - это минус, так как это говорит лишь о том, что либо ищется не то что надо, либо что надо не ищется вовсе. Ну а в каких случаях требуется отсев уже устал повторять. У Кнайта изначально не было deviation и отсев нежелательных пикселей - это была просто необходимая данность. Потом всё было уже серьёзно переработано, но по умолчанию так остались 20% отсева (80% точности).
|
|
|
|
sutra |
11.4.2021, 17:41
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Дарк, у тебя там косячки в скринилке, забыл наверное, на автомате клепал - исправь. Они вроде ни на что не влияют, но чисто для порядка.
C.WriteFile(f, ffi.new("uint32_t[1]", h*w*3+54 )
Надо множить не на тройную ширину, а на длину строки, ну и далее тоже. Про то что там далее я не в теме (хотя все пишут по длине строки), но размер то файла точно врёт.
|
|
|
|
sutra |
11.4.2021, 18:52
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
И мне как-то не понравилась запись в файл кусками. По древней, старпёрской привычке делать запись в файл одним оператором я сделал по-своему. Сначала сформировал единый заголовок, а потом допинываю требуемыми значениями. Код ffi.C.memcpy(bmpHeader+2,ffi.new("uint32_t[1]",h*lD+54),4) ffi.C.memcpy(bmpHeader+18,ffi.new("uint32_t[1]",w),4) ffi.C.memcpy(bmpHeader+22,ffi.new("uint32_t[1]",h),4) ffi.C.memcpy(bmpHeader+34,ffi.new("uint32_t[1]",h*lD),4)
Соответственно запись заголовка в файл идёт за один заход.
|
|
|
|
sutra |
12.4.2021, 13:44
|
      
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007

|
Парни, спасибо вам за моё обучение! Как хорошо, что надоумили плюнуть на память! Надоела мне эта возня с типами данных и адресами. Сделал один глобальный СИ-массив, под разные случаи жизни, видимый всеми и везде и никаких проблем. Например нулевой массив содержит 4-х байтовые величины, с индексами 1 и 2 - байтовые и т.д.. И теперь работа с выделением памяти под переменные просто отсутствует. И можно пихать что угодно, куда угодно, с минимальными потерями времени. Да, не эстетично, не правильно с точки зрения организации кода. Только на кой мне эта правильность, если lua (на мой вкус) сам трижды неправильный. Для примера, как переделал код и избавился от этих "режущих глаз" new: Код CI[0][0]=h*lD+54 ffi.C.memcpy(HeaderBMP+2,CI[0],4) CI[0][0]=w ffi.C.memcpy(HeaderBMP+18,CI[0],4) CI[0][0]=h ffi.C.memcpy(HeaderBMP+22,CI[0],4) CI[0][0]=h*lD ffi.C.memcpy(HeaderBMP+34,CI[0],4) for i=y2,y1,-1 do -- цикл перевёртыш ffi.C.memcpy(CI[d]+iD,CI[s]+iS,w*3) iD,iS=iD+lD,iS-lS end
|
|
|
|
|
  |
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|