Інтеграція CVAT для розмітки зображень та відео

Проектуємо та впроваджуємо системи штучного інтелекту: від прототипу до production-ready рішення. Наша команда поєднує експертизу в машинному навчанні, дата-інжинірингу та MLOps, щоб AI працював не в лабораторії, а в реальному бізнесі.
Показано 1 з 1Усі 1566 послуг
Інтеграція CVAT для розмітки зображень та відео
Середній
~2-3 дні
Часті запитання

Напрямки AI-розробки

Етапи розробки AI-рішення

Останні роботи

  • image_website-b2b-advance_0.webp
    Розробка сайту компанії B2B ADVANCE
    1284
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1196
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    901
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1119
  • image_logo-advance_0.webp
    Розробка логотипу компанії B2B Advance
    586
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    853

Інтеграція та налаштування 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 тижнів