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

Быстрый старт

В этих примерах показано, как использовать ядро acmenra-cv в связке с официальным плагином acmenra-yolo.

Пример 1: Базовая детекция с плагином

example.py
import cv2
from ultralytics import YOLO

# Импортируем из ядра
from acmenra_cv.instance import DeviceType, TaskType, Enum

# Импортируем из плагина
from acmenra_yolo import YOLOBackend

# 1. Определяем категории
class CocoClass(Enum):
    PERSON = 0
    CAR = 2

# 2. Загрузка модели и создание backend
model = YOLO("yolov8n.pt")
backend = YOLOBackend(
    model=model,
    device=DeviceType.CPU,
    category=CocoClass,
    task_type=TaskType.DETECT,
    threshold=0.5,
    iou=0.7,
    imgsz=640,
)

# 3. Инференс
frame = cv2.imread("image.jpg")
result = backend.predict(frame)

# 4. Обработка результатов
print(f"Detected {len(result)} objects")
for instance in result:
    # Обратите внимание: используем instance.label (Enum member), а не category
    print(f"  {instance.label.name}: {instance.conf:.2f}")
    print(f"    Box: {instance.box.left:.2f}, {instance.box.top:.2f}, "
          f"{instance.box.right:.2f}, {instance.box.bottom:.2f}")

Пример 2: Multi-object tracking

example.py
from acmenra_cv.tracker import Tracker
import cv2

# Создание трекера (принимает любой Backend, включая YOLOBackend)
tracker = Tracker(
    id=0,
    backend=backend,
    max_length=50,  # Длина истории траектории
)

cap = cv2.VideoCapture("video.mp4")
while cap.isOpened():
    ret, frame = cap.read()
    if not ret:
        break

    # Трекинг
    tracked_objects = tracker.track(frame, enable_tracking=True)

    for obj in tracked_objects:
        print(f"ID: {obj.id}, Label: {obj.instance.label.name}")
        print(f"  Trajectory length: {len(obj.trajectory)}")

cap.release()

Пример 3: Полный pipeline (Inference + Tracking + Render + Result)

example.py
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)

Следующие шаги

Изучить модули ядра | Перейти к документации YOLO плагина