import cv2
import numpy as np
from enum import Enum
from ultralytics import YOLO
# 1. Импорт компонентов
from acmenra_cv.instance import DeviceType, TaskType
from acmenra_cv.tracker import Tracker
from acmenra_cv.render import Drawer, Style, Stroke, Fill
from acmenra_yolo import YOLOBackend
# 2. Определение семантических категорий
class CocoClass(Enum):
PERSON = 0
CAR = 2
# 3. Инициализация модели и Backend
model = YOLO("yolov8n-seg.pt") # Используем сегментационную модель
backend = YOLOBackend(
model=model,
device=DeviceType.MPS, # Или CPU, CUDA_0, TENSORRT
category=CocoClass,
task_type=TaskType.SEGMENT,
threshold=0.35,
iou=0.7,
imgsz=640,
refined=True # Включаем высококачественные маски
)
# 4. Настройка Трекинга и Рендеринга
tracker = Tracker(id=0, backend=backend, max_length=30)
style = Style(
palette=[(255, 0, 0), (0, 255, 0), (0, 0, 255)],
stroke=Stroke(thickness=2, segment=0.1, alpha=0.8),
fill=Fill(alpha=0.3),
show=True,
)
drawer = Drawer(style=style)
# 5. Обработка видеопотока
cap = cv2.VideoCapture("video.mp4")
while cap.isOpened():
ret, frame = cap.read()
if not ret:
break
# Получаем список TrackedObject
tracked_objects = tracker.track(frame, enable_tracking=True)
# Визуализируем
output = drawer.draw_instances(
frame=frame,
tracked_objects=tracked_objects,
is_box=True,
is_polygon=True, # Рисуем маски сегментации
is_trajectory=True,
)
cv2.imshow("Acmenra YOLO Pipeline", output)
if cv2.waitKey(1) & 0xFF == ord('q'):
break
cap.release()
cv2.destroyAllWindows()