Full Guide to Deploying CVAT with AI-Assisted Annotation and API

We design and deploy artificial intelligence systems: from prototype to production-ready solutions. Our team combines expertise in machine learning, data engineering and MLOps to make AI work not in the lab, but in real business.
Showing 1 of 1All 1566 services
Full Guide to Deploying CVAT with AI-Assisted Annotation and API
Medium
~2-3 days
Frequently Asked Questions

AI Development Areas

AI Solution Development Stages

Latest works

  • image_website-b2b-advance_0.webp
    B2B ADVANCE company website development
    1319
  • image_web-applications_feedme_466_0.webp
    Development of a web application for FEEDME
    1226
  • image_websites_belfingroup_462_0.webp
    Website development for BELFINGROUP
    927
  • image_ecommerce_furnoro_435_0.webp
    Development of an online store for the company FURNORO
    1161
  • image_logo-advance_0.webp
    B2B Advance company logo design
    622
  • image_crm_enviok_479_0.webp
    Development of a web application for Enviok
    897

Integration and Configuration of CVAT for Image and Video Annotation

You launched a computer vision pilot, collected 50,000 images, hired three annotators, but after a month you realized: manual annotation is expensive, deadlines are burning, and quality is 70% IoU. We've seen this dozens of times. The solution is to deploy CVAT (Intel), connect AI pre-annotation, and set up an automatic quality control pipeline. We handle everything from deployment to team training. This approach pays for itself in 2–3 months for volumes starting at 5,000 annotated objects, saving $10,000–$30,000 per year for a team of five annotators. The integration typically costs between $5,000 and $15,000 one-time.

CVAT vs Paid Services

Paid services charge from $2 to $5 per image, but you don't control the data, can't customize the workflow, and at a scale of 10,000+ images the budget becomes critical. CVAT is an open source annotation tool maintained by Intel. You store data on your own infrastructure, customize the interface, and add your own models via serverless functions. We have deployed CVAT for clients in retail, medicine, and autonomous transport — in every case the solution pays for itself in 2–3 months. Official repository: opencv/cvat.

Accelerating Annotation with AI Assist

AI assist is the main trump card. The annotator opens a frame, the model has already drawn 80% of the boxes, the person only adjusts the boundaries. Without AI — 4–7 minutes per image. With AI at 90% accuracy — 15–30 seconds. That's an 8–16x speedup — AI-assisted annotation is up to 16 times faster than manual annotation. We have implemented such a pipeline for 15 projects. The key factor is prediction quality: if accuracy drops below 70%, AI starts to hinder. Therefore, we always calibrate threshold values and select a model for the specific dataset.

Setting Up AI-Assisted Annotation

You need Nuclio serverless and a model packaged into a function. Upload the model, CVAT calls it for each frame. We often use YOLOv8 annotation as the base model. Example configuration for 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]"
# Fast deployment with 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 function for detection:

# 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

Automating Data Import/Export via CVAT API

Automation reduces manual work. We implement MLOps annotation workflows for continuous improvement. Example Python class:

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}

When automating via the API, it's important to set proper retry policies and limits. We use exponential backoff on CVAT rate limits. For large projects (100,000+ images), we configure parallel task queues.

Annotation Speed: AI Assist vs Manual

Real numbers from a project on annotating industrial defects (5,000 images):

Method Time per image Total for 5,000 images
Manual annotation from scratch 4–7 min 20–35 work days
AI pre-annotation + correction (80% accuracy) 45–90 sec 4–8 work days
AI pre-annotation + correction (95% accuracy) 15–30 sec 1–2 work days

If prediction accuracy is below 70%, AI assist slows work down — corrections take longer than annotating from scratch. That's why we always test the model on a representative sample before integration.

Ensuring Annotation Quality Control

Annotation quality control is crucial for model performance. Overlap jobs: 10–15% of images are annotated by two annotators independently, then we compare IoU. Honeypots: specially prepared images with known annotation — we check individual annotator accuracy. Consensus: 3 annotators on difficult cases + majority vote.

Additionally, we set up automatic validation: checking for missed objects, duplicates, label scheme compliance. All metrics go into a dashboard for analysis. For automation of controls, we use CVAT Analytics and custom Python scripts.

A typical mistake is skipping the validation phase at the start. If the dataset contains many bad samples, the AI model quickly degrades. We recommend allocating 10% of project time for annotation review.

Common errors when integrating CVAT:

  • No retries in API requests on rate limits.
  • Incorrect S3 permissions.
  • Using a model without prior testing on a representative sample.
  • Skipping overlap jobs at the start.

Process and Timelines

  1. Analysis: data study, model selection for pre-annotation, architecture design.
  2. Deployment: CVAT setup with S3, SSL, backup.
  3. AI Integration: connecting 1–3 models via Nuclio, threshold configuration.
  4. Quality Control: setting up overlap, honeypots, consensus.
  5. Team Training: 2–3 sessions of 4 hours each.
  6. Documentation and CI/CD handover.
Work type Timeline
CVAT deployment + basic setup 1–2 weeks
CVAT + AI-assisted annotation 3–5 weeks
Full pipeline: CVAT + quality control + CI/CD 6–10 weeks

What's Included in the Work?

When you order a comprehensive CVAT integration, you get:

  • A working CVAT instance with SSL, regular backups, and monitoring
  • 1–3 AI models packaged as Nuclio functions with threshold tuning
  • Automatic data import/export pipeline via S3
  • Quality control system: overlap jobs, honeypots, consensus
  • Training for annotators (2–4 hours) and administrators (1–2 hours)
  • Documentation for administration and system extension
  • Support for one month after delivery

Why Integrate AI Assist?

Experience shows: on projects with more than 3,000 images, AI assist pays off in 2–4 weeks. You reduce dependency on the number of annotators, get consistent quality, and can scale without hiring. We guarantee pre-annotation accuracy of at least 80% — otherwise we refund the model integration fee.

Computer vision annotation is streamlined with CVAT. We offer a turnkey integration — get a ready pipeline with a trained team. Contact us for a consultation on your project and an estimate of budget savings.

Our engineers have over 5 years of experience in Computer Vision. We have completed more than 30 CVAT integrations for retail, logistics, and medical technology.