diff --git a/src/superannotate_schemas/__init__.py b/src/superannotate_schemas/__init__.py index 1b08015..5b60d76 100644 --- a/src/superannotate_schemas/__init__.py +++ b/src/superannotate_schemas/__init__.py @@ -6,7 +6,7 @@ from superannotate_schemas.validators import AnnotationValidators -__version__ = '1.0.42' +__version__ = '1.0.44' __all__ = [ "__version__", diff --git a/src/superannotate_schemas/schemas/external/video.py b/src/superannotate_schemas/schemas/external/video.py index 3dbe411..d334997 100644 --- a/src/superannotate_schemas/schemas/external/video.py +++ b/src/superannotate_schemas/schemas/external/video.py @@ -4,24 +4,27 @@ from typing import Optional from typing import Union -from superannotate_schemas.schemas.enums import AnnotationStatusEnum +from pydantic import Field +from pydantic import StrictBool +from pydantic import StrictInt +from pydantic import StrictStr +from pydantic import ValidationError +from pydantic import conlist +from pydantic.error_wrappers import ErrorWrapper + from superannotate_schemas.schemas.base import BaseAttribute from superannotate_schemas.schemas.base import BaseInstance -from superannotate_schemas.schemas.base import BboxPoints from superannotate_schemas.schemas.base import BaseMetadata +from superannotate_schemas.schemas.base import BaseModel +from superannotate_schemas.schemas.base import BboxPoints +from superannotate_schemas.schemas.base import INVALID_DICT_MESSAGE from superannotate_schemas.schemas.base import NotEmptyStr from superannotate_schemas.schemas.base import PointLabels +from superannotate_schemas.schemas.base import StrictNumber +from superannotate_schemas.schemas.base import StrictPointNumber from superannotate_schemas.schemas.base import Tag -from superannotate_schemas.schemas.base import INVALID_DICT_MESSAGE +from superannotate_schemas.schemas.enums import AnnotationStatusEnum -from superannotate_schemas.schemas.base import BaseModel -from pydantic import StrictBool -from pydantic import conlist -from pydantic import ValidationError -from pydantic import Field -from pydantic import StrictInt -from pydantic import StrictStr -from pydantic.error_wrappers import ErrorWrapper class Attribute(BaseAttribute): name: NotEmptyStr @@ -31,6 +34,9 @@ class Attribute(BaseAttribute): class VideoType(str, Enum): EVENT = "event" BBOX = "bbox" + POINT = "point" + POLYGON = "polygon" + POLYLINE = "polyline" class MetaData(BaseMetadata): @@ -50,6 +56,11 @@ class BboxTimeStamp(BaseTimeStamp): points: BboxPoints +class PointTimeStamp(BaseTimeStamp): + x: StrictNumber + y: StrictNumber + + class EventTimeStamp(BaseTimeStamp): pass @@ -68,6 +79,21 @@ class BBoxInstanceMetadata(InstanceMetadata): point_labels: Optional[PointLabels] = Field(alias="pointLabels") +class PolygonInstanceMetadata(InstanceMetadata): + type: StrictStr = Field(VideoType.POLYGON, const=True) + point_labels: Optional[PointLabels] = Field(alias="pointLabels") + + +class PolylineInstanceMetadata(InstanceMetadata): + type: StrictStr = Field(VideoType.POLYLINE, const=True) + point_labels: Optional[PointLabels] = Field(alias="pointLabels") + + +class PointInstanceMetadata(InstanceMetadata): + type: StrictStr = Field(VideoType.POINT, const=True) + point_labels: Optional[PointLabels] = Field(alias="pointLabels") + + class EventInstanceMetadata(InstanceMetadata): type: StrictStr = Field(VideoType.EVENT, const=True) @@ -89,6 +115,18 @@ class BboxParameter(BaseParameter): timestamps: conlist(BboxTimeStamp, min_items=2) +class PolygonParameter(BaseParameter): + timestamps: conlist(StrictPointNumber, min_items=3) + + +class PolylineParameter(BaseParameter): + timestamps: conlist(StrictPointNumber) + + +class PointParameter(BaseParameter): + timestamps: conlist(PointTimeStamp, min_items=2) + + class EventParameter(BaseParameter): timestamps: conlist(EventTimeStamp, min_items=2) @@ -98,6 +136,21 @@ class BboxInstance(BaseModel): parameters: conlist(BboxParameter, min_items=1) +class PointInstance(BaseModel): + meta: PointInstanceMetadata + parameters: conlist(PointParameter, min_items=1) + + +class PolygonInstance(BaseModel): + meta: PolygonInstanceMetadata + parameters: conlist(PolylineParameter, min_items=1) + + +class PolylineInstance(BaseModel): + meta: PolylineInstanceMetadata + parameters: conlist(PolylineParameter, min_items=1) + + class EventInstance(BaseModel): meta: EventInstanceMetadata parameters: conlist(EventParameter, min_items=1) @@ -105,13 +158,14 @@ class EventInstance(BaseModel): ANNOTATION_TYPES = { VideoType.BBOX: BboxInstance, - VideoType.EVENT: EventInstance + VideoType.EVENT: EventInstance, + VideoType.POINT: PointInstance } class AnnotationInstance(BaseModel): __root__: Union[ - BboxInstance, EventInstance + BboxInstance, EventInstance, PointInstance ] @classmethod