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

11 страниц V  1 2 3 > »   
Ответить в эту темуОткрыть новую тему
> Поиск числа с помощью Findimage, Готовый скрипт
cirus
сообщение 14.12.2016, 13:25
Сообщение #1


**********

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



Данный скрипт предназначен для распознавания чисел, текста и различных символов (например, значков серебра, голда).
Есть 2 версии скрипта: одна на языке пилота, вторая на языке lua.

Версия 1 (на языке пилота):

Минимальная версия пилота 2.39. Запускать от администратора.
Поиск числа с помощью Findimage 4.0 (на языке пилота)
Код
// Поиск числа с помощью FindImage
init_arr %GetImage (1) 0 0 245, 98      // координаты для поиска, StartX StartY EndX EndY

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:\Image3"                     // папка с картинками
set $bmp "*.bmp*"                           // формат картинок
set #deltaY 8                               // расстояние между строками (можно указать высоту картинок)
set #deltaspace 12                          // допустимое расстояние между цифрами, иначе будет считаться что это не одно число
set #accuracy 90                            // точность поиска для Findimage
set #deviation 3                            // погрешность оттенка  для Findimage
set #wait 2                                 // пауза между поиском картинок, если указать меньше искать будет быстрее, но нагрузит процессор
set #timeproc 2000                          // время (в мсек) для поиска картинок, если 0 не выйдет из процедуры пока не найдётся хотя бы 1 картинка
set #repeatimage 2                          // допустимое смещение координат, если используется несколько видов одной картинки

dir (%path $path $bmp)
set delimiter '   '
while 1 = 1
    set size(%result)                        // уничтожить массив с предыдущими результатами
    set size(%coord)                         // уничтожить массив с предыдущими координатами
    call test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage    // процедура поиска
