|
|
|
Помогите освоить LUA |
|
|
sutra |
14.12.2018, 17:56
|
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007
|
Для текстов вроде ДА, даёт эффект аккуратность, для картинок наоборот, конечно можно также эпмирическим методом найти наилучший вариант для каждого случая, вот только как с потерей скорости??? В общем закрыли тему. Цитата Эх. Жаль. Давно не было таких интересных и продуктивных дискуссий. Да брось, я ляпнул - ты ответил. Ну если скажете чего, поддержу, а из пустого в порожнее чего переливать то!! (IMG: style_emoticons/default/biggrin.gif) Лично меня подкупила скорость обработки, ну вот доделаю скрипт и может удосужусь сесть и нарисовать свой вариант и с аккуратностью и с погрешностью и с яркостью и с гаммой.
|
|
|
|
sutra |
14.12.2018, 18:22
|
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007
|
Цитата Можно прикрутить поиск с помощью пользовательской функции =) Ну всё верно. Кстати ты спрашивал типа чем мой не устроил? Твой - это какой? Ты про распознаватель который в теме cirus-а? Ну если этот, ну не знаю, у меня уже к тому времени всё было своё. Картинки искались джипегами (кстати до сих пор маслает за милу душу). Распознаватель был свой, тем более мне нужны только цифры, а их вычленять я научился. Я решал иную задачу и пока ещё только подбираюсь к решению. Пока не доделаю весь скрипт трудно что-то сказать. А когда ты дал СИ шный инструментарий, я вообще прямо загорелся - ну нет никаких ограничений, реально нет. Всю статистику я всегда собирал и прямиком запихивал в эксель, поэтому сейчас у меня подробнейшая таблица на каждый символ и я до такой степени скрупулезно всё анализировал, что сейчас распознаю число аж вот так FindRGB(address,len,244,639, 688,639,825,639,"R(0-255)",10000) Это ещё по старинке вызывается параллельный скрипт на lua.
|
|
|
|
sutra |
14.12.2018, 18:26
|
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007
|
Обрати внимание достаточно анализ ОДНОЙ строки пикселей. Я точно знаю все варианты этой строки. Это я делал ещё для тормозного Пилота. Цитата Могу еще рассказать, как сделать дллку и написать на реально чистом си и прилинковать через ffi. Спасибо, Дарк, возможно обращусь. Спасибо, но надо пока хоть что-то доделать, а то я уже целый месяц топчусь на месте - результата конечного нет. Интерес есть, результата (ради чего всё затевалось) нет. Это знаешь типа как раньше, полез поворотник в Жигулях посмотреть, подправить, а в итоге коробку передач разобрал.
|
|
|
|
sutra |
15.12.2018, 5:34
|
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007
|
Дарк, я тут просто пробежался по темам форума, по вопросам и ответам. Что могу сказать, конечно не все зададут вопрос, но всё-таки, статистика - вещь неумолимая. Кто спросил как работает findimage? Как сделать быстрее? Как воспользоваться той или иной функцией? Вот лично я задавал вопросы по синтаксису, потому, что не знаю ничего, а люди то вообще спрашивают А КАК? Там проблемки поглубже, там не синтаксис, там основы программирования и алгоритмирования. И мы им прикрутим deviation и accurace? Надо так ... чем проще, тем лучше, а для особо одарённых просто менюшку "advanced" и мелким шрифтом и в 3-й уровень вложенности.
|
|
|
|
DarkMaster |
15.12.2018, 5:45
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27724
Пользователь №: 11.279
|
Цитата И мы им прикрутим deviation и accurace? Для этого есть параметры по умолчанию. Возможно их стоит как-то более агрессивно доводить до пользователей. Например, изменить схему вставки из меню по пкм. Для луа я вообще параметры раскидываю по строкам: Код local arr, err = findimage( x1,y1,x2,y2, {[[path]]}, 2, 90, 1, 4) Так просто нагляднее и проще. Последнюю строку я бы просто не вставлял, чтобы не путать людей. Вообще на самом деле самая большая трагедия в том, что люди не умеют читать синтаксис. Я уже задолбался везде писать, что параметры в квадратных скобках не являются обязательными. Люди этого не знаю, не понимают, пытаются задать все возможное, зачастую ненужное. Сообщение отредактировал DarkMaster - 15.12.2018, 5:45
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
sutra |
17.12.2018, 18:30
|
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007
|
Код local cscrX,cscrY,cfx1,cfy1,cfx2,cfy2,cl=ffi.new("uint16_t"),ffi.new("uint16_t"),ffi.new("uint16_t"),ffi.new("uint16_t"),ffi.new("uint16_t"),ffi.new("uint16_t"),ffi.new("uint16_t") Как то можно от таких соплей избавиться? Чтобы нужные переменные объявить один раз нужным типом или придётся терпеть универсальность lua, которая в данном случае у меня вызывает улыбку. И возникла ещё одна идея, но не уверен в правильности своих мыслей. Есть смысл перейти с for-ов например на repeat-ы, с использованием СИ переменных? Так как в for-ах переменные локальные и по определению lua-шные. Вроде по логике должно быстрее работать с репитами и вайлами?
|
|
|
|
sutra |
17.12.2018, 18:43
|
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007
|
Вроде допинал сравнение картинок. Убрал считывание картинки целиком в память. Считывается ровно столько, сколько необходимо. В нормальных ситуациях прирост по скорости несопоставимо быстрее. А вот если куча холостых сравнений, тогда может быть и хуже (но это уже вопрос, как правильно делать картинки). А ещё сделал возможность анализировать не все три канала RGB, а вплоть до одного. Если радуги нет, как в моём случае, скорость выростает ещё в 3 раза и всё работает как надо. Вроде удалось переплюнуть (только при правильных картинках) скорость моего джипеговского распознавателя. Всё-таки пока работал на Пилотовском языке - это был ПРОРЫВ, проверил его ещё раз досконально. Скорость его выполнения всего 15-20 миллисекунд и плюс его ещё и в том, что скорость не зависит от условий, сам алгоритм проверяет (отсекает) ВСЕ варианты картинок.
|
|
|
|
DarkMaster |
18.12.2018, 5:03
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27724
Пользователь №: 11.279
|
Цитата Как то можно от таких соплей избавиться? Чтобы нужные переменные объявить один раз нужным типом или придётся терпеть универсальность lua, которая в данном случае у меня вызывает улыбку.
Все зависит от области, где вы их объявлете. Можно их просто сделать upvalue. Код local function my_func() end -- прототип функции do -- создаем карман namespace, аналогичный while, for, function local my_var = 123 function my_func() my_var = my_var + 1 print(my_var) end end Обратите внимание, что upvalue в данном случае не будет высвобождаться и значение будет сохраняться, но за пределам do end вы его прочитать не сможете. Вообще это логично и очевидно - если вы используете переменную, то вы ее инициализруете каждый раз, если высвобождаете память. Где-то это не так? Конкретно в данном случае возможно имеет смысл объявить структуру, а не набор переменных. Цитата А ещё сделал возможность анализировать не все три канала RGB, а вплоть до одного. А теперь делай сравнение по минимальному значению канала и максимальному. Я фильтры покрутил и офигел =) Крайне полезная вещь. Так же в теории может пригодится сумма каналов. На самом деле я думал, что именно сумма даст лучший результат для того, чтобы избежать рендеринга и сглаживания шрифтов. Однако по тем случаям, что я анализировал лучшим результатом был минимум и максимум. Контраст оказался просто огромным. Цитата всё равно бывают случаи, когда приходится делать несколько вариантов картинок Читай выше (IMG: style_emoticons/default/wink.gif) Сообщение отредактировал DarkMaster - 18.12.2018, 5:06
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
sutra |
18.12.2018, 17:16
|
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007
|
Спасибо Дарк, да, я тут тоже всё экспериментирую. Вопрос по repeat снят. Я удивился, но скорость с репитом выросла ровно в 2 раза, а это очень нехило. Цитата что именно сумма даст лучший результат для того Я уже давно использую сумму и даже суммы одного канала может быть достаточно. Я уже показывал как скан всего одной строки пикселей по тексту и анализ именно суммы вполне однозначно позволяет определить символ, это у меня работает только на цифрах, на иных символах не проверял, ввиду отсутствия необходимости. Конечно там получается несколько вариантов суммы - это зависит от вариантов сочетания цифр и позиции цифры в числе. Ну в общем это получается анализ результатов сглаживания шрифтов. Если число на постоянном фоне, то влияет только сглаживание, рендеринг отсутствует. А может и вообще рендеринг на текст не распространяется, точно сказать не могу.
|
|
|
|
sutra |
18.12.2018, 20:54
|
Adept
Сообщений: 923
Регистрация: 10.8.2018 Группа: Пользователи Наличность: 0
Пользователь №: 19.007
|
Мда, не всё так просто, я маловато знаю, не всегда переход на репит даёт положительный результат. Код k=0 repeat sg[k]=rmem("unsigned char*",indg+k)[0] sl[k]=rmem("unsigned char*",indl+k)[0] if math.abs(sg[k]-sl[k])>cdev then return 0 end k=k+1 until k>cch[code] Вот такой цикл при сравнительном тесте выполнялся 2,559 сек. А вот такой цикл 1,559 Код for k=0,2 do sg[k]=rmem("unsigned char*",indg+k)[0] sl[k]=rmem("unsigned char*",indl+k)[0] if math.abs(sg[k]-sl[k])>cdev then return 0 end end Надо тестить с разными типами переменных. Этих типов мама не горюй. Дарк, есть предпочтения? Какие типы обрабатываются лучше? Знаковые? Беззнаковые? и скольки битовые? 16 32 или вообще 64?
|
|
|
|
DarkMaster |
18.12.2018, 21:51
|
Модератор UOPilot
Сообщений: 9.467
Регистрация: 2.12.2008 Группа: Супермодераторы Наличность: 27724
Пользователь №: 11.279
|
Цитата k=0 сишной объявите. Цитата Этих типов мама не горюй. Дарк, есть предпочтения? Какие типы обрабатываются лучше? Знаковые? Беззнаковые? и скольки битовые? 16 32 или вообще 64? n страниц назад я выкладывал тесты по типам и ваши результаты тестов там тоже есть =) Цитата Я уже давно использую сумму и даже суммы одного канала может быть достаточно. Попрбуй использовать для сравнения наименьший и наибольший каналы. Это дало лучший результат чем суммы. Т.е.: rgb 100 255 35 -- берем 35 25 50 200 -- берем 25 сравниваем 25 и 35. На первый взгляд маразм, но при анализе фильтрами в фоторедакторе именно этот вариант был очень хорош по результатам. Ну и наоборот максимумы.
--------------------
Скрипты UOPilot под заказ. Консультации по UOpilot 15$/час. Услуги Lua разработчика (не пилот, проекты, постоянка) Disсоrd: Kov____
|
|
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|