Интеграция CVAT для разметки изображений и видео

Проектируем и внедряем системы искусственного интеллекта: от прототипа до production-ready решения. Наша команда объединяет экспертизу в машинном обучении, дата-инжиниринге и MLOps, чтобы AI работал не в лаборатории, а в реальном бизнесе.
Показано 1 из 1 услугВсе 1566 услуг
Интеграция CVAT для разметки изображений и видео
Средняя
~2-3 рабочих дня
Часто задаваемые вопросы
Направления AI-разработки
Этапы разработки AI-решения
Последние работы
  • image_website-b2b-advance_0.png
    Разработка сайта компании B2B ADVANCE
    1218
  • image_web-applications_feedme_466_0.webp
    Разработка веб-приложения для компании FEEDME
    1161
  • image_websites_belfingroup_462_0.webp
    Разработка веб-сайта для компании БЕЛФИНГРУПП
    854
  • image_ecommerce_furnoro_435_0.webp
    Разработка интернет магазина для компании FURNORO
    1047
  • image_logo-advance_0.png
    Разработка логотипа компании B2B Advance
    561
  • image_crm_enviok_479_0.webp
    Разработка веб-приложения для компании Enviok
    825

Интеграция и настройка CVAT для разметки изображений и видео

CVAT (Computer Vision Annotation Tool) — open-source платформа для разметки данных от Intel, де-факто стандарт для команд, которые не хотят платить $2–5 за изображение в сторонних сервисах. Но «поставить CVAT» и «настроить эффективный пайплайн разметки» — разные задачи.

Развёртывание CVAT: production-конфигурация

# docker-compose.override.yml
version: '3.3'

services:
  cvat_server:
    environment:
      DJANGO_MODWSGI_EXTRA_ARGS: ""
      ALLOWED_HOSTS: "*"
      CVAT_REDIS_HOST: "cvat_redis"
      CVAT_POSTGRES_HOST: "cvat_db"
      # Хранилище в S3 вместо локального
      CVAT_DEFAULT_STORAGE_TYPE: "cloud_storage"
      AWS_ACCESS_KEY_ID: "${AWS_ACCESS_KEY_ID}"
      AWS_SECRET_ACCESS_KEY: "${AWS_SECRET_ACCESS_KEY}"
      AWS_STORAGE_BUCKET_NAME: "cvat-data"

  cvat_worker_annotation:
    deploy:
      replicas: 4  # параллельные воркеры для AI-ассистированной разметки

  cvat_worker_export:
    deploy:
      replicas: 2

  traefik:
    command:
      - "--providers.docker.exposedByDefault=false"
      - "--entrypoints.websecure.address=:443"
      - "[email protected]"
# Быстрый деплой с SSL
git clone https://github.com/opencv/cvat.git
cd cvat
docker compose -f docker-compose.yml \
               -f docker-compose.override.yml \
               -f components/serverless/docker-compose.serverless.yml up -d

# Создаём superuser
docker exec -it cvat_server python manage.py createsuperuser

AI-assisted annotation: полуавтоматическая разметка

Главная причина использовать CVAT в 2024 — интеграция с Nuclio serverless для автоматической разметки. Загружаем модель, она предлагает разметку, человек только корректирует.

# nuclio/yolov8_detector/main.py
import json
import base64
import numpy as np
import cv2
from ultralytics import YOLO

model = YOLO('/opt/nuclio/yolov8l.pt')

def handler(context, event):
    """Nuclio function: CVAT вызывает нас для каждого изображения"""
    data = event.body

    buf = base64.b64decode(data['image'])
    img = cv2.imdecode(np.frombuffer(buf, np.uint8), cv2.IMREAD_COLOR)

    threshold = data.get('threshold', 0.45)
    results = model(img, conf=threshold)

    annotations = []
    for box in results[0].boxes:
        x1, y1, x2, y2 = map(float, box.xyxy[0])
        cls_name = model.names[int(box.cls)]

        annotations.append({
            'confidence': float(box.conf),
            'label': cls_name,
            'points': [x1, y1, x2, y2],
            'type': 'rectangle'
        })

    return context.Response(
        body=json.dumps(annotations),
        headers={'Content-Type': 'application/json'},
        status_code=200
    )
# nuclio function.yaml
apiVersion: nuclio.io/v1beta1
kind: Function
metadata:
  name: cvat-yolov8-detector
spec:
  runtime: python:3.9
  handler: main:handler
  resources:
    limits:
      nvidia.com/gpu: 1
  env:
    - name: MODEL_PATH
      value: /opt/nuclio/yolov8l.pt

Автоматический импорт и экспорт данных

from cvat_sdk import make_client
from cvat_sdk.models import TaskWriteRequest, DataRequest
import os

class CVATIntegration:
    def __init__(self, host: str, credentials: tuple):
        self.client = make_client(host=host, credentials=credentials)

    def create_task_from_s3(self, task_name: str, s3_prefix: str,
                              labels: list[dict]) -> int:
        """Создаём задачу разметки из S3-бакета"""
        task = self.client.tasks.create(TaskWriteRequest(
            name=task_name,
            labels=labels,
            segment_size=100,  # изображений в одном сегменте
            overlap=5
        ))

        # Загружаем данные из S3
        self.client.tasks.create_data(
            id=task.id,
            data_request=DataRequest(
                cloud_storage_id=1,  # ID настроенного S3 хранилища
                filename=[f'{s3_prefix}/{f}'
                           for f in self._list_s3_files(s3_prefix)]
            )
        )
        return task.id

    def export_annotations(self, task_id: int,
                             format: str = 'YOLO 1.1') -> str:
        """Экспорт в YOLO/COCO/Pascal VOC формат"""
        export_path = f'/tmp/annotations_{task_id}.zip'
        self.client.tasks.export_dataset(
            id=task_id,
            format=format,
            filename=export_path
        )
        return export_path

    def get_annotation_progress(self, task_id: int) -> dict:
        task = self.client.tasks.retrieve(task_id)
        return {
            'total_frames': task.size,
            'annotated': task.jobs[0].stage if task.jobs else 0
        }

Скорость разметки с AI-ассистом vs ручная

Реальные цифры из проекта по разметке промышленных дефектов (5000 изображений):

Метод Время/изображение Итого 5000 изображений
Ручная разметка с нуля 4–7 мин 20–35 рабочих дней
AI-предразметка + коррекция (80% точность) 45–90 сек 4–8 рабочих дней
AI-предразметка + коррекция (95% точность) 15–30 сек 1–2 рабочих дня

При низком качестве предсказаний (< 70%) AI-ассист замедляет работу — разметчик тратит больше времени на исправления, чем на разметку с нуля.

Управление качеством разметки

  • Overlap jobs: 10–15% изображений размечаются двумя разметчиками независимо, затем сравниваем IoU
  • Honey pot: специально подготовленные изображения с заранее известной разметкой — проверяем качество конкретного разметчика
  • Consensus аннотация: 3 разметчика на сложные случаи + majority vote
Тип работ Срок
Деплой CVAT + базовая настройка 1–2 недели
CVAT + AI-ассистированная разметка 3–5 недель
Полный пайплайн: CVAT + контроль качества + CI/CD 6–10 недель