ObjectInstance Objects

class ObjectInstance()

An object instance is an object that has coordinates and can be placed on one or multiple frames in a label row.

is_assigned_to_label_row

def is_assigned_to_label_row() -> Optional[LabelRowV2]

Checks if the object instance is assigned to a label row.

Returns:

The LabelRowV2 instance if assigned, otherwise None.

object_hash

@property
def object_hash() -> str

A unique identifier for the object instance.

Returns:

The unique object hash.

ontology_item

@property
def ontology_item() -> Object

The ontology object associated with this instance.

Returns:

The ontology object.

feature_hash

@property
def feature_hash() -> str

Feature node hash from the project ontology.

Returns:

The feature node hash.

object_name

@property
def object_name() -> str

Object name from the project ontology.

Returns:

The object name.

get_answer

def get_answer(
    attribute: Attribute,
    filter_answer: Union[str, Option, Iterable[Option], None] = None,
    filter_frame: Optional[int] = None,
    is_dynamic: Optional[bool] = None
) -> Union[str, Option, Iterable[Option], AnswersForFrames, None]

Get the answer set for a given ontology Attribute. Returns None if the attribute is not yet answered.

For the ChecklistAttribute, it returns None if and only if the attribute is nested and the parent is unselected. Otherwise, if not yet answered it will return an empty list.

Arguments:

  • attribute - The ontology attribute to get the answer for.
  • filter_answer - A filter for a specific answer value. Only applies to dynamic attributes.
  • filter_frame - A filter for a specific frame. Only applies to dynamic attributes.
  • is_dynamic - Optionally specify whether a dynamic answer is expected or not. This will throw if it is set incorrectly according to the attribute. Set this to narrow down the return type.

Returns:

If the attribute is static, then the answer value is returned, assuming an answer value has already been set. If the attribute is dynamic, the AnswersForFrames object is returned.

set_answer

def set_answer(answer: Union[str, Option, Sequence[Option]],
               attribute: Optional[Attribute] = None,
               frames: Optional[Frames] = None,
               overwrite: bool = False,
               manual_annotation: bool = DEFAULT_MANUAL_ANNOTATION) -> None

Set the answer for a given ontology Attribute. This is the equivalent of e.g. selecting a checkbox in the UI after drawing the ObjectInstance. There is only one answer per ObjectInstance per Attribute, unless the attribute is dynamic (check the args list for more instructions on how to set dynamic answers).

Arguments:

  • answer - The answer to set.
  • attribute - The ontology attribute to set the answer for. If not set, this will be attempted to be inferred. For answers to :class:encord.objects.common.RadioAttribute or :class:encord.objects.common.ChecklistAttribute, this can be inferred automatically. For :class:encord.objects.common.TextAttribute, this will only be inferred there is only one possible TextAttribute to set for the entire object instance. Otherwise, a :class:encord.exceptionsLabelRowError will be thrown.
  • frames - Only relevant for dynamic attributes. The frames to set the answer for. If None, the answer is set for all frames that this object currently has set coordinates for (also overwriting current answers). This will not automatically propagate the answer to new frames that are added in the future. If this is anything but None for non-dynamic attributes, this will throw a ValueError.
  • overwrite - If True, the answer will be overwritten if it already exists. If False, this will throw a LabelRowError if the answer already exists. This argument is ignored for dynamic attributes.
  • manual_annotation - If True, the answer will be marked as manually annotated. This arg defaults to DEFAULT_MANUAL_ANNOTATION.

set_answer_from_list

def set_answer_from_list(answers_list: List[Dict[str, Any]]) -> None

This is a low level helper function and should usually not be used directly.

Sets the answer for the classification from a dictionary.

Arguments:

  • answers_list - The list of dictionaries to set the answer from.

delete_answer

def delete_answer(attribute: Attribute,
                  filter_answer: Optional[Union[str, Option,
                                                Iterable[Option]]] = None,
                  filter_frame: Optional[int] = None) -> None

Reset the answer of an attribute as if it was never set.

Arguments:

  • attribute - The attribute to delete the answer for.
  • filter_answer - A filter for a specific answer value. Delete only answers with the provided value. Only applies to dynamic attributes.
  • filter_frame - A filter for a specific frame. Only applies to dynamic attributes.

check_within_range

def check_within_range(frame: int) -> None

Check if the given frame is within the acceptable range.

Arguments:

  • frame - The frame number to check.

Raises:

  • LabelRowError - If the frame is out of the acceptable range.

set_for_frames

def set_for_frames(coordinates: Coordinates,
                   frames: Frames = 0,
                   *,
                   overwrite: bool = False,
                   created_at: Optional[datetime] = None,
                   created_by: Optional[str] = None,
                   last_edited_at: Optional[datetime] = None,
                   last_edited_by: Optional[str] = None,
                   confidence: Optional[float] = None,
                   manual_annotation: Optional[bool] = None,
                   reviews: Optional[List[dict]] = None,
                   is_deleted: Optional[bool] = None) -> None

Place the object onto the specified frame(s).

If the object already exists on the frame and overwrite is set to True, the currently specified values will be overwritten.

