Source code for supervisely.pointcloud_annotation.pointcloud_episode_frame

from __future__ import annotations
from typing import Optional, List, Dict

from supervisely._utils import take_with_default
from supervisely.video_annotation.frame import Frame
from supervisely.video_annotation.key_id_map import KeyIdMap
from supervisely.pointcloud_annotation.pointcloud_figure import PointcloudFigure
from supervisely.pointcloud_annotation.pointcloud_episode_object_collection import PointcloudEpisodeObjectCollection

[docs]class PointcloudEpisodeFrame(Frame): """ PointcloudEpisodeFrame object for :class:`PointcloudEpisodeAnnotation<supervisely.pointcloud_annotation.pointcloud_episode_annotation.PointcloudEpisodeAnnotation>`. :class:`PointcloudEpisodeFrame<PointcloudEpisodeFrame>` object is immutable. :param index: Index of the PointcloudEpisodeFrame. :type index: int :param figures: List of :class:`PointcloudFigure<supervisely.pointcloud_annotation.pointcloud_figure.PointcloudFigure>`. :type figures: list, optional :Usage example: .. code-block:: python import supervisely as sly from supervisely.geometry.cuboid_3d import Cuboid3d, Vector3d from supervisely.pointcloud_annotation.pointcloud_episode_object_collection import PointcloudEpisodeObjectCollection # Create pointcloud object obj_class_car = sly.ObjClass('car', Cuboid3d) pointcloud_obj_car = sly.PointcloudEpisodeObject(obj_class_car) objects = PointcloudEpisodeObjectCollection([pointcloud_obj_car]) # Create figure frame_index = 7 position, rotation, dimension = Vector3d(-3.4, 28.9, -0.7), Vector3d(0., 0, -0.03), Vector3d(1.8, 3.9, 1.6) cuboid = Cuboid3d(position, rotation, dimension) figure = sly.PointcloudFigure(pointcloud_obj_car, cuboid, frame_index=frame_index) frame = sly.PointcloudEpisodeFrame(frame_index, figures=[figure]) print(frame.to_json()) # Output: { # "figures": [ # { # "geometry": { # "dimensions": { "x": 1.8, "y": 3.9, "z": 1.6 }, # "position": { "x": -3.4, "y": 28.9, "z": -0.7 }, # "rotation": { "x": 0.0, "y": 0, "z": -0.03 } # }, # "geometryType": "cuboid_3d", # "key": "cd61788d6faa401b9723f066f92a8a30", # "objectKey": "c081cb9f34e54ff2bd85e04e7713ed76" # } # ], # "index": 7 # } """ figure_type = PointcloudFigure def __init__(self, index: int, figures: Optional[List[PointcloudFigure]]=None): super().__init__(index, figures)
[docs] @classmethod def from_json( cls, data: Dict, objects: PointcloudEpisodeObjectCollection, frames_count: Optional[int]=None, key_id_map: Optional[KeyIdMap]=None ) -> PointcloudEpisodeFrame: """ Convert a json dict to PointcloudEpisodeFrame. Read more about `Supervisely format <https://docs.supervise.ly/data-organization/00_ann_format_navi>`_. :param data: Dict in json format. :type data: dict :param objects: PointcloudEpisodeObjectCollection object. :type objects: PointcloudEpisodeObjectCollection :param frames_count: Number of frames in point cloud. :type frames_count: int, optional :param key_id_map: KeyIdMap object. :type key_id_map: KeyIdMap, optional :raises: :class:`ValueError` if frame index < 0 and if frame index > number of frames in point cloud :return: PointcloudEpisodeFrame object :rtype: :class:`PointcloudEpisodeFrame` :Usage example: .. code-block:: python import supervisely as sly from supervisely.geometry.cuboid_3d import Cuboid3d, Vector3d from supervisely.pointcloud_annotation.pointcloud_episode_object_collection import PointcloudEpisodeObjectCollection obj_class_car = sly.ObjClass('car', Cuboid3d) pointcloud_obj_car = sly.PointcloudEpisodeObject(obj_class_car) objects = PointcloudEpisodeObjectCollection([pointcloud_obj_car]) frame_index = 7 position, rotation, dimension = Vector3d(-3.4, 28.9, -0.7), Vector3d(0., 0, -0.03), Vector3d(1.8, 3.9, 1.6) cuboid = Cuboid3d(position, rotation, dimension) figure = sly.PointcloudFigure(pointcloud_obj_car, cuboid, frame_index=frame_index) frame = sly.PointcloudEpisodeFrame(frame_index, figures=[figure]) frame_json = frame.to_json() frame_from_json = sly.PointcloudEpisodeFrame.from_json(frame_json, objects) """ return super().from_json(data, objects, frames_count, key_id_map)
def clone(self, index: Optional[int] = None, figures: Optional[List[PointcloudFigure]] = None) -> PointcloudEpisodeFrame: return super().clone(index, figures)