Не могу разобраться как обращаться к координатам объекта.
Раньше использовал 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()