Вопрос Бот для танцевальной игры

Будущий хацкер
Начинающий
Статус
Оффлайн
Регистрация
28 Апр 2022
Сообщения
107
Реакции[?]
13
Поинты[?]
3K
Вообще есть очень старая игра танцевальная пара па, решил попробовать написать в первые в жизни бота который будет самостоятельно тыкать клавиши с экрана. Попробовал через OpenCV определять клавиши с картинок, вроде определяет всё чётко.
1.png
Вот код как делал:

Python:
import cv2 as cv
import numpy as np

haystack_img = cv.imread('right.png', cv.IMREAD_UNCHANGED)
needle_img = cv.imread('left_arrow.png', cv.IMREAD_UNCHANGED)

result = cv.matchTemplate(haystack_img, needle_img, cv.TM_CCOEFF_NORMED)

min_val, max_val, min_loc, max_loc = cv.minMaxLoc(result)

print('Best match top left position: %s' % str(max_loc))
print('Best match confidence: %s' % max_val)

threshold = 0.3
if max_val >= threshold:
    print('Found needle')

    needle_w = needle_img.shape[1]
    needle_h = needle_img.shape[0]

    top_left = max_loc
    bottom_right = (top_left[0] + needle_w, top_left[1] + needle_h)

    cv.rectangle(haystack_img, top_left, bottom_right,
                    color=(0, 255, 0), thickness=2, lineType=cv.LINE_4)
  
    cv.imshow('Result', haystack_img)
    cv.waitKey()

else:
    print('Needle not found.')
Теперь вопрос, как мне сделать чтобы он считывал хотя бы путём скриншотов появляющиеся кнопки и нажимал их, кто сможет помочь буду благодарен
 
Будущий хацкер
Начинающий
Статус
Оффлайн
Регистрация
28 Апр 2022
Сообщения
107
Реакции[?]
13
Поинты[?]
3K
Если есть знающие люди буду благодарен за подсказку
 
Главный Бот Югейма
Продавец
Статус
Оффлайн
Регистрация
15 Фев 2021
Сообщения
464
Реакции[?]
85
Поинты[?]
93K
Используй библиотеку mss для захвата изображения с экрана к примеру. Тебе останется только сохранить заранее *.png нужных тебе объектов (стрелочек).
- Не шарю что за игра, но если речь о "кнопках" клавиатуры, то можешь использовать библиотеку keyboard или что нибудь похожее.
 
Будущий хацкер
Начинающий
Статус
Оффлайн
Регистрация
28 Апр 2022
Сообщения
107
Реакции[?]
13
Поинты[?]
3K
Используй библиотеку
Пожалуйста, авторизуйтесь для просмотра ссылки.
для захвата изображения с экрана к примеру. Тебе останется только сохранить заранее *.png нужных тебе объектов (стрелочек).
- Не шарю что за игра, но если речь о "кнопках" клавиатуры, то можешь использовать библиотеку
Пожалуйста, авторизуйтесь для просмотра ссылки.
или что нибудь похожее.
Спасибо попробую
 
Пользователь
Статус
Оффлайн
Регистрация
1 Дек 2019
Сообщения
262
Реакции[?]
31
Поинты[?]
14K
Попробуй сделать по хэшу, по хорошему стоит сделать маску по белому(стрелку), пример кода сравнения по хэшу:
Python:
from PIL import Image
import imagehash
hash1 = imagehash.average_hash(Image.open('left.jpg'))
hash2 = imagehash.average_hash(Image.open('now.jpg'))
print(abs(hash1-hash2))
Это достала часть кода который год назад написала, мб он вообще не рабочий:roflanBuldiga:
И скрин делай по размеру 1в1 к стрелке, чтоб только её и было видно
 
Последнее редактирование:
Будущий хацкер
Начинающий
Статус
Оффлайн
Регистрация
28 Апр 2022
Сообщения
107
Реакции[?]
13
Поинты[?]
3K
Попробуй сделать по хэшу, по хорошему стоит сделать маску по белому(стрелку), пример кода сравнения по хэшу:
Python:
from PIL import Image
import imagehash
hash1 = imagehash.average_hash(Image.open('left.jpg'))
hash2 = imagehash.average_hash(Image.open('now.jpg'))
print(abs(hash1-hash2))
Это достала часть кода который год назад написала, мб он вообще не рабочий:roflanBuldiga:
И скрин делай по размеру 1в1 к стрелке, чтоб только её и было видно
Я делал таким методом, он стрелки определяет, но бывает так что появляются 5-6 стрелок и тут он уже не может нормально функционировать, и при определение стрелки с экрана сам не нажимает( уже что только не пробовал не выходит.
 
Пользователь
Статус
Оффлайн
Регистрация
1 Дек 2019
Сообщения
262
Реакции[?]
31
Поинты[?]
14K
Я делал таким методом, он стрелки определяет, но бывает так что появляются 5-6 стрелок и тут он уже не может нормально функционировать, и при определение стрелки с экрана сам не нажимает( уже что только не пробовал не выходит.
А чё всм 5-6, тебе ж всеравно надо только одну захватывать и передвигать фокус на следующую после детекта прошлой. По крайней мере такое звучит логично, не знаю какая там механика в игре
 
Последнее редактирование:
Будущий хацкер
Начинающий
Статус
Оффлайн
Регистрация
28 Апр 2022
Сообщения
107
Реакции[?]
13
Поинты[?]
3K
А чё всм 5-6, тебе ж всеравно надо только одну захватывать и передвигать фокус на следующую после детекта прошлой. По крайней мере такое звучит логично, не знаю какая там механика в игре
Это я понимаю, но даже если на экране вылазит одна стрелка, он её видеть в консоль пишет что это за стрелка, но действий не каких не происходит, по задумке он должен увидеть стрелку распознать и произвести действие, если стрелка вниз он должен нажать кнопку соответствующую на клавиатуре(и да логику я эту прописал но толку ноль)
 
Пользователь
Статус
Оффлайн
Регистрация
1 Дек 2019
Сообщения
262
Реакции[?]
31
Поинты[?]
14K
Это я понимаю, но даже если на экране вылазит одна стрелка, он её видеть в консоль пишет что это за стрелка, но действий не каких не происходит, по задумке он должен увидеть стрелку распознать и произвести действие, если стрелка вниз он должен нажать кнопку соответствующую на клавиатуре(и да логику я эту прописал но толку ноль)
А нажатия точно работают? Сомневаюсь что такая древняя игра обходит нажатия клавы в юзермоде. Попробуй эмулировать через
Пожалуйста, авторизуйтесь для просмотра ссылки.
. Либо через
Python:
import ctypes
ctypes.windll.user32.keybd_event или ctypes.windll.user32.SendInput
 
Последнее редактирование:
Будущий хацкер
Начинающий
Статус
Оффлайн
Регистрация
28 Апр 2022
Сообщения
107
Реакции[?]
13
Поинты[?]
3K
А нажатия точно работают? Сомневаюсь что такая древняя игра обходит нажатия клавы в юзермоде. Попробуй эмулировать через
Пожалуйста, авторизуйтесь для просмотра ссылки.
. Либо через
Python:
import ctypes
ctypes.windll.user32.keybd_event или ctypes.windll.user32.SendInput
Хорошо попробую
 
Сверху Снизу