Arguments:

  • coordinates - The coordinates of the object in the frame. This will throw an error if the type of the coordinates does not match the type of the attribute in the object instance.
  • frames - The frames to add the object instance to. Defaults to the first frame for convenience.
  • overwrite - If True, overwrite existing data for the given frames. This will not reset all the non-specified values. If False and data already exists for the given frames, raises an error.
  • created_at - Optionally specify the creation time of the object instance on this frame. Defaults to datetime.now().
  • created_by - Optionally specify the creator of the object instance on this frame. Defaults to the current SDK user.
  • last_edited_at - Optionally specify the last edit time of the object instance on this frame. Defaults to datetime.now().
  • last_edited_by - Optionally specify the last editor of the object instance on this frame. Defaults to the current SDK user.
  • confidence - Optionally specify the confidence of the object instance on this frame. Defaults to 1.0.
  • manual_annotation - Optionally specify whether the object instance on this frame was manually annotated. Defaults to True.
  • reviews - Should only be set by internal functions.
  • is_deleted - Should only be set by internal functions.

get_annotation

def get_annotation(frame: Union[int, str] = 0) -> Annotation

Get the annotation for the object instance on the specified frame.

Arguments:

  • frame - Either the frame number or the image hash if the data type is an image or image group. Defaults to the first frame.

Returns:

  • Annotation - The annotation for the specified frame.

Raises:

  • LabelRowError - If the frame is not present in the label row.

copy

def copy() -> ObjectInstance

Create an exact copy of this ObjectInstance.

The new copy will have a new object hash and will not be associated with any LabelRowV2. This is useful for adding the semantically same ObjectInstance to multiple LabelRowV2s.

Returns:

  • ObjectInstance - A new ObjectInstance that is a copy of the current instance.

get_annotations

def get_annotations() -> List[Annotation]

Get all annotations for the object instance on all frames it has been placed on.

Returns:

  • List[Annotation] - A list of ObjectInstance.Annotation in order of available frames.

remove_from_frames

def remove_from_frames(frames: Frames) -> None

Remove the object instance from the specified frames.

Arguments:

  • frames - The frames from which to remove the object instance.

is_valid

def is_valid() -> None

Check if the ObjectInstance is valid.

Raises:

  • LabelRowError - If the ObjectInstance is not on any frames.

are_dynamic_answers_valid

def are_dynamic_answers_valid() -> None

Validate if there are any dynamic answers on frames that have no coordinates.

Raises:

  • LabelRowError - If there are dynamic answers on frames without coordinates.

Annotation Objects

class Annotation()

Represents an annotation for a specific frame of an ObjectInstance.

Allows setting or getting data for the ObjectInstance on the given frame number.

created_by

@created_by.setter
def created_by(created_by: Optional[str]) -> None

Set the created_by field with a user email or None if it should default to the current user of the SDK.

last_edited_by

@last_edited_by.setter
def last_edited_by(last_edited_by: Optional[str]) -> None

Set the last_edited_by field with a user email or None if it should default to the current user of the SDK.

reviews

@property
def reviews() -> Optional[List[Dict[str, Any]]]

Get the reviews for this object on this frame.

Returns:

Optional[List[Dict[str, Any]]]: A list of review dictionaries, if any.

is_deleted

@property
def is_deleted() -> Optional[bool]

Check if the object instance is marked as deleted on this frame.

Returns:

  • Optional[bool] - True if deleted, False otherwise, or None if not set.

FrameInfo Objects

@dataclass
class FrameInfo()

Contains metadata information about a frame.

created_by

None defaults to the user of the SDK once uploaded to the server.

last_edited_by

None defaults to the user of the SDK once uploaded to the server.

from_dict

@staticmethod
def from_dict(d: dict) -> ObjectInstance.FrameInfo

Create a FrameInfo instance from a dictionary.

Arguments:

  • d - A dictionary containing frame information.

Returns:

  • ObjectInstance.FrameInfo - An instance of FrameInfo.

update_from_optional_fields

def update_from_optional_fields(created_at: Optional[datetime] = None,
                                created_by: Optional[str] = None,
                                last_edited_at: Optional[datetime] = None,
                                last_edited_by: Optional[str] = None,
                                confidence: Optional[float] = None,
                                manual_annotation: Optional[bool] = None,
                                reviews: Optional[List[Dict[str, Any]]] = None,
                                is_deleted: Optional[bool] = None) -> None

Update the FrameInfo fields with the specified values.

Arguments:

  • created_at - Optional creation time.
  • created_by - Optional creator identifier.
  • last_edited_at - Optional last edited time.
  • last_edited_by - Optional last editor identifier.
  • confidence - Optional confidence value.
  • manual_annotation - Optional manual annotation flag.
  • reviews - Optional list of reviews.
  • is_deleted - Optional deleted flag.

FrameData Objects

@dataclass
class FrameData()

Data class for storing frame-specific data.

Attributes:

  • coordinates Coordinates - The coordinates associated with the frame.
  • object_frame_instance_info ObjectInstance.FrameInfo - The frame’s metadata information.

check_coordinate_type

def check_coordinate_type(coordinates: Coordinates,
                          ontology_object: Object) -> None

Check if the coordinate type matches the expected type for the ontology object.

Arguments:

  • coordinates Coordinates - The coordinates to check.
  • ontology_object Object - The ontology object to check against.

Raises:

  • LabelRowError - If the coordinate type does not match the expected type.