//     save_array %result C:\Users\abc\Desktop\result111.txt     // массив с результатами поиска
//     save_array %coord C:\Users\abc\Desktop\coord111.txt     // массив с координатами чисел
    if  size(%result) > 0         // если размер массива больше 0
        // ТУТ НУЖНЫЕ ДЕЙСТВИЯ
        ///////////// для примера вывод в hint того что нашлось (можно убрать)
        set $str
        set %z [1] \n
        for #i 1 size(%result)
            set $str $str%result[#i]
            if  #i != size(%result)
                set $str $str%z [1]
            end_if
        end_for
        hint (14 clBlue 409, 265 ($str))
        /////////////
    else
        hint Картинки не найдены
    end_if
end_while

// процедура поиска и сортировки
proc test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc #repeatimage
    set #GetStartX %GetImage [1 1]
    set #GetStartY %GetImage [1 2]
    set #GetEndX %GetImage [1 3]
    set #GetEndY %GetImage [1 4]
    set #current_script current_script
    // загрузка картинок в память
    if  size(%path) > 0                  // если картинки найдены
        for #i 1 size(%path)
            for #j 1 size(%picture)
                if  %path [#i 3] = %picture [#j]
                    set #n #n + 1
                    set %image [#n] LoadImage(%path [#i 1])
                    set %number [#n] %symbol [#j]
                    break
                end_if
            end_for
        end_for
    else
        log Картинки в: $path   не найдены
        log Скрипт остановлен
        stop_script #current_script
    end_if
    // поиск картинок и их сортировка
    set size(%result1)
    set size(%coord_tmp)
    while size(%result1) = 0 and (#timeproc > timer or #timeproc = 0)
        set #z 0
        set %get GetImage(#GetStartX #GetStartY #GetEndX #GetEndY)      // сохранить часть экрана в память
        set #v %get [1 1]
        for #i 1 size(%number)
            set #a Findimage(0 0 %get [1 2] %get [1 3] (%image[#i 1]) %a #v #accuracy -1 #deviation)   // поиск
            if  #a < 0
                log Ошибка поиска картинки. Код ошибки: #a
                log Скрипт остановлен
                stop_script #current_script
            end_if
            if  #a > 0
                for #j 1 size(%a)
                    set #z #z + 1
                    init_arr %result1 (1 1 #z) %number[#i] %a[#j 1] %a[#j 2]   // запись результатов поиска в массив
                end_for
            end_if
            wait #wait
        end_for
        if  size(%result1) > 0
            gosub sortY        // сортировка по Y и X
        end_if
        set $b DeleteImage(%get[1 1])    // удалить изображение, полученное GetImage
    end_while
    goto end                 // выйти из процедуры

    :sortY
    ///// удаление повторных координат, если используется несколько видов одной картинки
        set #size 0
        set %tmp %result1
        set size(%result1)
        for #i 1 size(%tmp[1])
            set #break 0
            for #n 1 #size
                set #xrepeat %tmp[2 #i] - %result1[2 #n]
                set #yrepeat %tmp[3 #i] - %result1[3 #n]
                if  abs(#xrepeat) <= #repeatimage and abs(#yrepeat) <= #repeatimage
                    set #break 1
                    break
                end_if
            end_for
            if  #break = 0
                set #size #size + 1
                init_arr %result1 (1 1 #size) %tmp [1 #i]  %tmp [2 #i] %tmp [3 #i]
            end_if
        end_for
     ///////

        set #z 0
        set #z1 0
        set #z2 1
        set #z4 0
        sort_array %result1 -3
        while 1 = 1
            set #z 0
            set size(%tmp)
            for #i #z2 eval(size(%result1 [1]) - 1)
                set #j #i + 1
                set #x %result1 [3 #i] - %result1 [3 #j]
                if  abs(#x) < #deltaY
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #i]  %result1 [2 #i] %result1 [3 #i]
                else
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #i]  %result1 [2 #i] %result1 [3 #i]
                    break
                end_if
            end_for
            set #z2 #z2 + #z
            if  #z2 = size(%result1[])
                set #x %result1 [3 #i] - %result1 [3 #j]
                if  abs(#x) > #deltaY
                    set #jj #j
                    sort_array %tmp -2
                    set #z1 #z1 + 1
                    init_arr %result (#z1) %tmp [1]
                    set %coord_tmp [#z1] %tmp [2 1], %tmp [3 1]
                    set %coord.#current_script [#z1] %tmp [2 #z], %tmp [3 #z]
                    gosub space
                    set size(%tmp)
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #jj]  %result1 [2 #jj] %result1 [3 #jj]
                    set #z1 #z1 + 1
                    set %result.#current_script [#z1] %tmp [1]
                    set %coord.#current_script [#z1] %tmp [2 #z], %tmp [3 #z]
                    gosub end
                end_if
                set #z #z + 1
                init_arr %tmp (1 1 #z) %result1 [1 #j]  %result1 [2 #j] %result1 [3 #j]
                sort_array %tmp -2
                set #z1 #z1 + 1
                init_arr %result (#z1) %tmp [1]
                set %coord_tmp [#z1] %tmp [2 1], %tmp [3 1]
                gosub space
                break
            else
                sort_array %tmp -2
                set #z1 #z1 + 1
                init_arr %result (#z1) %tmp [1]
                set %coord_tmp [#z1] %tmp [2 1], %tmp [3 1]
                gosub space
            end_if
        end_while
    return

    :space
        set #z3 0
        set size(%space)
        set #z4 #z4 + 1
        //посчитать где нужны пробелы
        for #i 1 eval(size(%tmp[]) - 1)
            set #j #i + 1
            set #space  %tmp [2 #i] - %tmp [2 #j]
            if  abs(#space) > #deltaspace
                set #z3 #z3 + 1
                set %space[#z3] #j
                set #size_coord 1
                while %coord_tmp[#z1 #size_coord] != ""
                    set #size_coord #size_coord + 1
                end_while
                set %coord_tmp [#z1 #size_coord] %tmp [2 #j], %tmp [3 #j]
            end_if
        end_for
        // вставить пробелы
        for #i 1 size(%space)
            set $str %result [#z4]
            set $str insert(" " $str %space[#i])
            set #j #i + 1
            set %space[#j] %space[#j] + #i
            set %result [#z4] $str
        end_for
        // сохранение массива в основном скрипте
        for #i 1 size(%result)
            set size(%tmp1)
            init_arr %tmp1 (1) %result [#i]
            for #j 1 size(%tmp1[1])
                set %result.#current_script [#i #j] %tmp1 [1 #j]
                set %coord.#current_script [#i #j] %coord_tmp [#i #j]
            end_for
        end_for
    return

    :end
end_proc

Результат поиска
Код
%result [1 1] - первая строка, первое число    %coord [1 1] - координаты числа
%result [1 2] - первая строка, второе число    %coord [1 2] - координаты числа
%result [2 1] - вторая строка, первое число    %coord [2 1] - координаты числа

Видео работы скрипта


Версия 2 (на языке lua):

Функция
Прикрепленный файл  FindString.lua ( 45,96 килобайт ) Кол-во скачиваний: 733

Мануал
Автор скрипта DarkMaster.
Вопросы, баги, предложения на форум
в специальную тему по этому скрипту
https://forum.uokit.com/index.php?showtopic=30000

Мануал по использованию:

Данный скрипт предназначен для распознавания чисел,
текста и различных символов (например, значков серебра, голда).
Скрипт учитывает возможные пробелы и переносы строк.
Параметры в квадратных [] скобках являются не обязательными,
параметры в угловых скобках <> указываются всегда.
Квадратные и фигурные скобки при вызове функций не пишутся,
они лишь указывают на возможность не задавать параметр.
Фигурные {} и круглые () скобки пишутся там, где указаны.
Символ '|' означает исключающее или, например, sub=0|1 означает,
что значение sub может быть равно либо 0, либо 1.

Для удобства использования необходимо
сохранить скрипт в отдельный файл
и подгружать в начале вашего скрипта:
imageToString = require("luaPlugins\\FindString")
Вызов данной команды загрузит модуль
FindString.lua из папки luaPlugins,
расположенной рядом с пилотом.
Т.е. "luaPlugins\FindString.lua"


Скрипт включает в себя следующие функции:

Управление буфером:
Добавление изображения в буфер (вернет адрес):
imageToString.bufferAdd(<путь>,

Получение адреса в памяти загруженного в буфер изображения:
imageToString.bufferGet(<путь>)[адрес])

Удаление изображения из буфера:
imageToString.bufferDelete(<путь>)

Полная очистка буфера:
imageToString.bufferFlush()


Получение текста из изображения:
t = imageToString.get{[parms],[parms],[parms],...}
Внимание! Скобки фигурные!
Указывается либо папка либо набор символов!
[loadFolder] | [[symbols],[path],[ext]]

Полный синтаксис:
t = imageToString.get{

Параметр(все необязательные) Значение по умолчанию
window=<хендл|метод> -- workwindow()
loadFolder={<path="путь">, [mask="маска"], [sub=0|1]} -- nil
symbols={"0", "1", ["2"] = {"two", "second"}, "3"} -- {["1"]={"1"}, ["2"]={"2"}, ["3"]={"3"}, ["4"]={"4"}, ["5"]={"5"},
-- ["6"]={"6"}, ["7"]={"7"}, ["8"]={"8"}, ["9"]={"9"}, ["0"]={"0"}}
path=<"путь"> -- "images\\"
ext=<"расширение"> -- "*.bmp"
crds={<xStart>, <yStart>, <xEnd>, <yEnd>, [abs=0|1]} -- размер окна (workwindow(), если окно явно не указано), если не задано - рабочего стола.
accuracy=<число> -- 95
deviation=<число> -- 2
deltaSpace=<число> -- 2
deltaY=<число> -- 8
dupImage=<число> -- 3
toNumber=<0|1> -- 1
source={<address>, <width>, <height>} -- nil
saveImage=<"путь"> -- nil
wait=<число> -- 2
durationMax=<число> -- 0
secondFrame=<число> -- 0
bufferAddNew=<0|1> -- 1
bufferUpdate=<0|1> -- 0
bufferIgnore=<0|1> -- 0
}


Результат при поиске текста:

t = imageToString.get{[parms],[parms],[parms],...}
Функция возвращает двумерную таблицу,
где первый индекс является номером строки,
второй номером слова.
Если ничего не найдет, вернет nil.
Например, при распознавании текста:

Съешь еще
этих
мягких французских булок.

Массив будет содержать следующие значения:
t[1][1] -- Съешь
t[1][2] -- еще
t[2][1] -- этих
t[3][1] -- мягких
t[3][2] -- французских
t[3][3] -- булок


Параметры при поиске текста:

Данный оператор имеет большое количество возможных параметров,
все они являются необязательными.
В теле скрипта есть блок значений
параметров, используемых по умолчанию,
которые вы при желании можете изменить (таблица default).

window=<хендл|метод>
Хендл окна в котором происходит поиск либо метод 1|2.
Поиск в перекрытых окнах происходит только при указании хендла.
При указании хендла для корректного считывания изображения может
понадобиться указывать хендл родительского окна.
Значение по умолчанию: workwindow().

loadFolder={<path="путь">, [mask="маска"], [sub=0|1]}
Загрузка всех изображений из указанной папки.
Имена файлов должны соответствовать символу
который они означают (расширение не учитывается).
Допускаются файлы с одинаковым именем в разных папках.
<path="путь"> - абсолютный путь по которому находится папка.
Для преобразования относительного пути в абсолютный можно
использовать конструкцию: path=homepath() .. "относительный путь".
[mask="маска"] - маска по которой будут загружены файлы.
Допускается использование символов '?' и '*'.
? - означает один любой символ,
* - любое количество неизвестных символов.
Обратите внимание, что mask=".bmp" означает
точное совпадение полного имени файла с указанной маской,
т.к. символы подстановки не использованы.
Если же указать mask="*.bmp",
то будут загружены все файлы, заканчивающиеся сочетанием ".bmp".
Значение по умолчанию: "*.bmp".
[sub=0|1] - флаг, указывающий на загрузку изображений,
в том числе из подпапок.
При указании loadFolder будут проигнорированы параметры:
symbols, path, ext.
Значение по умолчанию: nil.

symbols={}
Символы для поиска.
Набор символов возможно указать в двух вариантах синтаксиса:
упрощенном и полном.
Упрощенный вариант синтаксиса допускает не указывать
соответствие имен файлов и строке/символу,
который они обозначают: считается, что они идентичны.
Пример упрощенного синтаксиса:
symbols = {"0", "1", "2", "3", "a", "b", "c", "test"}
Полный синтаксис бывает необходим при использовании нескольких
изображений, соответствующих одной и той же строке/символу.
Допускаются переносы строк:
symbols = {
["0"] = {"zero1", "zero2"},
["1"] = {"1a", "1b"},
["2"] = {"two", "second"}
}
Оба варианта синтаксиса можно сочетать:
symbols = {"0", "1", ["2"] = {"two", "second"}, "3"}
Данный параметр игнорируется,
если указана загрузка папки (loadFolder).
Значение по умолчанию:
{["1"]={"1"}, ["2"]={"2"}, ["3"]={"3"}, ["4"]={"4"}, ["5"]={"5"},
["6"]={"6"}, ["7"]={"7"}, ["8"]={"8"}, ["9"]={"9"}, ["0"]={"0"}}

path=<"путь">
Путь, по которому находятся изображения, указанные в symbols.
Путь может быть задан относительным или абсолютным.
Данный параметр игнорируется,
если указана загрузка папки (loadFolder).
Все символы '\' должны быть удвоены (escape-последовательность).
Пример:
path="c:\\image.bmp"
Если путь будет начинаться с символа '\',
то он будет восприниматься относительно корня диска.
Пример:
Если пилот находится по адресу d:\uopilot\uopilot.exe,
то параметр path="\\myFolder"
будет указывать на папку d:\myFolder.
Значение по умолчанию: "images\\".
Это относительный путь, указывающий на папку images,
которая находится рядом с .exe пилота (создается пользователем).

ext=<"расширение">
Расширение картинок, указанных в symbols.
Данный параметр игнорируется,
если указана загрузка папки (loadFolder).
Значение по умолчанию: ".bmp".

crds={<xStart>, <yStart>, <xEnd>, <yEnd>, [abs=0|1]}
Координаты, в которых необходимо производить поиск.
При указании флага abs=1 координаты будут считаться
относительно левого верхнего угла экрана,
в противном случае координаты рассчитываются
относительно левого верхнего угла приложения.
Значение по умолчанию:
размер окна с которым работает функция и относитльные координаты,
если окно не указано и привязка плиота отсутствует, то
используется разрешение рабочего стола и абсолютные координаты.

accuracy=<число>
Точность поиска изображений.
Для текста рекомендуется указывать 95-100.
Значение по умолчанию: 95.

deviation=<число>
Допустимое отклонение оттенка в процентах (255/100*deviation).
Если цвет 50 100 150, то при указании deviation=2
допустимыми значениями будут являться 44-55 94-105 144-155.
Дробная часть при вычислении диапазона
не округляется, а отбрасывается.
Значение по умолчанию: 2.

deltaSpace=<число>
Допустимое расстояние по горизонтали между изображениями.
Если значение превышено считается,
что началось новое слово (присутствует пробел).
Значение по умолчанию: 2.

deltaY=<число>
Смещение по высоте при превышении которого считается,
что символы принадлежат к разным строкам.
Значение по умолчанию: 5.

dupImage=<число>
Смещение, при котором два найденных изображения
будут считаться дубликатом одного.
Значение по умолчанию: 3.

symbolPrio={symbol_1, symbol_2, symbol_3, ...}
Устатнавливает приоритет удаления дублей.
Часть симоволов может содержаться в других символах.
Например при распозновании "Q" очень велика вероятность,
что будет надена буква Q и буква O, аналогично в парах:
7 и 1, 4 и 1 и т.д.
Приоритет определяется позицией символа в массиве,
чем меньше индекс, тем выше приоритет.
Например: {"q", "o", "7", "4", "1"}
заменит О на Q, 1 на 4, 4 на 7 и т.д.,
если они обнаружены в пределах области
считающейся дублями.
Для выключения использовать: {}
Значение по умолчанию: {"q", "o", "7", "4", "1"}

toNumber=<0|1>
Флаг, при котором слова, состоящие только из цифр
будут преобразованы из строки в числовой тип данных.
Это необходимо для арифметических действий, а также
для сравнения чисел.
Значение по умолчанию: 1.

source={<address>, <width>, <height>}
Источник загруженного в память изображения
в котором производить поиск.
<address> - адрес в памяти
<width> - ширина изображения
<height> - высота изображения
Изображение возможно загрузить в память при помощи
getimage() или loadimage().
Значение по умолчанию: nil.

saveImage=<"путь">
Путь, по которому будет сохранено изображение
в котором происходил поиск.
Значение по умолчанию: nil.

wait=<число>
Пауза в миллисекундах (1000мс=1сек) между поиском изображений.
Используется для снижения нагрузки на процессор
ценой увеличения времени поиска.
Значение по умолчанию: 2.

durationMax=<число>
Время в течении которого будут происходить
повторные попытки найти изображение.
Значение может быть дробным, например:
durationMax=2.5.
При указании durationMax=-1 поиск будет происходить
бесконечно до тех пор, пока изображение не будет найдено.
Если первое изображение было найдено,
то остальные будут обработаны полностью
вне зависимости от таймера,
т.е. вы не получите обрезанный текст.
При первом успешном распознавании текста функция завершит работу
и передаст результат, не дожидаясь окончания таймера.
Значение по умолчанию: 0.

secondFrame=<число>
Параметр позволяет задать паузу между
первым нахождением изображения и началом
считывания изображений для распознавания текста.
Позволяет дождаться полной прогрузки
текста перед обработкой.
Обратите внимание, что параметр durationMax учитывает значение
secondFrame и не позволит функции работать дольше,
чем указано в durationMax. Значение по умолчанию:0.

bufferAddNew=<0|1>
Флаг разрешающий добавлять в память буфера изображения,
которые отсутствовали в буфере и были считаны с диска.
Данный параметр игнорируется,
если указан bufferIgnore=1.
Значение по умолчанию: 1.

bufferUpdate=<0|1>
Флаг указывающий на то,
что изображения в буфере должны быть обновлены.
Они будут считаны с диска заново.
Обновятся только те изображения,
которые будут участвовать в поиске.
Данный параметр игнорируется, если указан bufferIgnore=1.
Значение по умолчанию: 0.

bufferIgnore=<0|1>
Флаг, запрещающий работать с буфером.
Данный из буфера считаны не будут,
загрузка искомых изображений произойдет с диска.
Никаких данных в буфер не сохраняется.
Значение по умолчанию: 0.


Пример вызова:
local cell = fs.get{
loadFolder = {path = "image\\comeback", mask="*"},
crds ={x*254, y*36, 108+x*254, 17+y*36},
deltaSpace = 10
}

Если в области для распознования содержатся посторонние данные,
то может быть полезено вызвать функцию несколько раз с областями
непосредственно содержащими данные.
Пример функции для сбора значений представленных в виде таблицы:
get_prices = function(offset_x, offset_y)
local img, w, h, l = getimage(offset_x, offset_y,
410+offset_x, 340+offset_y)
local price = {}
for x = 0, 1 do
for y = 0, 9 do
local cell = fs.get{
loadFolder = {path = "image\\comeback", mask="*"},
source = {img, w, h},
crds ={x*254, y*36, 108+x*254, 17+y*36},
deltaSpace = 10
}
if cell then
price[#price+1] = cell[1][1]
end
end
end
deleteimage(img)
return price
end

Changelog

История изменений:

1.0.9
Добавлено: установление приоритетов символов при удалении дублей. 4 и 1 - будет удалено 1, O и Q удалено O и т.д.
Добавлено: пример вызова, пример для сбора табличных данных.
Фикс: исправлены проблемы findimage пилота при поиске в уже загруженном изображении (getimage/loadimage)

1.0.8
Фикс: Убраны кавычки из пути при loadFolder. В связи с апдейтом пилота и фиксом функции dir этого более не требуется(приводит к битым путям).
Фикс: В связи с отправкой в мусорку crystalLua убраны костыли в виде доп параметра в управлении буфером. Приветствуем luajit!
Фикс: При одновременном использовании secondFrame и абсолютных координат область поиска предварительного обнаружения изображения могла быть искажена.
Фикс: В связи с правками в пилоте убран старый синтаксис передачи параметров в findimage стрингом. Теперь параметры передаются без дополнительных конвертаций и вынужденных глобальных переменных. Небольшое увеличение производительности.
Фикс: В связи с правками в пилоте убрано преобразование возвращаемых координат из строки в число. Небольшое увеличение производительности.
Фикс: В связи с правками в пилоте окно по умолчанию теперь задается функций workwindow(), а не строкой и не зарезервированной переменной.
Фикс: Исправлено описание функций. workwindow и homepath в пилоте теперь функции - workwindow() и homepath().
Добавлено: Значение по умолчанию теперь изменено с фиксированного 0, 0, 1919, 1079, abs=0 на динамическое: используется размер окна с которым идет работа(по умолчанию workwinodow()), если окно не указано и привязка пилота отсутствует, то используется разрешение рабочего стола и абсолютные координаты.
Изменено: значение по умолчанию deltaY с 8 до 5.
Рефакторинг: В связи с правками в пилоте убраны костыли для обхода бага с координатами поиска (начальные нельзя было задать отличные от нуля, после поиска происходил отсев). Небольшое повышение производительности.
Рефакторинг: В связи с правками в пилоте убрано добавление пробела перед флгом рекурсии при получении списка файлов для loadFolder. Переработана инициализация параметра. Синтаксис и результат не изменился.
Рефакторинг: переработана инициализация параметра symbols. Синтаксис и результат не изменился.
Рефакторинг: переработана инициализация параметра crds.abs. Синтаксис и результат не изменился.

1.0.7
Фикс: убрано принудительное преобразование строк в числа - игнорировалась опция toNumber=<0|1>.

1.0.6
Правки орфографии, пунктуации в описании.

1.0.5
Фикс: убраны сообщения отладки в лог.
Добавлено: imageToString.buffer.add теперь возвращает адрес загруженного изображения.

1.0.4
Фикс: добавлен набор костылей для адекватной передачи параметров при вызове функций буфера.
Добавлено: опция toNumber для преобразования строк в числа.

1.0
Фикс: при передаче источника изображения (source) игнорировались координаты поиска.
Изменено: timeProc переименован в durationMax.
Изменено: глобальная переменная, которую необходимо использовать из-за проблем финдимиджа переименована из tmp в tmpOtNiAotNiaorNCOsnaOT.

Фикс: загрузка файлов из папки теперь различает папки и файлы и больше не пытается загрузить папку, как изображение.
Изменено: конечные координаты области поиска равняются (ширина - 1) и (высота - 1) от забранного изображения. (отсчет с нуля)

Фикс: имена функций буфера.
Добавлено: возможность помещать в буфер изображения с диска.
Добавлено: возможность считать адрес в памяти буферизированного изображения.
Изменено: параметр abs теперь задается внутри crds{}

Фикс: символы по умолчанию больше не переписываются, сделано корректное копирование массива.

Фикс: флаг чтения подпапок был инвертирован.
Фикс: secondFrameTimeout больше не глобальная и используется по назначению.
Фикс: При default.durationMax = -1 и default.secondFrame > 0 не выходит преждевременно из функции.
Фикс: Почистил отладочные выводы в лог.
Добавлено: сохранение изображение в котором происходил поиск.

Баг: из-за особенностей костыля финдимиджа создается НЕ локальная переменная tmp.
Фикс: изображение не добавлялось в буфер.
Фикс: расчет пробела от конечной х координаты.
Фикс: очистка буфера после захвата изображения.
Фикс: область поиска при источнике из getimage должна быть с нуля.
Фикс: искалось только одно изображение из-за недостающего вложенного цикла.
Фикс: буфер теперь действительно буферизует.
Переработано преобразование из упрощенного синтаксиса в полноценный. Добавлена защита от дурака (типы данных).
Добавлено: загрузка папки с изображениями.
Добавлено: ожидание прогрузки изображений (options.secondFrame).
Добавлено: чтение из буфера.


Сообщение отредактировал DarkMaster - 24.11.2022, 9:00
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 15.12.2016, 18:53
Сообщение #2


***********

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



версию лучше прилепить.


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


**********

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



Добавил в первый пост вторую версию скрипта.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 26.3.2017, 15:58
Сообщение #4


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Ух ты, а какие примерно картинки должны быть? Что в них нарисовано? Просто цифры на белом фоне?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 26.3.2017, 16:11
Сообщение #5


**********

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



Цитата
а какие примерно картинки должны быть? Что в них нарисовано? Просто цифры на белом фоне?

Просто картинки циферок вырезаете. Я тестил скрипт в блокноте, лучше сделать свои картинки, эти могут не находится: Прикрепленный файл  ЧислаИзБлокнотаWin10.zip ( 2,57 килобайт ) Кол-во скачиваний: 4933

Для l2 нужно было фон закрашивать, т. к. он не статичен: Прикрепленный файл  l2.zip ( 4,57 килобайт ) Кол-во скачиваний: 4969
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 26.3.2017, 16:17
Сообщение #6


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Цитата(cirus @ 26.3.2017, 16:11) *

Просто картинки циферок вырезаете. Я тестил скрипт в блокноте, лучше сделать свои картинки, эти могут не находится: Прикрепленный файл  ЧислаИзБлокнотаWin10.zip ( 2,57 килобайт ) Кол-во скачиваний: 4933

Для l2 нужно было фон закрашивать, т. к. он не статичен: Прикрепленный файл  l2.zip ( 4,57 килобайт ) Кол-во скачиваний: 4969



Фон на картинке важен?
Просто в справке пилота:
Формат картинки должен быть: bmp 24 бита.
Цвет крайнего пикселя в левом верхнем углу изображения считается "цветом фона", и при поиске картинки на экране не учитывается.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 26.3.2017, 16:19
Сообщение #7


***********

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



Цитата
Ух ты, а какие примерно картинки должны быть? Что в них нарисовано? Просто цифры на белом фоне?

Зависит от того нужно ли вам учитывать фон. Если числа будут на прозрачном фоне, то нужно будет сделать доп обработку изображения закрасив весь фон и левый верхний пиксель в один цвет(любой не совпадающий с цветом цифры). Если фон статичен, то достаточно просто перекрасить левый верхний пиксель.


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


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Спасибо суперский скрипт, работает отлично.
Только как сделать чтобы результат найденный был таким, что если найдена 0, то она заменялась на 00.
Если найдена 1, то заменить на 01.
0=00
1=01
2=02
3=03
4=04
5=05
6=06
7=07
8=08
9=09

допустим число результата
0 2 70
нужно чтобы преобразовалось в
00 02 70
и потом нужно чтобы преобразовалось в
000270
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 26.3.2017, 17:53
Сообщение #9


**********

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



код
Код
///////// начало скрипта  //////////
init_arr %GetImage (1) 0 0 129, 78     // координаты для поиска, StartX StartY EndX EndY

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:\Number"                     // папка с картинками
set $bmp "*.bmp*"                           // формат картинок
set #deltaY 8                               // расстояние между строками (можно указать высоту картинок)
set #deltaspace 12                          // допустимое расстояние между цифрами, иначе будет считаться что это не одно число
set #accuracy 90                            // точность поиска для Findimage
set #deviation 3                            // погрешность оттенка  для Findimage
set #wait 2                                 // пауза между поиском картинок, если указать меньше искать будет быстрее, но нагрузит процессор
set #timeproc 2000                          // время (в мсек) для поиска картинок, если 0 не выйдет из процедуры пока не найдётся хотя бы 1 картинка

dir (%path $path $bmp)
////////////////////


// тут нужные действия

// поиск чисел
set size(%result)                        // уничтожить массив с предыдущими результатами
call test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc     // процедура поиска
if  size(%result) > 0         // если число найдено

    ///// замена 0,1,2...на 00,01,02..
    for #i 1 3
        for #j 0 eval(size(%symbol) - 1)
            if  %result [1 #i] = #j
                set %result [1 #i] 0#j
            end_if
        end_for
    end_for
    /////

end_if
log %result [1]

// тут нужные действия
end_script


// саму процедуру в конец скрипта
proc test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc
    set #GetStartX %GetImage [1 1]
    set #GetStartY %GetImage [1 2]
    set #GetEndX %GetImage [1 3]
    set #GetEndY %GetImage [1 4]
    set #current_script current_script
    // загрузка картинок в память
    if  size(%path) > 0                  // если картинки найдены
        for #i 1 size(%path)
            for #j 1 size(%picture)
                if  %path [#i 3] = %picture [#j]
                    set #n #n + 1
                    set %image [#n] LoadImage(%path [#i 1])
                    set %number [#n] %symbol [#j]
                    break
                end_if
            end_for
        end_for
    else
        log Картинки в: $path   не найдены
        log Скрипт остановлен
        stop_script #current_script
    end_if
    // поиск картинок и их сортировка
    set size(%result1)
    while size(%result1) = 0 and (#timeproc > timer or #timeproc = 0)
        set #z 0
        set %get GetImage(#GetStartX #GetStartY #GetEndX #GetEndY)      // сохранить часть экрана в память
        set #v %get [1 1]
        for #i 1 size(%number)
            set #a Findimage(0 0 %get [1 2] %get [1 3] (%image[#i 1]) %a #v #accuracy -1 #deviation)   // поиск
            if  #a < 0
                log Ошибка поиска картинки. Код ошибки: #a
                log Скрипт остановлен
                stop_script #current_script
            end_if
            if  #a > 0
                for #j 1 size(%a)
                    set #z #z + 1
                    init_arr %result1 (1 1 #z) %number[#i] %a[#j 1] %a[#j 2]   // запись результатов поиска в массив
                end_for
            end_if
            wait #wait
        end_for
        if  size(%result1) > 0
            gosub sortY        // сортировка по Y и X
        end_if
        set $b DeleteImage(%get[1 1])    // удалить изображение, полученное GetImage
    end_while
    goto end                 // выйти из процедуры

    :sortY
        set #z 0
        set #z1 0
        set #z2 1
        set #z4 0
        sort_array %result1 -3
        while 1 = 1
            set #z 0
            set size(%tmp)
            for #i #z2 eval(size(%result1 [1]) - 1)
                set #j #i + 1
                set #x %result1 [3 #i] - %result1 [3 #j]
                if  abs(#x) < #deltaY
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #i]  %result1 [2 #i] %result1 [3 #i]
                else
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #i]  %result1 [2 #i] %result1 [3 #i]
                    break
                end_if
            end_for
            set #z2 #z2 + #z
            if  #z2 = size(%result1[])
                set #x %result1 [3 #i] - %result1 [3 #j]
                if  abs(#x) > #deltaY
                    set #jj #j
                    sort_array %tmp -2
                    set #z1 #z1 + 1
                    init_arr %result (#z1) %tmp [1]
                    gosub space
                    set size(%tmp)
                    set #z #z + 1
                    init_arr %tmp (1 1 #z) %result1 [1 #jj]  %result1 [2 #jj] %result1 [3 #jj]
                    set #z1 #z1 + 1
                    set %result.#current_script [#z1] %tmp [1]
                    gosub end
                end_if
                set #z #z + 1
                init_arr %tmp (1 1 #z) %result1 [1 #j]  %result1 [2 #j] %result1 [3 #j]
                sort_array %tmp -2
                set #z1 #z1 + 1
                init_arr %result (#z1) %tmp [1]
                gosub space
                break
            else
                sort_array %tmp -2
                set #z1 #z1 + 1
                init_arr %result (#z1) %tmp [1]
                gosub space
            end_if
        end_while
    return

    :space
        set #z3 0
        set size(%space)
        set #z4 #z4 + 1
        //посчитать где нужны пробелы
        for #i 1 eval(size(%tmp[]) - 1)
            set #j #i + 1
            set #space  %tmp [2 #i] - %tmp [2 #j]
            if  abs(#space) > #deltaspace
                set #z3 #z3 + 1
                set %space[#z3] #j
            end_if
        end_for
        // вставить пробелы
        for #i 1 size(%space)
            set $str %result [#z4]
            set $str insert(" " $str %space[#i])
            set #j #i + 1
            set %space[#j] %space[#j] + #i
            set %result [#z4] $str
        end_for
        // сохранение массива в основном скрипте
        for #i 1 size(%result)
            set size(%tmp1)
            init_arr %tmp1 (1) %result [#i]
            for #j 1 size(%tmp1[1])
                set %result.#current_script [#i #j] %tmp1 [1 #j]
            end_for
        end_for
    return

    :end
end_proc
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 26.3.2017, 18:42
Сообщение #10


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Спасибо всё получилось (IMG:style_emoticons/default/smile.gif)

А есть ли в пилоте команда- возврат на предыдущий цикл или перепрыгнуть 1 цикл

:aaa
главный скрипт


goto bbb


:bbb
:ccc
:ddd
goto aaa (после прыжка на ааа, нужно вернуться на ddd)

Возможно такое?
-----------------------------------------
Либо:

:aaa
Главный скрипт
:bbb
простой скрипт 1
:ccc ----------------------- (перед началом действия скрипта ccc, нужно выполнить скрипт aaa, и снова вернуться на ccc минуя bbb)
простой скрипт 2
:ddd ------------------------- (перед началом действия скрипта ddd, нужно выполнить скрипт aaa, и снова вернуться на ddd минуя bbb и ccc)
простой скрипт 3
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 26.3.2017, 19:20
Сообщение #11


**********

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



Вопросы, не касающиеся скрипта для поиска числа, задавайте в другой теме, чтобы не засорять эту.
Используйте gosub: http://uopilot.tati.pro/index.php?title=Gosub
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 6.4.2017, 15:07
Сообщение #12


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Привет, есть такая картинка (IMG:https://i.yapx.ru/HnAf.jpg)
как видно золото серебро и медь, цифры разными цветами.
Как реализовать максимально быстрый поиск? Чтобы в итоге пилот выдал число 012665.
Может ли пилот определять цифры, если они разными цветами? или же для каждого цвета придется делать 3 отдельных поочередных поиска?

Еще проблема число бывает таким (IMG:https://i.yapx.ru/HnAg.jpg)
т.е. отсутствует число серебра например если оно равно нулю,
тут нужно чтобы пилот выдал результат 020046, вместо отсутствующего цвета числа подставлялось 00.

В итоге нужно делать 3 отдельных поиска выходит?



Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
cirus
сообщение 6.4.2017, 15:41
Сообщение #13


**********

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



Цитата
Может ли пилот определять цифры, если они разными цветами?

Нет.
Цитата
В итоге нужно делать 3 отдельных поиска выходит?

Вообще можно искать сразу все.
Код
init_arr %picture 0 1 2 3 4 5 6 7 8 9   10 11 12 13 14 15 16 17 18 19      // имена картинок (0.bmp, 1.bmp и т. д.)
init_arr %symbol 0 1 2 3 4 5 6 7 8 9   0 1 2 3 4 5 6 7 8 9     // символ соответствующий имени, т. е. картинка 0.bmp соответствует 0

Картинки 0.bmp-9.bmp для золота.
10.bmp-19.bmp для серебра.
Цитата
Еще проблема число бывает таким

В таком случае проще сделать 3 поиска. Если искать всё сразу придётся дописывать условия, что картинки серебра или ещё чего-то не найдены.
Пользователь в онлайне!Delete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 6.4.2017, 16:17
Сообщение #14


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



как правильнее реализовать 3 поиска подряд, чтоб быстрее работало?

// все в 1 массиве и папке?
// a- золто, b- серебро, c- медь

_arr %picture a0 a1 a2 a3 a4 a5 a6 a7 a8 a9 b0 b1 b2 b3 b4 b5 b6 b7 b8 b9 c0 c1 c2 c3 c4 c5 c6 c7 c8 c9
_init_arr %symbol 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9
set $path "C:\Number"

call test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #deviation #wait #timeproc // процедура поиска
----------------------------------------------------------------------------

или же перед каждым поиском менять папку с картинками?

_arr %picture 0 1 2 3 4 5 6 7 8 9
_init_arr %symbol 0 1 2 3 4 5 6 7 8 9
set $path1 "C:\NumberA" // картинки золота
set $path2 "C:\NumberB" // картинки серебра
set $path3 "C:\NumberC" // картинки меди

dir (%path1 $path1 $bmp)
dir (%path2 $path2 $bmp)
dir (%path3 $path3 $bmp)

поиск1:
call test %picture %symbol %GetImage %path1 #deltaY #deltaspace #accuracy #deviation #wait #timeproc

поиск2:
call test %picture %symbol %GetImage %path2 #deltaY #deltaspace #accuracy #deviation #wait #timeproc

поиск3:
call test %picture %symbol %GetImage %path3 #deltaY #deltaspace #accuracy #deviation #wait #timeproc
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 6.4.2017, 21:15
Сообщение #15


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



возник еще 1 вопрос))))
как выяснилось цвет цифр не статичный и постоянно меняется
(IMG:https://i.yapx.ru/Hnnv.gif)

немного удалось добиться стабильного поиска с такими данными
set #accuracy 98 // точность поиска для Findimage
set #deviation 20 // погрешность оттенка для Findimage,

но бывает все же не находит цифру...Это тоже можно решить подставив две или даже 3 картинки в папку:

init_arr %picture 0 1 2 3 4 5 6 7 8 9 0a 1a 2a 3a 4a 5a 6a 7a 8a 9a
init_arr %symbol 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9

но тут проблема образовалась, иногда находит сразу обе картинки, т.е. 3 и 3a совпадает и тогда на выходе получается не 3, а 33. Т.е 2 раза число подставляет пилот.

Собственно вопрос: как прописать, чтобы если поиск нашел 2 совпадения, то в итоге 1 число подставлял?
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 6.4.2017, 22:05
Сообщение #16


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Чуть подробнее объясню

(IMG:https://i.yapx.ru/HnyG.png) 3 картинки

init_arr %picture 0 1 1a 1b 2 3 4 5 6 7 8 9
init_arr %symbol 0 1 1 1 2 3 4 5 6 7 8 9

если поиск совпадает по всем 3 картинкам то, в итоге выйдет результат 111,
а нужно 1

Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
WKnight
сообщение 6.4.2017, 22:18
Сообщение #17


********

Разработчик UO Pilot'а
Сообщений: 1.639
Регистрация: 9.1.2006
Группа: Пользователи
Наличность: 0
Пользователь №: 4.688



Иногда помогает отключить сглаживание шрифтов.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 6.4.2017, 22:24
Сообщение #18


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



Цитата(WKnight @ 6.4.2017, 22:18) *

Иногда помогает отключить сглаживание шрифтов.

Пробовал, не помогает, в самой игре цифры переливаются если сильно увеличить это видно

есть такая опция:
[#count] - ограничение количества найденных изображений. По умолчанию установлено для одного изображения - значение 1, для всех возможных - значение -1.
но что-то она не работает.
Нужно чтобы как только поиск нашел первую картинку он сразу останавливался, а получается он без остановки перебирает всю строку
init_arr %picture 0 1 1a 1b 2 3 4 5 6 7 8 9 10 11 12 13 14 15 ......

set #accuracy 95 // точность поиска для Findimage
set #count 1
set #deviation 20 // погрешность оттенка для Findimage
set #wait 1 // пауза между поиском картинок, если указать меньше искать будет быстрее, но нагрузит процессор
set #timeproc 2000 // время (в мсек) для поиска картинок, если 0 не выйдет из процедуры пока не найдётся хотя бы 1 картинка


dir (%path $path $bmp)
set delimiter ' '
while 1 = 1
set size(%result) // уничтожить массив с предыдущими результатами
call test %picture %symbol %GetImage %path #deltaY #deltaspace #accuracy #count #deviation #wait #timeproc // процедура поиска
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
dron4938
сообщение 7.4.2017, 0:12
Сообщение #19


****

Apprentice
Сообщений: 256
Регистрация: 20.3.2017
Группа: Пользователи
Наличность: 0
Пользователь №: 18.395



разобрался)

// поиск картинок и их сортировка
set size(%result1)
while size(%result1) = 0 and (#timeproc > timer or #timeproc = 0)
set #z 0
set %get GetImage(#GetStartX #GetStartY #GetEndX #GetEndY) // сохранить часть экрана в память
set #v %get [1 1]
for #i 1 size(%number)
set #a Findimage(0 0 %get [1 2] %get [1 3] (%image[#i 1]) %a #v #accuracy -1 #deviation)

#accuracy -1 #deviation вместо -1, надо 1
кстати, а зачем -1, так же поиск будет дольше
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 7.4.2017, 0:12
Сообщение #20


***********

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



Цитата
set #accuracy 98 // точность поиска для Findimage

Это очень много в данной ситуации. Рекомендую выставить в пределах 80-90, при этом скорее всего получится чуть уменьшить deviation.


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

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

 

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