Untitled
unknown
python
6 days ago
9.1 kB
3
Indexable
Never
import cv2 import numpy as np import pyautogui import keyboard import pygetwindow from PIL import Image from time import sleep, time from datetime import datetime import os import random # 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 last_crash_time = 0 crash_cooldown = 10 # Cooldown period in seconds to prevent immediate re-detection # Set Hotkeys keyboard.add_hotkey("q", set_active) keyboard.add_hotkey("w", set_exit) # Load Target Images threshold = 0.7 # Adjust threshold as needed # 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) current_time = time() if current_time - last_crash_time > crash_cooldown: # 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.") last_crash_time = current_time # Update last crash time reset_clicked = False while not reset_clicked: # Detect and click on settings.png 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 and click reset.png found_reset = False while not found_reset: 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, clicking on settings again.") # Break out to click on settings again break # 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.") # Short delay to allow the application to reset sleep(2) # 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.')
Leave a Comment