Перейти к содержимому
  • 0
Lakmus

Ищу подходящий инструмент

Вопрос

Здравствуйте, я совсем чайник в этом, но мне нужен скрипт который может различать числа на кусочке экрана, допустим он видит числа от 0 до 50 - нажимает на крестик, если 51-90 - нажимает на галочку, каким способом/программой посоветуете такое провернуть, если вообще возможно?)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рекомендуемые сообщения

18 минут назад, Lakmus сказал:

мне нужен скрипт который может различать числа на кусочке экрана, допустим он видит числа от 0 до 50 - нажимает на крестик, если 51-90 - нажимает на галочку

На каком экране? На экране компьютера OpenComputers? Или экране реального компьютера? И что делать, если скрипт увидел число в диапазоне [0-50] и одновременно другое число в диапазоне [51-90] или наоборот, не увидел нечего похожего на числа из обозначенных диапазонов?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Рид вроде делал бота, который как раз занимался распознаванием всякой инфы на экране.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Без контекста не очень понятно, в чем состоит задача.

На питоне всякую автоматизацию легко стряпать, в PyAutoGUI из коробки есть поиск изображений, мышеводство, клавиатура. Правда там какие-то траблы с виндой, а вот OpenCV + mouse точно работает на любой системе.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Doob @Totoro @eu_tomat
Хорошо, сейчас уточню, есть мобильная игра, там есть система кланов, но она ужасна, принимать игроков должны сами игроки, нет фильтра по уровню, я хочу использовать метод 1Ridav со скриптом, распознающим изображение, заскринить 10-15 чисел, и чтобы 1 аккаунт принимал игроков с этим значением уровня, также создать 2ой аккаунт, который будет отклонять запросы ( если запросы вступления висят долго они спускаются на строчку ниже, где 2ой аккаунт их бы подхватывал...там все проще он просто будет кликать на кнопку отклонения бесконечно, и когда запрос упадет вниз он его поймает )…
Окошко со значением уровня игрока всегда в одном месте, так что проблем с распознаванием по сути возникнуть не должно...)
Мой способ требует запуска игры с 2ух аккаунтов ( 2ух окон эмулятора )..что будет создавать сильную нагрузку на компьютер, с работой скриптов на фоне
Вас же я хочу спросить, есть ли более деликатный/практичный способ осуществить это, если да, то рассказать о нем, заранее спасибо)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
24 минуты назад, Lakmus сказал:

я хочу использовать метод 1Ridav

Почитать можно здесь: Как я писал графического бота и во что это превратилось. PengueeBot

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@eu_tomat с этой статьи я вышел на его канал, а оттуда на этот форум) тот способ то как раз я и хочу использовать, но я хочу узнать, может можно как то бота заставить распознавать на куске экрана именно числа и оперировать с ними, а не просто нахождение совпадений пикселей?)
допустим бот настроен на клик по определенной области, если увидит число больше 50...соответственно он будет срабатывать, если увидит в области сканирования числа 51, 52, 53..и т.д...можно как то подобное устроить?)

Изменено пользователем Lakmus

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
14 минуты назад, Lakmus сказал:

мой способ подразумевает под собой постоянную перенастройку бота, как только требования клана будут меняться

Какие требования клана требуют перенастройки? Если шрифт не меняется, то нужны всего 10 картинок для 10 цифр. Далее на скриншоте ищем все цифры с их позициями. Имея значения цифр и их позиции на скриншоте, вычисляем составленные из цифр числа с их позициями на скриншоте. По значению числа определяем нужное действие. И если галочки-крестики всегда находятся на одинаковом смещении от чисел, то и позиции кликов тоже вычисляем, просто добавляя смещение. При изменении требований клана достаточно изменить одно число, задающее порог вхождения.

 

Или о какой рутине идёт речь?

 

29 минут назад, Lakmus сказал:

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

