Перейти к содержанию
    

Работа с обученной моделью детекции объектов на YOLOv8. (Не могу найти координаты объекта на экране)

Не могу разобраться как обращаться к координатам объекта. 

Раньше использовал cv2 и обычные шаблоны для нахождения объектов на изображении или видео.

Использовал вот такие функции:

for i in range(1, screen1+1):
        template1 = cv2.imread(f'{i}w.png', 0)
        w1, h1 = template1.shape[::-1]
        screen1_templates1.append((template1, w1, h1))

img_rgb1 = cv2.cvtColor(np.array(base_screen1), cv2.COLOR_RGB2BGR)
        img_gray1 = cv2.cvtColor(img_rgb1, cv2.COLOR_BGR2GRAY)
        res1 = []
        locs1 = []
        for template1, w1, h1 in screen1_templates1:
            result1 = cv2.matchTemplate(img_gray1, template1, cv2.TM_CCOEFF_NORMED)
            loc1 = np.where(result1 >= 0.74)
            res1.append(result1)
            locs1.append(loc1)

for i in range(len(screen1_templates1)):
            for pt in zip(*locs1[i][::-1]):
                x1 = int(pt[0])
                y1 = int(pt[1])
                cv2.rectangle(base_screen_np1, (x1, y1), (x1 + screen1_templates1[i][1], y1 + screen1_templates1[i][2]),
                              (0, 255, 0), 2)
                cv2.putText(base_screen_np1, str(i + 1), (x1, y1 - 10), cv2.FONT_HERSHEY_SIMPLEX, 0.9, (0, 255, 0), 2)

Тем самым я мог обращаться к x, y и с ними взаимодействовать. К примеру выводить координаты местонахождения объектов. 
Но начав разбираться с YOLO такой возможности не нашел. Код рабочий Объект находит на экране, но я не могу вывести его местонахождения x, y и ни как с ним не могу взаимодействовать.

import cv2
import numpy as np
from PIL import ImageGrab
import matplotlib.pyplot as plt
from ultralytics import YOLO
import time

# Загрузка модели YOLO
model = YOLO(r'C:\Users\aloxa\PycharmProjects\YOLOv8\runs\detect\train\weights\best.pt')
listening_start_time3 = 0
# Функция для захвата экрана
def grab_screen():
    screen = np.array(ImageGrab.grab(bbox=(0, 0, 850, 640)))
    screen = cv2.cvtColor(screen, cv2.COLOR_RGB2BGR)
    return screen

# Бесконечный цикл для обнаружения объектов в реальном времени
while True:
    screen_img = grab_screen()

    # Выполнение обнаружения объектов на изображении экрана
    results = model(screen_img, imgsz=640, iou=0.4, conf=0.25, verbose=True)
    annatated_frame = results[0].plot()

    # Построение аннотированного кадра с уменьшенным шрифтом
    annotated_frame = results[0].plot(font_size=10)  # Указываем желаемый размер шрифта
    annotated_frame = cv2.cvtColor(annotated_frame, cv2.COLOR_BGR2RGB)

    # Отображение аннотированного кадра
    cv2.imshow('Annotated Screen', annotated_frame)

    # Изменение размера окна отображения
    cv2.namedWindow('Annotated Screen', cv2.WINDOW_NORMAL)
    cv2.resizeWindow('Annotated Screen', 850, 640)

    # Проверка нажатия клавиши 'q' для выхода из цикла
    if cv2.waitKey(1) & 0xFF == ord('q'):
        break

# Закрытие всех окон OpenCV
cv2.destroyAllWindows()

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

так вроде cv2 только во втором питоне, может из-за этого?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...