cvat/cvat-sdk/cvat_sdk/datasets/common.py

76 lines
1.6 KiB
Python
Raw Normal View History

2025-09-16 01:19:40 +00:00
# Copyright (C) CVAT.ai Corporation
#
# SPDX-License-Identifier: MIT
import abc
from enum import Enum, auto
from typing import Optional
import attrs
import attrs.validators
import PIL.Image
import cvat_sdk.core
import cvat_sdk.core.exceptions
import cvat_sdk.models as models
class UnsupportedDatasetError(cvat_sdk.core.exceptions.CvatSdkException):
pass
@attrs.frozen
class FrameAnnotations:
"""
Contains annotations that pertain to a single frame.
"""
tags: list[models.LabeledImage] = attrs.Factory(list)
shapes: list[models.LabeledShape] = attrs.Factory(list)
class MediaElement(metaclass=abc.ABCMeta):
"""
The media part of a dataset sample.
"""
@abc.abstractmethod
def load_image(self) -> PIL.Image.Image:
"""
Loads the media data and returns it as a PIL Image object.
"""
...
@attrs.frozen
class Sample:
"""
Represents an element of a dataset.
"""
frame_index: int
"""Index of the corresponding frame in its task."""
frame_name: str
"""File name of the frame in its task."""
annotations: Optional[FrameAnnotations]
"""
Annotations belonging to the frame.
Will be None if the dataset was created without loading annotations.
"""
media: MediaElement
"""Media data of the frame."""
class MediaDownloadPolicy(Enum):
"""Defines policies controlling when media data is downloaded."""
PRELOAD_ALL = auto()
"""Download and cache all media data when the dataset object is created."""
FETCH_FRAMES_ON_DEMAND = auto()
"""Download the media element for each frame whenever MediaElement.load_* is invoked."""