Інтеграція та налаштування CVAT для розмітки зображень і відео
Ви запустили пілот з комп'ютерного зору, зібрали 50 000 зображень, найняли трьох розмітників, але через місяць зрозуміли: ручна розмітка коштує дорого, дедлайн горить, а якість — 70% IoU. Ми стикалися з цим десятки разів. Рішення — розгорнути CVAT (Intel), підключити AI-попередню розмітку та налаштувати пайплайн автоматичного контролю якості. Працюємо від деплою до навчання команди. Такий підхід окупається за 2–3 місяці при обсязі від 5000 розмічених об'єктів.
Чим CVAT кращий за платні сервіси?
Платні сервіси беруть від $2 до $5 за зображення, але ви не контролюєте дані, не можете кастомізувати воркфлоу, а при масштабі 10 000+ зображень бюджет стає критичним. CVAT — open-source, підтримується Intel. Зберігайте дані у себе, налаштовуйте інтерфейс, додавайте свої моделі через серверлес-функції. Ми ставили CVAT для клієнтів з ретейлу, медицини та автономного транспорту — скрізь рішення окупається за 2–3 місяці. Офіційний репозиторій: opencv/cvat.
Як AI-асистент прискорює розмітку?
AI-асистент — головний козир. Розмітник відкриває кадр, модель вже намалювала 80% боксів, людина тільки править межі. Без AI — 4–7 хвилин на зображення. З AI при точності 90% — 15–30 секунд. Це економія 80% часу команди. Ми реалізували такий пайплайн для 15 проектів. Ключовий фактор — якість передбачень: якщо точність падає нижче 70%, AI починає заважати. Тому ми обов'язково калібруємо порогові значення та підбираємо модель під конкретний датасет.
Як налаштувати AI-асистовану розмітку?
Для цього потрібен Nuclio serverless і модель, упакована в функцію. Завантажуємо модель, CVAT викликає її для кожного кадру. Приклад конфігурації для YOLOv8:
# 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"
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
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
docker exec -it cvat_server python manage.py createsuperuser
Функція Nuclio для детекції:
# 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):
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
Як автоматизувати імпорт та експорт даних через API CVAT?
from cvat_sdk import make_client
from cvat_sdk.models import TaskWriteRequest, DataRequest
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) -> int:
task = self.client.tasks.create(TaskWriteRequest(
name=task_name,
labels=labels,
segment_size=100,
overlap=5
))
self.client.tasks.create_data(
id=task.id,
data_request=DataRequest(
cloud_storage_id=1,
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:
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}
При автоматизації через API важливо налаштувати правильні політики ретраїв та ліміти. Ми використовуємо exponential backoff при перевищенні лімітів CVAT. Для великих проектів (100 000+ зображень) налаштовуємо паралельні черги завдань.
Швидкість розмітки: 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.
- Honeypots: спеціально підготовлені зображення з відомою розміткою — перевіряємо точність конкретного розмітника.
- Consensus: 3 розмітники на складні випадки + majority vote.
Додатково налаштовуємо автоматичну валідацію: перевірка пропущених об'єктів, дублікатів, відповідності label-схемі. Всі метрики потрапляють у дашборд для аналізу. Для автоматизації контролю використовуємо CVAT Analytics та власні скрипти на Python.
Типова помилка — пропускати етап валідації на старті. Якщо датасет містить багато поганих зразків, AI-модель швидко деградує. Ми рекомендуємо закладати 10% часу проекту на рев'ю розмітки.
Типові помилки при інтеграції CVAT:
- Відсутність ретраїв в API-запитах при перевищенні лімітів.
- Неправильне налаштування S3-пермішенів.
- Використання моделі без попереднього тестування на репрезентативній вибірці.
- Пропуск етапу overlap jobs на старті.
Процес роботи та терміни
- Аналітика: вивчення даних, підбір моделі для попередньої розмітки, проектування архітектури.
- Деплой: розгортання CVAT з S3, SSL, backup.
- Інтеграція AI: підключення 1–3 моделей через Nuclio, налаштування threshold.
- Контроль якості: налаштування overlap, honeypots, consensus.
- Навчання команди: 2–3 сесії по 4 години.
- Передача документації та CI/CD.
| Тип робіт | Термін |
|---|---|
| Деплой CVAT + базове налаштування | 1–2 тижні |
| CVAT + AI-асистована розмітка | 3–5 тижнів |
| Повний пайплайн: CVAT + контроль якості + CI/CD | 6–10 тижнів |
Що входить у роботу?
При замовленні комплексної інтеграції ви отримуєте:
- Робочий інстанс CVAT з SSL, регулярними бекапами та моніторингом
- 1–3 AI-моделі, упаковані в Nuclio-функції з налаштуванням порогів
- Пайплайн автоматичного імпорту/експорту даних через S3
- Систему контролю якості: overlap jobs, honeypots, консенсус
- Навчання команди розмітників (2–4 години) та адміністраторів (1–2 години)
- Документацію з адміністрування та розширення системи
- Підтримку протягом місяця після здачі
Чому варто інтегрувати AI-асистент?
Досвід показує: на проектах обсягом більше 3000 зображень AI-асистент окупається за 2–4 тижні. Ви знижуєте залежність від кількості розмітників, отримуєте однорідну якість і можете масштабуватися без найму. Ми гарантуємо, що точність попередньої розмітки не нижче 80% — інакше повертаємо гроші за інтеграцію моделі.
Замовте інтеграцію під ключ — отримайте готовий пайплайн з навченою командою. Зв'яжіться з нами для консультації по вашому проекту та оцінки економії бюджету.
Досвід інженерів — понад 5 років у Computer Vision. Виконали понад 30 інтеграцій CVAT для ретейлу, логістики та медтехніки.







