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

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

Пример 1: Базовая детекция

example.py
from acmenra_cv.inference import YOLOBackend
from acmenra_cv.instance import DeviceType, TaskType
from ultralytics import YOLO
import cv2

# 1. Загрузка модели
model = YOLO("yolov8n.pt")

# 2. Создание backend
backend = YOLOBackend(
    model=model,
    device=DeviceType.CPU,
    task_type=TaskType.DETECT,
    threshold=0.5,
    iou=0.7,
    imgsz=640,
)

# 3. Загрузка изображения
frame = cv2.imread("image.jpg")

# 4. Инференс
result = backend.predict(frame)

# 5. Обработка результатов
print(f"Detected {len(result)} objects")

for instance in result:
    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

# Создание трекера
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: Визуализация

example.py
from acmenra_cv.render import Drawer, Style, Stroke, Fill

# Настройка стиля
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 = Drawer(style=style)

# Визуализация
output = drawer.draw_instances(
    frame=frame,
    tracked_objects=tracked_objects,
    is_box=True,
    is_trajectory=True,
)

# Сохранение результата
cv2.imwrite("output.jpg", output)

Пример 4: Полный pipeline

example.py
from acmenra_cv.inference import YOLOBackend, Result, Timing
from acmenra_cv.tracker import Tracker
from acmenra_cv.render import Drawer, Style
from acmenra_cv.instance import DeviceType, TaskType
from ultralytics import YOLO
import cv2
from enum import Enum

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

# 2. Инициализация
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,
)

tracker = Tracker(id=0, backend=backend, max_length=50)

style = Style(
    palette=[(255, 0, 0), (0, 255, 0), (0, 0, 255)],
    show=True,
)

drawer = Drawer(style=style)

# 3. Обработка кадра
frame = cv2.imread("image.jpg")
tracked_objects = tracker.track(frame, enable_tracking=True)

# 4. Создание Result контейнера
timing = Timing(preprocess=1.5, prediction=15.2, postprocess=2.1)
result = Result(
    instances=[obj.instance for obj in tracked_objects],
    timing=timing,
    width=frame.shape[1],
    height=frame.shape[0],
    depth=1,
    device=DeviceType.CPU,
    category=CocoClass,
)

# 5. Визуализация
output = drawer.draw_instances(
    frame=frame,
    tracked_objects=tracked_objects,
    is_box=True,
    is_trajectory=True,
)

# 6. Использование Result API
print(f"Detected {len(result)} objects")
for instance in result:
    print(f"  {instance.label.name}: {instance.conf:.2f}")

# 7. Сериализация
result_dict = result.to_dict()
print(result_dict)

# 8. Сохранение
cv2.imwrite("output.jpg", output)

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

Модули