|
|
|
Поиск числа с помощью Findimage, Готовый скрипт |
|
|
xolost |
27.2.2019, 12:47
|
Expert
Сообщений: 517
Регистрация: 17.6.2012 Группа: Пользователи Наличность: 0
Пользователь №: 15.035
|
Цитата(cirus @ 27.2.2019, 12:16) Скрипты из первого поста позволяют найти несколько чисел/слов за 1 поиск.
Замечательно, но зачем это нужно? Вот есть функция которая ищет одно число. Задаем зону для поиска - нашли. Нужно ещё число найти другое? задаем диапазон поиска для другого числа. В моем случае я обычно делал - ищу картинку, рядом с которой это число всегда, и от неё строю диапазон. Ну и всё, 1 функция для любого кол-во чисел. Просто не вижу практического смысла в таком объеме, который ничего и не выигрывает по-сути. Про сортировку да, я когда начал питон изучать, узнал что сщуестует сортировка. 1 строчкой за 0.00001 секунду тысячи данных. В пилоте на тот же объем куча строчек и несколько минут работы скрипта. Было грустно очень
|
|
|
|
FREEON |
19.5.2019, 17:17
|
Journeyman
Сообщений: 365
Регистрация: 14.2.2017 Группа: Пользователи Наличность: 1319
Пользователь №: 18.346
Возраст: 25
|
Встроил в скрипт часть кода для проверки баланса на персах, но есть ошибки в его работе... Когда этот код работает сам по себе то нормально распознает значения. Но если его встроить то сперва работает нормально, но спустя некоторое время дает неверные значение. Если число баланса состоит равно или больше из трех цифр то все четко, но если число менее 2х цифр он дает косяк и приписывает есче одну цифру с воздуха, хотя сразу работал корректно. Имена переменных и "буквы" счетчиков проверял, они не пересекаются...не знаю в чем проблема, может есть какие решения? Код log clear log mode compact log open 0 630 200 150 //--- set #obsciy 0 // переменная для подсчета общего баланса set #schet 1 // ВКЛ ВЫКЛ проверить баланс 1 - проверить, 0 - не проверять //--- if #schet = 1 set #balans 0 //переменная для подсчета(сброса) текущего баланса init_arr %image 0 1 2 3 4 5 6 7 8 9 // имена картинок set $path "D:\_UOPilot\newimage\balans\" // путь к картинкам init_arr %coord 136, 145 176, 153 // координаты "кошелька" для findimage //размер цифр 6х8 set #stepX (%coord [3] - %coord [1]) / 6 // шаг по X, ширина одной цифры-картинки 6 пикселей(отступа между ими нет) set #stepY (%coord [4] - %coord [2]) // шаг по Y не нужен т.к. одна стока set #z 0 for #q 1 size(%image) // поиск картинок set #bb findimage(%coord [1] %coord [2] %coord [3] %coord [4] ($path%image[#q].bmp) %arr 2 90 -1 3) if #bb > 0 for #w 1 size(%arr) set #z #z + 1 init_arr %temp (#z) %arr [#w 1] %arr [#w 2] %image[#q] // добавить в массив координаты и имя картинки end_for end_if end_for
for #q 1 #z // подсчёт позиции картинки на поле set #x (%temp [#q 1] - %coord [1]) / #stepX + 1 set #y (%temp [#q 2] - %coord [2]) / #stepY + 1 set %field [#y #x] %temp [#q 3] // имя картинки в нужный элемент массива end_for set #balans %field [1] //вывести текущее состояние счета set #obsciy #obsciy + #balans //подсчет общего счета log На счету #balans баленов. log ОБЩИЙ БАЛАНС: #obsciy end_if end_script
|
|
|
|
Automaton |
19.12.2019, 15:38
|
Neophyte
Сообщений: 47
Регистрация: 18.12.2019 Группа: Пользователи Наличность: 0
Пользователь №: 19.472
Возраст: 27
|
Cirus, настроил в вашем варианте очень маленький диапазон поиска цифр: init_arr %GetImage (1) 949 269 1004 289 а выдал он цифр во всплывающем окошке, гораздо больше чем там в действительности: скрин области и результата
Картинки с цифрами 5х8 пикселей, настройки в скрипте такие: Настройки скрипта
set linedelay 0 init_arr %picture 0 1 2 3 4 5 6 7 8 9 // имена картинок (0.bmp, 1.bmp и т. д.) init_arr %symbol 0 1 2 3 4 5 6 7 8 9 // символ соответствующий имени, т. е. картинка 0.bmp соответствует 0 set $path "C:\UO Pilot" // папка с картинками set $bmp "*.bmp*" // формат картинок set #deltaY 8 // расстояние между строками (можно указать высоту картинок) set #deltaspace 12 // допустимое расстояние между цифрами, иначе будет считаться что это не одно число set #accuracy 90 // точность поиска для Findimage set #deviation 6 // погрешность оттенка для Findimage set #wait 2 // пауза между поиском картинок, если указать меньше искать будет быстрее, но нагрузит процессор set #timeproc 2000 // время (в мсек) для поиска картинок, если 0 не выйдет из процедуры пока не найдётся хотя бы 1 картинка set #repeatimage 2 // допустимое смещение координат, если используется несколько видов одной картинки
|
|
|
|
apaul |
19.9.2021, 20:52
|
Neophyte
Сообщений: 36
Регистрация: 19.8.2021 Группа: Пользователи Наличность: 0
Пользователь №: 20.051
|
Добрый день. А можно попросить боевой рабочий пример использования этого скрипта в варианте lua? А то что-то с циферками из блокнота не выходит - плюется в меня рантайм-еррором (IMG: style_emoticons/default/sad.gif). На всякий случай цепляю тестовый шот из блокнота и вырезанные оттуда циферки.
test.zip ( 43,35 килобайт )
Кол-во скачиваний: 419
|
|
|
|
apaul |
18.10.2021, 1:52
|
Neophyte
Сообщений: 36
Регистрация: 19.8.2021 Группа: Пользователи Наличность: 0
Пользователь №: 20.051
|
Цитата(DarkMaster @ 22.9.2021, 15:37) Можно ваш вызов увидеть?
Не дает мне покоя столь удобная функция, уж очень не охота изобретать свой велосипед (IMG: style_emoticons/default/unsure.gif) Падать вроде перестала, но и работать как дОлжно отказывается. Вот такой вызов: Код local sy = { ["0"] = {"0a"}, ["1"] = {"1a"}, } local pa="test\\" local cr={674, 421, 709, 443} local t = imageToString. get{symbols=sy,path=pa,crds=cr,accuracy=80,deviation=8,deltaSpace=1,toNumber=0,d urationMax=0} log(#t, t[1][1])
На экране в заданных координатах присутствует цифра 10. Но функция упорно отказывается искать более 1 символа. Если в symbols лежат обе цифры - ищется первая "1", если убираем из symbols "1", то ищется "0". Как уговорить его искать все цифры, дабы увидеть на выходе "10"? Что я упустил?
|
|
|
|
Cockney |
24.11.2022, 23:11
|
Master
Сообщений: 1.395
Регистрация: 22.6.2013 Группа: Пользователи Наличность: 21060
Пользователь №: 16.156
|
Цитата(DarkMaster @ 24.11.2022, 17:04) Планы были и есть теоретически есть, со временем проблемы. Даже продумывал, как все это реализовать красиво. Были мысли прикручивать OCR. Там проблемы откроваенные. 10 раз норм наспознает, на 11 его переклинит и ерунду дикую выдаст. Причем результат может быть иным от, например, фона где-то в незначащем куске. Ну и OCR откровенный тормоз. Тут даже на старом имидже намного быстрее.
ты видимо про какое-то готовое решение, а я про самописное. готовое слишком унифицировано, поэтому и медленно. а своя поделка - внутри простой статистический аппарат, который +- быстро по статистике определит символ на любом почти фоне
|
|
|
|
|
|
2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0
|
|