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

 
Ответить в эту темуОткрыть новую тему
> FindImage, не находит по картинке
mb6467606
сообщение 8.4.2025, 14:45
Сообщение #1


**

Neophyte
Сообщений: 10
Регистрация: 1.4.2025
Группа: Пользователи
Наличность: 2
Пользователь №: 20.943
Возраст: 21



Всем привет, сильно не ругайтесь так как я только учусь.
С помощью шаблона с вашего форума - https://forum.uokit.com/index.php?showtopic...mp;hl=Findimage
Сделал картинку и пытаюсь ее найти в игре чтоб сделать по ней клик но ничего не получается (IMG:style_emoticons/default/sad.gif)

У картинки левый верхний угол с красным пикселем
UoPilot работает от имени администратора
Windows 10 Pro
UoPilot v 2.39 ( потому что скрипт для создания картинки работает только на этой версии )
монитор 2K+второй Full HD (игра в окне 1920 1080) возможно из за этого что-то не работает


сам скрипт
Код
 // Привязка Ctrl + A на окне игры перед запуском

set #startX 0
set #startY 0
set #endX 1920
set #endY 1080

set $path "E:\screen_test\1.bmp"
set %image target

// Можно настроить смещение, чтобы клик был в центр картинки (если она 20x20)
set findoffsetx 10
set findoffsety 10

:main
set #result FindImage (#startX #startY #endX #endY ($path%image.bmp) %coords 2 80 1 5)

if #result > 0
    msg Найдена картинка в координатах X = %coords[1 1], Y = %coords[1 2]
    left %coords[1 1] %coords[1 2]    // клик по центру картинки
    wait 1000                         // подождать секунду
else
    msg Картинка не найдена
end_if

wait 3000                             // пауза 3 секунды
goto main                             // повтор поиска


Помогите кто может.
Прикрепленное изображение
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
mb6467606
сообщение 8.4.2025, 16:55
Сообщение #2


**

Neophyte
Сообщений: 10
Регистрация: 1.4.2025
Группа: Пользователи
Наличность: 2
Пользователь №: 20.943
Возраст: 21



Потестил все на ноутбуке и все так же ничего не находит, так что версия с возможной проблемой 2х мониторов отпадает.
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 8.4.2025, 18:05
Сообщение #3


***********

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



значение #result в лог выведите


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


**

Neophyte
Сообщений: 10
Регистрация: 1.4.2025
Группа: Пользователи
Наличность: 2
Пользователь №: 20.943
Возраст: 21



Цитата(DarkMaster @ 8.4.2025, 18:05) *

значение #result в лог выведите

18:30:35 2 (autosaved_2.txt, 17): msg - Значение #result: -4
18:30:37 2 (autosaved_2.txt, 24): msg - Картинка не найдена


Переделал скрипт и теперь ошибка 0, я так понимаю не находит картинку вообще

Код

// Привязка Ctrl + A на окне игры перед запуском

// Координаты области поиска (для 2K монитора)
set #startX 0
set #startY 0
set #endX 2560
set #endY 1440

// Путь к изображению
set $path "E:\screen_test\1.bmp"

// Смещение курсора при клике (если надо кликать в центр)
set findoffsetx 10
set findoffsety 10

:main

// Лог: область поиска
msg Проверка области: X = #startX:#endX, Y = #startY:#endY

// Поиск изображения (режим 2 = RGB, допуск 80%, без маски, шаг 1)
set #result FindImage (#startX #startY #endX #endY ($path) %coords 2 80 0 1)

// Лог: результат
msg Значение #result: #result

if #result > 0
    msg Найдена картинка в координатах X = %coords[1 1], Y = %coords[1 2]
    left %coords[1 1] %coords[1 2]
    wait 1000
else
    msg Картинка не найдена
end_if

wait 3000
goto main


