Minimalistic python SDK for CVAT.
Downloads and decodes annotations on the format "CVAT for images 1.1".
Either add environment variables to your global environment or create an env file.
CVAT_USERNAME=username
CVAT_PASSWORD=password
If you don't want to use your username and password, you can create a token:
cvat create-token
And use it like this:
CVAT_TOKEN=token
Note that the token expires in 14 days.
import next_cvat
if __name__ == "__main__":
(
next_cvat.Client.from_env_file(".env.cvat.secrets")
.project(1234)
.download_(dataset_path="dataset-path")
)
or using CLI:
cvat download --project-id <project-id> --dataset-path <dataset-path>
And then load annotations:
from next_cvat import Annotations
annotations = Annotations.from_path("dataset-path/annotations.xml")
Create a new task and upload images to it:
import next_cvat
from pathlib import Path
client = next_cvat.Client.from_env()
# Create a new task
task = client.create_task("My Task", project_id=1234)
# Upload images
client.upload_images_(
task.id,
[
Path("images/image1.jpg"),
Path("images/image2.jpg"),
]
)
client = next_cvat.Client.from_env_file(".env.cvat.secrets")
job = client.project(project_id).task(task_id).job(job_id)
annotations = job.annotations()
annotations.add_mask_(
next_cvat.Mask.from_segmentation(
segmentation=Image.open("tests/test_vegetation_mask.png"),
label="Deformation",
),
image_name="20240916_000854_2011T_437.bmp",
)
job.update_annotations_(annotations)
Delete a frame from a task:
# Get a frame by its index (0-based) or by name
frame = task.frame(frame_id=0) # or task.frame(name="image1.jpg")
# Delete the frame
task.delete_frame_(frame.id)
from next_cvat import Client
client = Client.from_env_file(".env.cvat.secrets")
with client.cvat_client() as cvat_client:
cvat_client.get_tasks()
To build the docs:
poetry run mkdocs build
To serve the docs:
poetry run mkdocs serve