Как выделять объекты поверх всех окон? PyQT5 Python

У меня есть нейросеть на YOLO, которая определяет объекты и их координаты. Мне нужно, чтобы я мог выделять эти объекты на экране при запуске программы поверх всех окон(к примеру, я могу запустить видео с объектами на рабочем столе и программа должна будет рисовать контур этих объектов)

Я пробовал действовать через pyqt5, но никак не могу сообразить, как сделать так, чтобы прямоугольник был не один в кадре, а можно было рисовать их помногу, и самое главное, как их потом удалять в зависимости от изменения действия на экране(объекты на экране могут быть не статичные, а постоянно меняться или исчезать вовсе).

Вот мой код:

from PyQt5.QtWidgets import QMainWindow, QApplication
from PyQt5.QtCore import Qt, QCoreApplication, QTimer
from ultralytics import YOLO
import cv2
import pyautogui

model = YOLO("way/to/model/model.pt")

class TransparentWindow(QMainWindow):

    def __init__(
            self,
            x: int,
            y: int,
            width: int,
            height: int,
            pen_color: str,
            pen_size: int):
        super().__init__()
        self.highlight_x = x
        self.highlight_y = y
        self.highlight_width = width
        self.highlight_height = height
        self.pen_color = pen_color
        self.pen_size = pen_size
        self.initUI()

    def initUI(self):
        self.setGeometry(
            self.highlight_x,
            self.highlight_y,
            self.highlight_width + self.pen_size,
            self.highlight_height + self.pen_size)
        self.setStyleSheet('background: transparent')
        self.setWindowFlag(Qt.FramelessWindowHint)

    def paintEvent(self, event):
        painter = QPainter()
        painter.begin(self)
        painter.setPen(QPen(QColor(self.pen_color), self.pen_size))
        painter.drawRect(
            self.pen_size - 1,
            self.pen_size - 1,
            self.width() - 2 * self.pen_size,
            self. height() - 2 * self.pen_size)
        painter.end()


def highlight_on_screen(
        x: int,
        y: int,
        width: int,
        height: int,
        pen_color: str = '#aaaa00',
        pen_size: int = 2,
        timeout: int = 0):
    
    app = QApplication([])
    window = TransparentWindow(x, y, width, height, pen_color, pen_size)
    window.show()
    QTimer.singleShot(timeout, QCoreApplication.quit)
    app.exec_()

while True:
    screenshot = pyautogui.screenshot()
    results = model(screenshot, conf=0.25, save=True)
    boxes_new = results[0].boxes.xyxy.numpy()
    for box in range(len(boxes_new)):
        x1, y1, x2, y2 = int(boxes_new[box][0]), int(boxes_new[box][1]), int(boxes_new[box][2]), int(boxes_new[box][3])
        highlight_on_screen(x1, y1, x2-x1, y2-y1)

Ответы (0 шт):