19:01:17 4 (autosaved_4.txt, 24): msg - Значение #result: 0
19:01:29 4 (autosaved_4.txt, 31): msg - Картинка не найдена
19:01:34 4 (autosaved_4.txt, 18): msg - Проверка области: X = #startX:#endX, Y = #startY:#endY
19:01:35 4 (autosaved_4.txt, 24): msg - Значение #result: 0
19:04:13 4 (autosaved_4.txt, 18): msg - Проверка области: X = #startX:#endX, Y = #startY:#endY
19:04:15 4 (autosaved_4.txt, 24): msg - Значение #result: 0
19:04:16 4 (autosaved_4.txt, 31): msg - Картинка не найдена
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 10.4.2025, 5:08
Сообщение #5


***********

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



Привязку точно делаете?
А если координаты задать от 0 и до конца эркана найдет?


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


**

Neophyte
Сообщений: 10
Регистрация: 1.4.2025
Группа: Пользователи
Наличность: 2
Пользователь №: 20.943
Возраст: 21



Цитата(DarkMaster @ 10.4.2025, 5:08) *

Привязку точно делаете?
А если координаты задать от 0 и до конца эркана найдет?

привязку конечно делаю
как задать от 0 до конца экрана на совсем понимаю как это сделать
это разве не от 0 до конца экрана?
set #startX 0
set #startY 0
set #endX 2560
set #endY 1440
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 10.4.2025, 20:24
Сообщение #7


***********

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



Цитата
это разве не от 0 до конца экрана?

Это зависит от того как у вас установлены мониторы. Оно может начинаться не с нуля, может быть отрицательным. Если делаете привязку, то это влиять не будет.
Если открыть изображение в пэинте, то находит? Сделайте скриншот и из игры и вставьте его в пэинт, привяжите к нему, попробуйте найти изображение.

В качестве теста так же рекомендую попробовать снизить точность, скажем до 60% и увеличить deviation до 8%

По кодам ошибок. -4 - это кривой путь, искомая картинка не была найдена на диске, 0 - искало, но не нашло.

Если только учитесь, то очень настоятельно рекомендую сразу изучать Lua синтаксис. Команды те же, возможностей больше, нет очень многих проблем которые не видно первым взглядом. Не тратьте время на старый синтаксис.


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


**

Neophyte
Сообщений: 10
Регистрация: 1.4.2025
Группа: Пользователи
Наличность: 2
Пользователь №: 20.943
Возраст: 21



Цитата(DarkMaster @ 10.4.2025, 20:24) *

Это зависит от того как у вас установлены мониторы. Оно может начинаться не с нуля, может быть отрицательным. Если делаете привязку, то это влиять не будет.
Если открыть изображение в пэинте, то находит? Сделайте скриншот и из игры и вставьте его в пэинт, привяжите к нему, попробуйте найти изображение.

В качестве теста так же рекомендую попробовать снизить точность, скажем до 60% и увеличить deviation до 8%

По кодам ошибок. -4 - это кривой путь, искомая картинка не была найдена на диске, 0 - искало, но не нашло.

Если только учитесь, то очень настоятельно рекомендую сразу изучать Lua синтаксис. Команды те же, возможностей больше, нет очень многих проблем которые не видно первым взглядом. Не тратьте время на старый синтаксис.

все что бы не делал ничего не помогало, решил последовать вашему совету на счет Lua
Все заработало картинка ищется и кликается без проблем но теперь в другом проблема,
в скрипте сделал чтоб все было циклично и все время картинка искалась, поставил задержку, но она якобы полностью игнорируется и по картинке делается 5-10 кликов в секунду. сам код
Код

--lua
local path = [["E:\screen_test\1.bmp"]]
local startX, startY, endX, endY = 0, 0, 1920, 1080

