@ilyaRomanoff

Как навести мышь внутри приложения?

Пытаюсь научить нейронку наводится на ботов в игре кс2
Кое как написал код для анализа изображения и обучил нейронку распознавать врагов, однако навести мышь на них не получается, если оно не активно она спокойно наводит мышь куда нужно, но если окно активно нечего не происходит, как я могу это исправить?
import cv2
import numpy as np
from ultralytics import YOLO
from PIL import ImageGrab
from win32gui import FindWindow, GetWindowRect
import pyautogui

# Загрузка модели YOLO
model = YOLO('1tCsEnemiesDetector.pt')

# Получение прямоугольника окна игры
hwnd = FindWindow(None, 'Counter-Strike 2')
rect = GetWindowRect(hwnd)
region = (rect[0], rect[1], rect[2], rect[3])  # Исправлено
print("Region coordinates:", region)

# Масштабирование движения мыши
scale = 1.2

def move_mouse(x, y):
    pyautogui.move(x, y)  # Изменено на pyautogui.move

def main():
    while True:
        frame = np.array(ImageGrab.grab(bbox=region))
        frame = cv2.cvtColor(frame, cv2.COLOR_RGB2BGR)

        detections = model(frame)
        display_frame(frame, detections)

def display_frame(frame, detections):
    for results in detections:
        if results.boxes is not None:
            boxes = results.boxes.xyxy.cpu().numpy()
            confidences = results.boxes.conf.cpu().numpy()

            for i, box in enumerate(boxes):
                x1, y1, x2, y2 = box
                x1 += region[0]
                y1 += region[1]
                x2 += region[0]
                y2 += region[1]

                conf = confidences[i]
                cls = results.names[int(results.boxes.cls[i])]

                cv2.rectangle(frame, (int(x1), int(y1)), (int(x2), int(y2)), (0, 255, 0), 2)
                cv2.putText(frame, f'{cls} {conf:.2f}', (int(x1), int(y1) - 10),
                            cv2.FONT_HERSHEY_SIMPLEX, 0.5, (0, 255, 0), 2)

                # Направление смещения курсора от центра экрана к центру объекта
                center_x = (x1 + x2) / 2
                center_y = (y1 + y2) / 2
                dx = int((center_x - frame.shape[1] / 2) * scale)
                dy = int((center_y - frame.shape[0] / 2) * scale)
                move_mouse(dx, dy)

    cv2.imshow("frame", frame)
    cv2.waitKey(1)

if __name__ == "__main__":
    main()


Заранее спасибо за ответ
  • Вопрос задан
  • 68 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы