Module datatap.droplet.instance

Expand source code
from __future__ import annotations

from typing import Dict, Mapping, Optional

from typing_extensions import TypedDict

from ..utils import basic_repr
from .attributes import AttributeValues, AttributeValuesJson
from .bounding_box import BoundingBox, BoundingBoxJson
from .keypoint import Keypoint, KeypointJson
from .segmentation import Segmentation, SegmentationJson


class InstanceJson(TypedDict, total = False):
        """
        The JSON serialization of an `Instance`.
        """
        id: str
        boundingBox: BoundingBoxJson
        segmentation: SegmentationJson
        keypoints: Mapping[str, Optional[KeypointJson]]
        attributes: Mapping[str, AttributeValuesJson]

class Instance:
        """
        A single appearance of an object of a particular class within a given image.
        """

        id: Optional[str]
        """
        A unique id for this instance (within the context of its containing
        annotation).  Multiple instances with the same id should be interpreted
        to be the same object.
        """

        bounding_box: Optional[BoundingBox]
        """
        The bounding box of this instance.
        """

        segmentation: Optional[Segmentation]
        """
        The segmentation of this instance.
        """

        keypoints: Optional[Mapping[str, Optional[Keypoint]]]
        """
        A mapping from keypoint name to the keypoint within this instance.  If a key
        maps to `None`, then the annotation is reporting the _absence of_ that
        keypoint (i.e., that it is not visible in the image and does not have an
        inferrable position in the image).
        """

        attributes: Optional[Mapping[str, AttributeValues]]
        """
        A mapping from attribute name to value.
        """

        @staticmethod
        def from_json(json: InstanceJson) -> Instance:
                """
                Creates an `Instance` from an `InstanceJson`.
                """
                return Instance(
                        id = json.get("id"),
                        bounding_box = BoundingBox.from_json(json["boundingBox"]) if "boundingBox" in json else None,
                        segmentation = Segmentation.from_json(json["segmentation"]) if "segmentation" in json else None,
                        keypoints = {
                                name: Keypoint.from_json(keypoint) if keypoint is not None else None
                                for name, keypoint in json["keypoints"].items()
                        } if "keypoints" in json else None,
                        attributes = {
                                k: AttributeValues.from_json(v) for k, v in json["attributes"].items()
                        } if "attributes" in json else None
                )

        def __init__(
                self,
                *,
                id: Optional[str] = None,
                bounding_box: Optional[BoundingBox] = None,
                segmentation: Optional[Segmentation] = None,
                keypoints: Optional[Mapping[str, Optional[Keypoint]]] = None,
                attributes: Optional[Mapping[str, AttributeValues]] = None
        ):
                self.id = id
                self.bounding_box = bounding_box
                self.segmentation = segmentation
                self.keypoints = keypoints
                self.attributes = attributes

        def __repr__(self) -> str:
                return basic_repr(
                        "Instance",
                        id = self.id,
                        bounding_box = self.bounding_box,
                        segmentation = self.segmentation,
                        keypoints = self.keypoints,
                        attributes = self.attributes
                )

        def __eq__(self, other: object) -> bool:
                if not isinstance(other, Instance):
                        return NotImplemented
                return (
                        self.id == other.id
                        and self.bounding_box == other.bounding_box
                        and self.segmentation == other.segmentation
                        and self.keypoints == other.keypoints
                        and self.attributes == other.attributes
                )

        def to_json(self) -> InstanceJson:
                """
                Serializes an `Instance` into an `InstanceJson`.
                """
                json: InstanceJson = {}

                if self.id is not None:
                        json["id"] = self.id

                if self.bounding_box is not None:
                        json["boundingBox"] = self.bounding_box.to_json()

                if self.segmentation is not None:
                        json["segmentation"] = self.segmentation.to_json()

                if self.keypoints is not None:
                        keypoints: Dict[str, Optional[KeypointJson]] = {}

                        for name, keypoint in self.keypoints.items():
                                keypoints[name] = keypoint.to_json() if keypoint is not None else None

                        json["keypoints"] = keypoints

                if self.attributes is not None:
                        json["attributes"] = {
                                k: v.to_json() for k, v in self.attributes.items()
                        }

                return json

Classes

class Instance (*, id: Optional[str] = None, bounding_box: Optional[BoundingBox] = None, segmentation: Optional[Segmentation] = None, keypoints: Optional[Mapping[str, Optional[Keypoint]]] = None, attributes: Optional[Mapping[str, AttributeValues]] = None)

A single appearance of an object of a particular class within a given image.