while true do
    local arr, a = findimage(startX, startY, endX, endY, {path}, 2)

    if arr then
        log("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])

        local newX = arr[1][1] - 15
        local newY = arr[1][2] + 20

        -- двойной клик с паузой между кликами
        kleft(newX, newY)
        wait(300)  -- пауза между кликами (0.3 сек)
        kleft(newX, newY)

        wait(2000)  -- ждём 2 секунды перед следующей проверкой
    else
        wait(500)  -- если не найдено — подождать 0.5 сек
    end
end

в самом пилоте снизу ставил задержку 100000-1000000 Ms и все так же клики летят
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 11.4.2025, 3:26
Сообщение #9


***********

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



Цитата
в самом пилоте снизу ставил задержку 100000-1000000 Ms и все так же клики летят

она не влияет на луа. вставляйте задержки ручками.
в качестве теста попробуйте СИЛЬНО увеличить задержки в нужных вам местах. если проблема сохранится - перезагрузитесь. wait пилотовский иногда начинает косячить. есть достаточно простые способы обхода, но применять их если вы реально не столкнулись с проблемами смысла нет


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


**

Neophyte
Сообщений: 10
Регистрация: 1.4.2025
Группа: Пользователи
Наличность: 2
Пользователь №: 20.943
Возраст: 21



Цитата(DarkMaster @ 11.4.2025, 3:26) *

она не влияет на луа. вставляйте задержки ручками.
в качестве теста попробуйте СИЛЬНО увеличить задержки в нужных вам местах. если проблема сохранится - перезагрузитесь. wait пилотовский иногда начинает косячить. есть достаточно простые способы обхода, но применять их если вы реально не столкнулись с проблемами смысла нет

сделал миллионы мс и все равно долбит в 1 точку по 7-10 раз в секунду
Код

--lua
local path = [["E:\screen_test\2.bmp"]]
local startX, startY, endX, endY = 0, 0, 1920, 1080

while true do
    local arr, a = findimage(startX, startY, endX, endY, {path}, 2)

    if arr then
        log("Изображение найдено в координатах X= " .. arr[1][1] .. " Y= " .. arr[1][2])

        local newX = arr[1][1] - 15
        local newY = arr[1][2] + 20

        -- двойной клик с паузой между кликами
        kleft(newX, newY)
        wait(3000000)  -- пауза между кликами (0.3 сек)
        kleft(newX, newY)

        wait(2000000)  -- ждём 2 секунды перед следующей проверкой
    else
        wait(5000000)  -- если не найдено — подождать 0.5 сек
    end
end

03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:19 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
03:46:20 5 (autosaved_5.txt, 0): Изображение найдено в координатах X= 757 Y= 644
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 11.4.2025, 4:42
Сообщение #11


***********

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



Код

-- wait(time_to_wait)
-- приостановить работу.
--
-- time_to_wait - время приостановки в секундах.
--                 Точность до 1/1000 секунды.
do
    local kernel32      = ffi.load("kernel32")
    local winmm         = ffi.load("Winmm")

    ffi.cdef[[
        typedef unsigned int       UINT;
        typedef          UINT      MMRESULT;

        void Sleep(unsigned int dwMilliseconds);
        MMRESULT timeBeginPeriod(
            UINT uPeriod
        );
        MMRESULT timeEndPeriod(
            UINT uPeriod
        );
    ]]

    wait = function(time_to_wait)
        winmm.timeBeginPeriod(1)
        kernel32.Sleep(time_to_wait)
        winmm.timeEndPeriod(1)
    end
end


вставить в шапку скрипта

Сообщение отредактировал DarkMaster - 11.4.2025, 4:51


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


**

Neophyte
Сообщений: 10
Регистрация: 1.4.2025
Группа: Пользователи
Наличность: 2
Пользователь №: 20.943
Возраст: 21



Цитата(DarkMaster @ 11.4.2025, 4:42) *

Код

-- wait(time_to_wait)
-- приостановить работу.
--
-- time_to_wait - время приостановки в секундах.
--                 Точность до 1/1000 секунды.
do
    local kernel32      = ffi.load("kernel32")
    local winmm         = ffi.load("Winmm")

    ffi.cdef[[
        typedef unsigned int       UINT;
        typedef          UINT      MMRESULT;

        void Sleep(unsigned int dwMilliseconds);
        MMRESULT timeBeginPeriod(
            UINT uPeriod
        );
        MMRESULT timeEndPeriod(
            UINT uPeriod
        );
    ]]

    wait = function(time_to_wait)
        winmm.timeBeginPeriod(1)
        kernel32.Sleep(time_to_wait)
        winmm.timeEndPeriod(1)
    end
end


вставить в шапку скрипта

с этим начали ошибки появляться
вроде как сделал все через команду local interval = 15000 -- интервал между кликами (в миллисекундах)
Спасибо за помощь!
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.4.2025, 1:31
Сообщение #13


***********

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



Цитата
с этим начали ошибки появляться

какие?

Цитата
вроде как сделал все через команду local interval = 15000 -- интервал между кликами (в миллисекундах)

это вообще что?


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


**

Neophyte
Сообщений: 10
Регистрация: 1.4.2025
Группа: Пользователи
Наличность: 2
Пользователь №: 20.943
Возраст: 21



Цитата(DarkMaster @ 12.4.2025, 1:31) *

какие?
это вообще что?

какие уже сказать не могу так как лог не сохранил
а скрипт начал работать вот с такими командами

Код

--lua
-- Функция ожидания в секундах
function wait_s(seconds)
    local ms = math.floor(seconds * 1000)
    wait(ms)
end

local path = [["E:\screen_test\2.bmp"]]
local startX, startY, endX, endY = 0, 0, 1920, 1080
local interval = 15000 -- интервал между кликами (в миллисекундах)

local lastClickTime = 0

while true do
    local arr, a = findimage(startX, startY, endX, endY, {path}, 2)

    if arr then
        local currentTime = os.clock() * 1000 -- время в миллисекундах

        if currentTime - lastClickTime >= interval then
            local newX = arr[1][1] - 5
            local newY = arr[1][2] + 70

            -- двойной клик
            kleft(newX, newY)
            wait_s(0.3)
            kleft(newX, newY)

            lastClickTime = currentTime
        end
    end

    wait_s(0.2) -- цикл каждые 200 мс
end
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.4.2025, 1:58
Сообщение #15


***********

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



Цитата
local interval = 15000 -- интервал между кликами (в миллисекундах)

Цитата
local currentTime = os.clock() * 1000 -- время в миллисекундах

Зачем это приводится к миллисекундам?
Цитата
-- Функция ожидания в секундах
function wait_s(seconds)
local ms = math.floor(seconds * 1000)
wait(ms)
end

зачем это приводится к секундам?
Цитата
wait(ms)

так вэйт работает или нет?


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


**

Neophyte
Сообщений: 10
Регистрация: 1.4.2025
Группа: Пользователи
Наличность: 2
Пользователь №: 20.943
Возраст: 21



Цитата(DarkMaster @ 12.4.2025, 1:58) *

Зачем это приводится к миллисекундам?

зачем это приводится к секундам?

так вэйт работает или нет?

работает только строка local interval = 2000 -- интервал между кликами (в миллисекундах)

в нее я ставлю нужные секунды
я понимаю что криво но главное добился результата

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


***********

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



Цитата
wait(ms)

так вэйт работает или нет?

???
Цитата
Зачем это приводится к миллисекундам?
зачем это приводится к секундам?

я задал вам достаточно простые и прозрачные вопросы.


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


**

Neophyte
Сообщений: 10
Регистрация: 1.4.2025
Группа: Пользователи
Наличность: 2
Пользователь №: 20.943
Возраст: 21



Цитата(DarkMaster @ 12.4.2025, 4:13) *

???

я задал вам достаточно простые и прозрачные вопросы.

local currentTime = os.clock() * 1000 -- время в миллисекундах
Функция os.clock() возвращает время в секундах, прошедшее с момента запуска скрипта, в виде числа с плавающей точкой, например: 3.456 секунд.
Чтобы сравнивать это значение с интервалом ожидания (interval = 15000 — это миллисекунды), нужно перевести os.clock() в миллисекунды, т.е. умножить на 1000.
С этими изменениями Wait работает
Пользователь в офлайнеDelete PostОтправить личное сообщение
Вернуться в начало страницы
+Ответить с цитированием данного сообщения
DarkMaster
сообщение 12.4.2025, 19:23
Сообщение #19


***********

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



Цитата
Чтобы сравнивать это значение с интервалом ожидания (interval = 15000 — это миллисекунды), нужно перевести os.clock() в миллисекунды, т.е. умножить на 1000.

я понимаю, что там написано. я не понимаю зачем. clock по умолчанию работает в секундах - вы переделываете на миллисекунды, wait работает в миллисекундах вы переделываете в секунды.
Цитата
С этими изменениями Wait работает

эти изменения не имеют вообще никакого отношения к работе wait()


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

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

 

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