Untitled
Anonymous
python
09/28/2024 11:15 PM
10.7 KB
20
Indexable
import cv2
import numpy as np
import pyautogui
import keyboard
import pygetwindow
from PIL import Image
from time import sleep
from datetime import datetime
import os
import random # Importing the random module
# Function Definitions
def set_active():
global is_active
if is_active:
is_active = False
print("Inactive")
else:
is_active = True
print("Active")
def set_exit():
global exit_script
exit_script = True
def get_window_name():
window_name = input("Enter the name of the window (e.g., TelegramDesktop): ")
return window_name
def screenshot(window):
path = './screenshots/blum.png'
left, top, right, bottom = window.left, window.top, window.right, window.bottom
# Adjust the region as needed
region = (left + 10, top + 10, right - left - 20, bottom - top - 20)
pyautogui.screenshot(path, region=region)
return region
def detect_image(screenshot_gray, target_img_gray, threshold):
result = cv2.matchTemplate(screenshot_gray, target_img_gray, cv2.TM_CCOEFF_NORMED)
_, max_val, _, max_loc = cv2.minMaxLoc(result)
if max_val >= threshold:
return True, max_loc, max_val
else:
return False, None, max_val
# Initialize Variables
is_active = False
exit_script = False # Renamed to avoid conflict with built-in 'exit'
consistent_matches = 0
required_consistent_matches = 3
# Set Hotkeys
keyboard.add_hotkey("q", set_active)
keyboard.add_hotkey("w", set_exit)
# Load Target Images
threshold = 0.7 # Increased threshold to reduce false positives
# Load target image
target_img_path = './images/target2.png'
target_img = cv2.imread(target_img_path, cv2.IMREAD_COLOR)
if target_img is None:
print(f"Error: Target image '{target_img_path}' not found.")
exit()
target_img_gray = cv2.cvtColor(target_img, cv2.COLOR_BGR2GRAY)
target_w, target_h = target_img_gray.shape[1], target_img_gray.shape[0]
# Load crash image
crash_img_path = './images/crash.png'
crash_img = cv2.imread(crash_img_path, cv2.IMREAD_COLOR)
if crash_img is None:
print(f"Error: Crash image '{crash_img_path}' not found.")
exit()
crash_img_gray = cv2.cvtColor(crash_img, cv2.COLOR_BGR2GRAY)
crash_w, crash_h = crash_img_gray.shape[1], crash_img_gray.shape[0]
# Load settings image
settings_img_path = './images/settings.png'
settings_img = cv2.imread(settings_img_path, cv2.IMREAD_COLOR)
if settings_img is None:
print(f"Error: Settings image '{settings_img_path}' not found.")
exit()
settings_img_gray = cv2.cvtColor(settings_img, cv2.COLOR_BGR2GRAY)
settings_w, settings_h = settings_img_gray.shape[1], settings_img_gray.shape[0]
# Load reset image
reset_img_path = './images/reset.png'
reset_img = cv2.imread(reset_img_path, cv2.IMREAD_COLOR)
if reset_img is None:
print(f"Error: Reset image '{reset_img_path}' not found.")
exit()
reset_img_gray = cv2.cvtColor(reset_img, cv2.COLOR_BGR2GRAY)
reset_w, reset_h = reset_img_gray.shape[1], reset_img_gray.shape[0]
# Ensure directories exist
os.makedirs('./screenshots', exist_ok=True)
os.makedirs('./result_image', exist_ok=True)
# Get Window
window = ''
while True:
window_name = get_window_name()
try:
window = pygetwindow.getWindowsWithTitle(window_name)[0]
print(f"Window '{window_name}' found")
break
except IndexError:
print(f"Window '{window_name}' not found. Please try again.")
print('\nPress "q" to toggle the script.\nPress "w" to exit.\n')
# Main Loop
while True:
if exit_script:
break
if is_active:
screenshot_region = screenshot(window)
blum_ss = cv2.imread('./screenshots/blum.png', cv2.IMREAD_COLOR)
if blum_ss is None:
print("Error: Screenshot not found.")
continue
blum_ss_gray = cv2.cvtColor(blum_ss, cv2.COLOR_BGR2GRAY)
# First, check for crash.png
found_crash, max_loc_crash, max_val_crash = detect_image(blum_ss_gray, crash_img_gray, threshold)
if found_crash:
print("Crash detected.")
# Now, detect settings.png and click on it
settings_clicked = False
while not settings_clicked:
screenshot_region = screenshot(window)
blum_ss = cv2.imread('./screenshots/blum.png', cv2.IMREAD_COLOR)
if blum_ss is None:
print("Error: Screenshot not found.")
continue
blum_ss_gray = cv2.cvtColor(blum_ss, cv2.COLOR_BGR2GRAY)
found_settings, max_loc_settings, max_val_settings = detect_image(blum_ss_gray, settings_img_gray, threshold)
if found_settings:
x, y = max_loc_settings
center_x = int(x + settings_w / 2) + screenshot_region[0]
center_y = int(y + settings_h / 2) + screenshot_region[1]
pyautogui.leftClick(center_x, center_y)
settings_clicked = True
print("Clicked on settings.")
else:
print("Settings not found, retrying.")
sleep(0.5)
# Now, detect reset.png and click on it
reset_clicked = False
while not reset_clicked:
screenshot_region = screenshot(window)
blum_ss = cv2.imread('./screenshots/blum.png', cv2.IMREAD_COLOR)
if blum_ss is None:
print("Error: Screenshot not found.")
continue
blum_ss_gray = cv2.cvtColor(blum_ss, cv2.COLOR_BGR2GRAY)
found_reset, max_loc_reset, max_val_reset = detect_image(blum_ss_gray, reset_img_gray, threshold)
if found_reset:
x, y = max_loc_reset
center_x = int(x + reset_w / 2) + screenshot_region[0]
center_y = int(y + reset_h / 2) + screenshot_region[1]
pyautogui.leftClick(center_x, center_y)
reset_clicked = True
print("Clicked on reset.")
else:
print("Reset not found, retrying.")
sleep(0.5)
# Wait for 1 second
sleep(1)
# Click in the middle of the window
center_x = window.left + window.width // 2
center_y = window.top + window.height // 2
pyautogui.leftClick(center_x, center_y)
print("Clicked in the middle of the window.")
# Now get back to detecting "target2.png"
continue # Start over from the beginning of the loop
# Now check for "target2.png" as before
found_target, max_loc_target, max_val_target = detect_image(blum_ss_gray, target_img_gray, threshold)
if found_target:
x, y = max_loc_target
center_x = int(x + target_w / 2) + screenshot_region[0]
center_y = int(y + target_h / 2) + screenshot_region[1]
# Generate a random wait time between 1 and 25 seconds
wait_time = random.uniform(1, 25)
print(f"Image detected with confidence {max_val_target:.2f}. Waiting for {wait_time:.2f} seconds before clicking.")
sleep(wait_time) # Wait for the random duration
# Perform the click
pyautogui.leftClick(center_x, center_y + 10)
print(f"Clicked at ({center_x}, {center_y + 10}) after waiting {wait_time:.2f} seconds.")
# Draw rectangle for verification
cv2.rectangle(blum_ss, (x, y), (x + target_w, y + target_h), (0, 255, 0), 2)
# Save the result image with timestamp
timestamp = datetime.now().strftime("%Y%m%d_%H%M%S")
result_path = f'./result_image/result_with_rectangles_{timestamp}.png'
cv2.imwrite(result_path, blum_ss)
else:
# Optionally, print that target not found
pass
sleep(0.5) # Adjust sleep time as needed
print('Script stopped.')
Editor is loading...
Leave a Comment