Expand source code
class Instance:
        """
        A single appearance of an object of a particular class within a given image.
        """

        id: Optional[str]
        """
        A unique id for this instance (within the context of its containing
        annotation).  Multiple instances with the same id should be interpreted
        to be the same object.
        """

        bounding_box: Optional[BoundingBox]
        """
        The bounding box of this instance.
        """

        segmentation: Optional[Segmentation]
        """
        The segmentation of this instance.
        """

        keypoints: Optional[Mapping[str, Optional[Keypoint]]]
        """
        A mapping from keypoint name to the keypoint within this instance.  If a key
        maps to `None`, then the annotation is reporting the _absence of_ that
        keypoint (i.e., that it is not visible in the image and does not have an
        inferrable position in the image).
        """

        attributes: Optional[Mapping[str, AttributeValues]]
        """
        A mapping from attribute name to value.
        """

        @staticmethod
        def from_json(json: InstanceJson) -> Instance:
                """
                Creates an `Instance` from an `InstanceJson`.
                """
                return Instance(
                        id = json.get("id"),
                        bounding_box = BoundingBox.from_json(json["boundingBox"]) if "boundingBox" in json else None,
                        segmentation = Segmentation.from_json(json["segmentation"]) if "segmentation" in json else None,
                        keypoints = {
                                name: Keypoint.from_json(keypoint) if keypoint is not None else None
                                for name, keypoint in json["keypoints"].items()
                        } if "keypoints" in json else None,
                        attributes = {
                                k: AttributeValues.from_json(v) for k, v in json["attributes"].items()
                        } if "attributes" in json else None
                )

        def __init__(
                self,
                *,
                id: Optional[str] = None,
                bounding_box: Optional[BoundingBox] = None,
                segmentation: Optional[Segmentation] = None,
                keypoints: Optional[Mapping[str, Optional[Keypoint]]] = None,
                attributes: Optional[Mapping[str, AttributeValues]] = None
        ):
                self.id = id
                self.bounding_box = bounding_box
                self.segmentation = segmentation
                self.keypoints = keypoints
                self.attributes = attributes

        def __repr__(self) -> str:
                return basic_repr(
                        "Instance",
                        id = self.id,
                        bounding_box = self.bounding_box,
                        segmentation = self.segmentation,
                        keypoints = self.keypoints,
                        attributes = self.attributes
                )

        def __eq__(self, other: object) -> bool:
                if not isinstance(other, Instance):
                        return NotImplemented
                return (
                        self.id == other.id
                        and self.bounding_box == other.bounding_box
                        and self.segmentation == other.segmentation
                        and self.keypoints == other.keypoints
                        and self.attributes == other.attributes
                )

        def to_json(self) -> InstanceJson:
                """
                Serializes an `Instance` into an `InstanceJson`.
                """
                json: InstanceJson = {}

                if self.id is not None:
                        json["id"] = self.id

                if self.bounding_box is not None:
                        json["boundingBox"] = self.bounding_box.to_json()

                if self.segmentation is not None:
                        json["segmentation"] = self.segmentation.to_json()

                if self.keypoints is not None:
                        keypoints: Dict[str, Optional[KeypointJson]] = {}

                        for name, keypoint in self.keypoints.items():
                                keypoints[name] = keypoint.to_json() if keypoint is not None else None

                        json["keypoints"] = keypoints

                if self.attributes is not None:
                        json["attributes"] = {
                                k: v.to_json() for k, v in self.attributes.items()
                        }

                return json

Class variables

var attributes : Optional[Mapping[str, AttributeValues]]

A mapping from attribute name to value.

var bounding_box : Optional[BoundingBox]

The bounding box of this instance.

var id : Optional[str]

A unique id for this instance (within the context of its containing annotation). Multiple instances with the same id should be interpreted to be the same object.

var keypoints : Optional[Mapping[str, Optional[Keypoint]]]

A mapping from keypoint name to the keypoint within this instance. If a key maps to None, then the annotation is reporting the absence of that keypoint (i.e., that it is not visible in the image and does not have an inferrable position in the image).

var segmentation : Optional[Segmentation]

The segmentation of this instance.

Static methods

def from_json(json: InstanceJson) ‑> Instance

Creates an Instance from an InstanceJson.

Expand source code
@staticmethod
def from_json(json: InstanceJson) -> Instance:
        """
        Creates an `Instance` from an `InstanceJson`.
        """
        return Instance(
                id = json.get("id"),
                bounding_box = BoundingBox.from_json(json["boundingBox"]) if "boundingBox" in json else None,
                segmentation = Segmentation.from_json(json["segmentation"]) if "segmentation" in json else None,
                keypoints = {
                        name: Keypoint.from_json(keypoint) if keypoint is not None else None
                        for name, keypoint in json["keypoints"].items()
                } if "keypoints" in json else None,
                attributes = {
                        k: AttributeValues.from_json(v) for k, v in json["attributes"].items()
                } if "attributes" in json else None
        )

Methods

def to_json(self) ‑> InstanceJson

Serializes an Instance into an InstanceJson.

Expand source code
def to_json(self) -> InstanceJson:
        """
        Serializes an `Instance` into an `InstanceJson`.
        """
        json: InstanceJson = {}

        if self.id is not None:
                json["id"] = self.id

        if self.bounding_box is not None:
                json["boundingBox"] = self.bounding_box.to_json()

        if self.segmentation is not None:
                json["segmentation"] = self.segmentation.to_json()

        if self.keypoints is not None:
                keypoints: Dict[str, Optional[KeypointJson]] = {}

                for name, keypoint in self.keypoints.items():
                        keypoints[name] = keypoint.to_json() if keypoint is not None else None

                json["keypoints"] = keypoints

        if self.attributes is not None:
                json["attributes"] = {
                        k: v.to_json() for k, v in self.attributes.items()
                }

        return json
class InstanceJson (*args, **kwargs)

The JSON serialization of an Instance.

Expand source code
class InstanceJson(TypedDict, total = False):
        """
        The JSON serialization of an `Instance`.
        """
        id: str
        boundingBox: BoundingBoxJson
        segmentation: SegmentationJson
        keypoints: Mapping[str, Optional[KeypointJson]]
        attributes: Mapping[str, AttributeValuesJson]

Ancestors

  • builtins.dict

Class variables

var attributes : Mapping[str, Union[Sequence[AttributeValueJson], str]]
var boundingBoxBoundingBoxJson
var id : str
var keypoints : Mapping[str, Optional[KeypointJson]]
var segmentationSegmentationJson