tst1
dataAnonymous
python
11/29/2022 3:09 AM
3.3 KB
22
Indexable
import cv2
from math import pow, sqrt
from mss import mss
import numpy as np
from win32 import win32api
import win32con
import lib.viz as viz
if __debug__:
cv2.namedWindow('res', cv2.WINDOW_NORMAL)
# The size of the window to scan for targets in, in pixels
# i.e. SQUARE_SIZE of 600 => 600 x 600px
SQUARE_SIZE = 600
viz.SQUARE_SIZE = SQUARE_SIZE
# The maximum possible pixel distance that a character's center
# can be before locking onto them
TARGET_SIZE = 100
MAX_TARGET_DISTANCE = sqrt(2 * pow(TARGET_SIZE, 2))
viz.TARGET_SIZE = TARGET_SIZE
viz.MAX_TARGET_DISTANCE = MAX_TARGET_DISTANCE
# find window namedWindow
# hwnd = win32gui.FindWindow(None, Projector: Game Capture)
# Create an instance of mss to capture the selected window square
sct = mss()
# Use the first monitor, change to desired monitor number
dimensions = sct.monitors[1]
# Compute the center square of the screen to parse
dimensions['left'] = int((dimensions['width'] / 2) - (SQUARE_SIZE / 2))
dimensions['top'] = int((dimensions['height'] / 2) - (SQUARE_SIZE / 2))
dimensions['width'] = SQUARE_SIZE
dimensions['height'] = SQUARE_SIZE
# Calls the Windows API to simulate mouse movement events that are sent to OW
def mouse_move(x, y):
win32api.mouse_event(win32con.MOUSEEVENTF_MOVE, x, y, 0, 0)
# Determines if the Caps Lock key is pressed in or not
def is_activated():
return win32api.GetAsyncKeyState(0xA0) != 0
#replace it with any key you wanna set
def locate_target(target):
# compute the center of the contour
moment = cv2.moments(target)
if moment["m00"] == 0:
return
cx = int(moment["m10"] / moment["m00"])
cy = int(moment["m01"] / moment["m00"])
mid = SQUARE_SIZE / 2
x = -(mid - cx) if cx < mid else cx - mid
y = -(mid - cy) if cy < mid else cy - mid
target_size = cv2.contourArea(target)
distance = sqrt(pow(x, 2) + pow(y, 2))
# There's definitely some sweet spot to be found here
# for the sensitivity in regards to the target's size
# and distance
slope = ((1.0 / 3.0) - 1.0) / (MAX_TARGET_DISTANCE / target_size)
multiplier = ((MAX_TARGET_DISTANCE - distance) / target_size) * slope + 1
if is_activated():
mouse_move(int(x * multiplier), int(y * multiplier))
if __debug__:
# draw the contour of the chosen target in green
cv2.drawContours(frame, [target], -1, (0, 255, 0), 2)
# draw a small white circle at their center of mass
cv2.circle(frame, (cx, cy), 7, (255, 255, 255), -1)Editor is loading...