Выше уже предлагалось использовать библиотеку OpenCV. Также существуют описания удачных попыток научить ботов видеть "именно числа". Например: Python + OpenCV + Keras: делаем распознавалку текста за полчаса.

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@eu_tomat ну вот, вы уже облегчили мне задачу) я то думал нужно будет скринить числа от порога вхождения и выше, а вы предлагаете заскринить лишь 10 и научить бота работать с их комбинациями, чтобы увидев их сочетания на экране он понимал, какое это число и что с ним делать) однако как это сделать?)
желательно ссылку киньте на обучение или демонстрацию, чтоб мне понятней было как это сделать)

Изменено пользователем Lakmus

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах
5 минут назад, Lakmus сказал:

однако как это сделать?

Однако, что уже сделано?

 

Буду исходить из того, что статья @1Ridav помогла получить список всех найденных цифр с их значениями и позициями на скриншоте. Теперь этот список надо преобразовать в список чисел. Как эти числа расположены на экране? Можно взглянуть на типичный скриншот, с которым придётся работать?

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Если сляпать нейронку, то и разбивать ничего не надо, тупо обучить и написать скрипт в три строчки: скрин > предикт > клик

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@eu_tomat  вот так выглядит полное окно

 

Скрытый текст

asd.jpg

 

Изменено пользователем Alex
Установка спойлера

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Я представляю алгоритм так:

  • Найти на скрине "Лвл".
  • Вырезать прямоугольник 35x15 на 45 пикселей ниже.
  • Вычислить хеш этого изображения.
  • Сравнить с сохраненными.
  • По результату сравнения, кликнуть на нужную кнопку.

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

@Doob что почитать посоветуете, чтоб написать такой скрипт?) у меня есть PeengueeBot Рида, его более менее понимаю, но Python не владею, могу только корректировать готовое

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В том же ютубе есть куча туторов к pyautogui. Надо самостоятельно разобраться, глянуть готовых ботов, они все очень разные.

 

 

Проще сначала сделать скрины чисел, сохранить в png, чтобы размер и позиция на экране была одинаковая. Вбить для каждой картинки лейблы.

 

Потом можно приступить к писанине.

Делаем скрин поля "Лвл", сохраняем картинку.

 

При запуске программы надо найти расположение ключевой точки.

import pyautogui

key_point = pyautogui.locateOnScreen('Лвл.png')

Координаты левого верхнего пикселя хранятся в key_point.left и key_point.top

От них надо считать отступ до чисел (координаты рамки, ширина, высота), которые сохранены в картинках.

 

Далее, вырезаем прямоугольник

img = pyautogui.screenshot(region=(X, Y, W, H))

Где X,Y это координаты, а W и H - размеры рамки.

Потом можно просто получить строковое представление этого кропа и проверить по ключу в словаре.

images[img.tobytes()] >= const

Собственно, словарь сначала так и заполняем - открываем картинки и кидаем в словарь.

from PIL import Image

images = {}

images[Image.open('50.png').tobytes()] = 50

После сравнения запускаем клик по кнопке, координаты можно вычислить из уже известных.

 

 

Способ самый топорный, но доступный для новичка и не потребляющий много ресурсов.

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

В боте есть скрипт, который называется readfield и находится в директории modules. Внутри него, в комментах есть пример использования.

Необходимо лишь заготовить картинки каждой цифры от 0 до 9 по отдельности, желательно в Mono режиме чтобы фон не влиял на поиск. Таким образом получишь строчку с числами, которую просто переведешь в int

 

import readfield as rf
a = Action()
a.grab()
rf.init(a)
mydict = {"zero":"0","one":"1","two":"2","three":"3","four":"4","five":"5","six":"6","seven":"7","eight":"8","nine":"9", "slash":"/", "dot":"."}

a.searchRect(Position(1, 1), Position(100, 30)) #LIMIT SEARCH RECTANGLE, here you specify field position on your screen
mystring = rf.readField(mydict)

myint = int(mystring)

Поделиться сообщением


Ссылка на сообщение
Поделиться на других сайтах

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вы вставили отформатированное содержимое.   Удалить форматирование

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отобразить как ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.


×
×
  • Создать...