import cv2
from enum import Enum
from ultralytics import YOLO
from acmenra_cv.instance import DeviceType, TaskType
from acmenra_cv.inference import Result, Timing
from acmenra_cv.tracker import Tracker
from acmenra_cv.render import Drawer, Style, Stroke, Fill
from acmenra_yolo import YOLOBackend
class CocoClass(Enum):
PERSON = 0
CAR = 2
# 1. Инициализация
model = YOLO("yolov8n.pt")
backend = YOLOBackend(model=model, device=DeviceType.CPU, category=CocoClass, task_type=TaskType.DETECT)
tracker = Tracker(id=0, backend=backend, max_length=50)
style = Style(
palette=[(255, 0, 0), (0, 255, 0)],
stroke=Stroke(thickness=2, alpha=0.8),
fill=Fill(alpha=0.3),
show=True,
)
drawer = Drawer(style=style)
# 2. Обработка кадра
frame = cv2.imread("image.jpg")
tracked_objects = tracker.track(frame, enable_tracking=True)
# 3. Создание Result контейнера (для аналитики/сериализации)
result = Result(
instances=[obj.instance for obj in tracked_objects],
timing=Timing(preprocess=1.5, prediction=15.2, postprocess=2.1),
width=frame.shape[1],
height=frame.shape[0],
depth=1,
device=DeviceType.CPU,
category=CocoClass,
)
# 4. Визуализация
output = drawer.draw_instances(
frame=frame,
tracked_objects=tracked_objects,
is_box=True,
is_trajectory=True,
)
# 5. Использование Result API и сохранение
print(f"Detected {len(result)} objects")
cv2.imwrite("output.jpg", output)