Untitled

mail@pastecode.io avatar
unknown
python
13 days ago
8.2 kB
3
Indexable
Never
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.')
Leave a Comment