Skip to main content

Cuboids

Basic This example includes the following:
  • Cuboid labeling
Advanced This example includes the following:
  • Cuboid labeling
  • Radio button options
  • Checklist options
  • Text input
Cuboid Ontology Cuboid Ontology

# Import dependencies
from encord import EncordUserClient, Project
from encord.objects import Object
from encord.objects.coordinates import CuboidCoordinates

# User input
SSH_PATH = "/Users/chris-encord/ssh-private-key.txt"  # Replace with the file path to your SSH private key
PROJECT_ID = "00000000-0000-0000-0000-000000000000"  # Replace with the unique ID for the Project
BUNDLE_SIZE = 100

# Create user client using ssh key
user_client: EncordUserClient = EncordUserClient.create_with_ssh_private_key(
    ssh_private_key_path=SSH_PATH,
    # For US platform users use "https://api.us.encord.com"
    domain="https://api.encord.com",
)

# Get project for which labels are to be added
project: Project = user_client.get_project(PROJECT_ID)

# Create radio button attribute for Person type
ontology_structure = project.ontology_structure

# Find a cuboid annotation object in the project ontology
cuboid_ontology_object: Object = ontology_structure.get_child_by_title(title="Person", type_=Object)
assert cuboid_ontology_object is not None, "Cuboid object 'Person' not found in ontology."

# Dictionary of labels per data unit and per frame with Person
pcd_labels = {
    "scene-1094": {
        0: {
            "label_ref": "person_001",
            "coordinates": CuboidCoordinates(
                position=(9, 9, 9), 
                orientation=(0.11, 0.77, 0.33), 
                size=(0.2, 0.2, 0.2)
                ),
        }
    },
    "scene-0916": {
        0: [
            {
                "label_ref": "person_002",
                "coordinates": CuboidCoordinates(
                    position=(0.4, 0.4, 0.4), 
                    orientation=(0.0, 0.0, 0.4), 
                    size=(0.1, 0.1, 0.1)
                ),
            },
            {
                "label_ref": "person_003",
                "coordinates": CuboidCoordinates(
                    position=(0.2, 0.2, 0.0), 
                    orientation=(0.0, 0.0, 0.1), 
                    size=(0.5, 0.5, 0.5)
                ),
            },
            {
                "label_ref": "person_004",
                "coordinates": CuboidCoordinates(
                    position=(0.2, 0.2, 0.0), 
                    orientation=(0.0, 0.0, 0.1), 
                    size=(0.7, 0.7, 0.7)
                ),
            },
        ],
    },
    "scene-0796": {
        0: {
            "label_ref": "person_005",
            "coordinates": CuboidCoordinates(
                position=(0.4, 0.4, 0.0), 
                orientation=(0.0, 0.0, 0.4), 
                size=(0.12, 0.12, 0.12)
            ),
        },
        2: [
            {
                "label_ref": "person_006",
                "coordinates": CuboidCoordinates(
                    position=(0.1, 0.1, 0.0), 
                    orientation=(0.0, 0.0, 0.2), 
                    size=(0.5, 0.5, 0.5)
                ),
            },
            {
                "label_ref": "person_007",
                "coordinates": CuboidCoordinates(
                    position=(0.1, 0.1, 0.0), 
                    orientation=(0.0, 0.0, 0.2), 
                    size=(0.0132, 0.0132, 0.0132)
                ),
            },
            {
                "label_ref": "person_008",
                "coordinates": CuboidCoordinates(
                    position=(0.2, 0.2, 0.0), 
                    orientation=(0.0, 0.0, 0.1), 
                    size=(0.8, 0.8, 0.8)
                ),
            },
        ],
    },
    "scene-1100": {
        0: {
            "label_ref": "person_009",
            "coordinates": CuboidCoordinates(
                position=(0.4, 0.4, 0.0), 
                orientation=(0.0, 0.0, 0.4), 
                size=(0.012, 0.012, 0.012)
            ),
        },
        3: [
            {
                "label_ref": "person_010",
                "coordinates": CuboidCoordinates(
                    position=(0.4, 0.4, 0.0), 
                    orientation=(0.0, 0.0, 0.4), 
                    size=(0.5, 0.5, 0.5)
                ),
            },
            {
                "label_ref": "person_011",
                "coordinates": CuboidCoordinates(
                    position=(0.3, 0.3, 0.0), 
                    orientation=(0.0, 0.0, 0.3), 
                    size=(0.13, 0.13, 0.13)
                ),
            },
            {
                "label_ref": "person_012",
                "coordinates": CuboidCoordinates(
                    position=(0.2, 0.2, 0.0), 
                    orientation=(0.0, 0.0, 0.1), 
                    size=(0.9, 0.9, 0.9)
                ),
            },
        ],
    },
    "scene-0655": {
        13: [
            {
                "label_ref": "person_013",
                "coordinates": CuboidCoordinates(
                    position=(0.5, 0.5, 0.0), 
                    orientation=(0.0, 0.0, 0.5), 
                    size=(0.11, 0.11, 0.11)
                ),
            },
            {
                "label_ref": "person_014",
                "coordinates": CuboidCoordinates(
                    position=(0.2, 0.2, 0.0), 
                    orientation=(0.0, 0.0, 0.2), 
                    size=(0.6, 0.6, 0.6)
                ),
            },
            {
                "label_ref": "person_015",
                "coordinates": CuboidCoordinates(
                    position=(0.2, 0.2, 0.0), 
                    orientation=(0.0, 0.0, 0.1), 
                    size=(0.8, 0.8, 0.8)
                ),
            },
        ],
        14: [
            {
                "label_ref": "person_016",
                "coordinates": CuboidCoordinates(
                    position=(0.5, 0.5, 0.0), 
                    orientation=(0.0, 0.0, 0.5), 
                    size=(0.3, 0.3, 0.3)
                ),
            },
            {
                "label_ref": "person_014",
                "coordinates": CuboidCoordinates(
                    position=(0.2, 0.2, 0.0), 
                    orientation=(0.0, 0.0, 0.2), 
                    size=(0.6, 0.6, 0.6)
                ),
            },
            {
                "label_ref": "person_017",
                "coordinates": CuboidCoordinates(
                    position=(0.2, 0.2, 0.0), 
                    orientation=(0.0, 0.0, 0.1), 
                    size=(0.8, 0.8, 0.8)
                ),
            },
        ],
        15: [
            {
                "label_ref": "person_016",
                "coordinates": CuboidCoordinates(
                    position=(0.5, 0.5, 0.0), 
                    orientation=(0.0, 0.0, 0.5), 
                    size=(0.1, 0.1, 0.1)
                ),
            },
            {
                "label_ref": "person_014",
                "coordinates": CuboidCoordinates(
                    position=(0.2, 0.2, 0.0), 
                    orientation=(0.0, 0.0, 0.2), 
                    size=(0.6, 0.6, 0.6)
                ),
            },
            {
                "label_ref": "person_017",
                "coordinates": CuboidCoordinates(
                    position=(0.2, 0.2, 0.0), 
                    orientation=(0.0, 0.0, 0.1), 
                    size=(0.8, 0.8, 0.8)
                ),
            },
        ],
    },
}


# Initialize label rows
label_row_map = {}
with project.create_bundle(bundle_size=BUNDLE_SIZE) as bundle:
    for data_title in pcd_labels.keys():
        rows = project.list_label_rows_v2(data_title_eq=data_title)
        if not rows:
            print(f"Skipping: No label row found for {data_title}")
            continue
        lr = rows[0]
        lr.initialise_labels(bundle=bundle)
        label_row_map[data_title] = lr

# Create instances
label_rows_to_save = []
for data_title, frames in pcd_labels.items():
    lr = label_row_map.get(data_title)
    if not lr:
        continue

    instances_by_ref = {}

    for frame_no, items in frames.items():
        # normalize to list
        items = items if isinstance(items, list) else [items]

        for item in items:
            ref = item["label_ref"]
            coords = item["coordinates"]

            if ref not in instances_by_ref:
                instances_by_ref[ref] = cuboid_ontology_object.create_instance()

            instances_by_ref[ref].set_for_frames(coordinates=coords, frames=frame_no)

    # Add only instances that have at least one frame
    for inst in instances_by_ref.values():
        if inst.get_annotation_frames():
            lr.add_object_instance(inst)

    label_rows_to_save.append(lr)

# Save all label rows
with project.create_bundle(bundle_size=BUNDLE_SIZE) as bundle:
    for lr in label_rows_to_save:
        lr.save(bundle=bundle)
        print(f"Saved label row for {lr.data_title}")

Polylines 3D

Basic This example includes the following:
  • Cuboid labeling
Advanced This example includes the following:
  • Polyline 3D labeling
  • Radio button options
  • Checklist options
  • Text input
Polyline Ontology Polyline 3D Ontology

# Import dependencies

from encord import EncordUserClient, Project
from encord.objects import Object
from encord.objects.coordinates import PointCoordinate3D, PolylineCoordinates

# User input
SSH_PATH = "/Users/chris-encord/ssh-private-key.txt"  # Replace with the file path to your SSH private key
PROJECT_ID = "00000000-0000-0000-0000-000000000000"  # Replace with the unique ID for the Project
BUNDLE_SIZE = 100

# Create user client using ssh key
user_client: EncordUserClient = EncordUserClient.create_with_ssh_private_key(
    ssh_private_key_path=SSH_PATH,
    # For US platform users use "https://api.us.encord.com"
    domain="https://api.encord.com",
)

# Get project for which labels are to be added
project: Project = user_client.get_project(PROJECT_ID)

# Get the ontology
ontology_structure = project.ontology_structure

# Find a polyline annotation object in the project ontology
polyline_ontology_object: Object = ontology_structure.get_child_by_title(title="Object of Interest", type_=Object)
assert polyline_ontology_object is not None, "Polyline object 'Object of Interest' not found in ontology."

# Dictionary of labels per data unit and per frame with Object of Interest
pcd_labels = {
    "scene-1094": {
        0: {
            "label_ref": "ooi_001",
            "coordinates": PolylineCoordinates(
                [
                    PointCoordinate3D(2.013, 2.02, 2.015),
                    PointCoordinate3D(3.033, 3.033, 3.033),
                    PointCoordinate3D(4.053, 4.023, 4.017),
                    PointCoordinate3D(0.043, 0.013, 0.043),
                ]
            ),
        }
    },
    "scene-0916": {
        0: [
            {
                "label_ref": "ooi_002",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(3.000, 2.300, 0.000),
                        PointCoordinate3D(3.300, 3.300, 0.000),
                        PointCoordinate3D(5.300, 3.300, 0.000),
                        PointCoordinate3D(4.300, 1.300, 0.000),
                    ]
                ),
            },
            {
                "label_ref": "ooi_003",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(4.300, 5.300, 0.000),
                        PointCoordinate3D(6.300, 6.300, 0.000),
                        PointCoordinate3D(8.300, 5.300, 0.000),
                        PointCoordinate3D(7.300, 4.300, 0.000),
                    ]
                ),
            },
            {
                "label_ref": "ooi_004",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(7.300, 2.300, 0.000),
                        PointCoordinate3D(9.300, 3.300, 0.000),
                        PointCoordinate3D(11.300, 2.300, 0.000),
                        PointCoordinate3D(10.300, 1.300, 0.000),
                    ]
                ),
            },
        ],
    },
    "scene-0796": {
        0: {
            "label_ref": "ooi_005",
            "coordinates": PolylineCoordinates(
                [
                    PointCoordinate3D(1.300, 2.300, 0.000),
                    PointCoordinate3D(3.300, 3.300, 0.000),
                    PointCoordinate3D(5.300, 2.300, 0.000),
                    PointCoordinate3D(4.300, 1.300, 0.000),
                ]
            ),
        },
        2: [
            {
                "label_ref": "ooi_006",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(1.300, 2.300, 0.000),
                        PointCoordinate3D(3.300, 3.300, 0.000),
                        PointCoordinate3D(5.300, 2.300, 0.000),
                        PointCoordinate3D(4.300, 1.300, 0.000),
                    ]
                ),
            },
            {
                "label_ref": "ooi_007",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(4.300, 5.300, 0.000),
                        PointCoordinate3D(6.300, 6.300, 0.000),
                        PointCoordinate3D(8.300, 5.300, 0.000),
                        PointCoordinate3D(7.300, 4.300, 0.000),
                    ]
                ),
            },
            {
                "label_ref": "ooi_008",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(7.300, 2.300, 0.000),
                        PointCoordinate3D(9.300, 3.300, 0.000),
                        PointCoordinate3D(11.300, 2.300, 0.000),
                        PointCoordinate3D(10.300, 1.300, 0.000),
                    ]
                ),
            },
        ],
    },
    "scene-1100": {
        0: {
            "label_ref": "ooi_009",
            "coordinates": PolylineCoordinates(
                [
                    PointCoordinate3D(1.300, 2.300, 0.000),
                    PointCoordinate3D(3.300, 3.300, 0.000),
                    PointCoordinate3D(5.300, 2.300, 0.000),
                    PointCoordinate3D(4.300, 1.300, 0.000),
                ]
            ),
        },
        3: [
            {
                "label_ref": "ooi_010",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(1.300, 2.300, 0.000),
                        PointCoordinate3D(3.300, 3.300, 0.000),
                        PointCoordinate3D(5.300, 2.300, 0.000),
                        PointCoordinate3D(4.300, 1.300, 0.000),
                    ]
                ),
            },
            {
                "label_ref": "ooi_011",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(4.300, 5.300, 0.000),
                        PointCoordinate3D(6.300, 6.300, 0.000),
                        PointCoordinate3D(8.300, 5.300, 0.000),
                        PointCoordinate3D(7.300, 4.300, 0.000),
                    ]
                ),
            },
            {
                "label_ref": "ooi_012",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(7.300, 2.300, 0.000),
                        PointCoordinate3D(9.300, 3.300, 0.000),
                        PointCoordinate3D(11.300, 2.300, 0.000),
                        PointCoordinate3D(10.300, 1.300, 0.000),
                    ]
                ),
            },
        ],
    },
    "scene-0655": {
        103: [
            {
                "label_ref": "ooi_013",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(1.300, 2.300, 0.000),
                        PointCoordinate3D(3.300, 3.300, 0.000),
                        PointCoordinate3D(5.300, 2.300, 0.000),
                        PointCoordinate3D(4.300, 1.300, 0.000),
                    ]
                ),
            },
            {
                "label_ref": "ooi_014",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(4.300, 5.300, 0.000),
                        PointCoordinate3D(6.300, 6.300, 0.000),
                        PointCoordinate3D(8.300, 5.300, 0.000),
                        PointCoordinate3D(7.300, 4.300, 0.000),
                    ]
                ),
            },
            {
                "label_ref": "ooi_015",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(7.300, 2.300, 0.000),
                        PointCoordinate3D(9.300, 3.300, 0.000),
                        PointCoordinate3D(11.300, 2.300, 0.000),
                        PointCoordinate3D(10.300, 1.300, 0.000),
                    ]
                ),
            },
        ],
        104: [
            {
                "label_ref": "ooi_016",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(1.300, 2.300, 0.000),
                        PointCoordinate3D(3.300, 3.300, 0.000),
                        PointCoordinate3D(5.300, 2.300, 0.000),
                        PointCoordinate3D(4.300, 1.300, 0.000),
                    ]
                ),
            },
            {
                "label_ref": "ooi_014",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(4.130, 5.230, 0.000),
                        PointCoordinate3D(6.130, 6.230, 0.000),
                        PointCoordinate3D(8.130, 5.230, 0.000),
                        PointCoordinate3D(7.130, 4.230, 0.000),
                    ]
                ),
            },
            {
                "label_ref": "ooi_017",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(7.300, 2.300, 0.000),
                        PointCoordinate3D(9.300, 3.300, 0.000),
                        PointCoordinate3D(11.300, 2.300, 0.000),
                        PointCoordinate3D(10.300, 1.300, 0.000),
                    ]
                ),
            },
        ],
        105: [
            {
                "label_ref": "ooi_016",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(1.130, 2.230, 0.000),
                        PointCoordinate3D(3.130, 3.230, 0.000),
                        PointCoordinate3D(5.130, 2.230, 0.000),
                        PointCoordinate3D(4.130, 1.230, 0.000),
                    ]
                ),
            },
            {
                "label_ref": "ooi_014",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(4.330, 5.530, 0.000),
                        PointCoordinate3D(6.330, 6.530, 0.000),
                        PointCoordinate3D(8.330, 5.530, 0.000),
                        PointCoordinate3D(7.330, 4.530, 0.000),
                    ]
                ),
            },
            {
                "label_ref": "ooi_017",
                "coordinates": PolylineCoordinates(
                    [
                        PointCoordinate3D(7.130, 2.230, 0.000),
                        PointCoordinate3D(9.130, 3.230, 0.000),
                        PointCoordinate3D(11.130, 2.230, 0.000),
                        PointCoordinate3D(10.130, 1.230, 0.000),
                    ]
                ),
            },
        ],
    },
}

# Initialize label rows
label_row_map = {}
with project.create_bundle(bundle_size=BUNDLE_SIZE) as bundle:
    for data_title in pcd_labels.keys():
        rows = project.list_label_rows_v2(data_title_eq=data_title)
        if not rows:
            print(f"Skipping: No label row found for {data_title}")
            continue
        lr = rows[0]
        lr.initialise_labels(bundle=bundle)
        label_row_map[data_title] = lr

# Create instances
label_rows_to_save = []
for data_title, frames in pcd_labels.items():
    lr = label_row_map.get(data_title)
    if not lr:
        continue

    instances_by_ref = {}

    for frame_no, items in frames.items():
        # normalize to list
        items = items if isinstance(items, list) else [items]

        for item in items:
            ref = item["label_ref"]
            coords = item["coordinates"]

            if ref not in instances_by_ref:
                instances_by_ref[ref] = polyline_ontology_object.create_instance()

            instances_by_ref[ref].set_for_frames(coordinates=coords, frames=frame_no)

    # Add only instances that have at least one frame
    for inst in instances_by_ref.values():
        if inst.get_annotation_frames():
            lr.add_object_instance(inst)

    label_rows_to_save.append(lr)

# Save all label rows
with project.create_bundle(bundle_size=BUNDLE_SIZE) as bundle:
    for lr in label_rows_to_save:
        lr.save(bundle=bundle)
        print(f"Saved label row for {lr.data_title}")

Keypoints 3D

Basic This example includes the following:
  • Cuboid labeling
Advanced This example includes the following:
  • Keypoint 3D labeling
  • Radio button options
  • Checklist options
  • Text input
Keypoint Ontology Keypoint 3D Ontology

# Import dependencies
from encord import EncordUserClient, Project
from encord.objects import Object
from encord.objects.coordinates import PointCoordinate3D

# User input
SSH_PATH = "/Users/chris-encord/ssh-private-key.txt"  # Replace with the file path to your SSH private key
PROJECT_ID = "00000000-0000-0000-0000-000000000000"  # Replace with the unique ID for the Project
BUNDLE_SIZE = 100

# Create user client using ssh key
user_client: EncordUserClient = EncordUserClient.create_with_ssh_private_key(
    ssh_private_key_path=SSH_PATH,
    # For US platform users use "https://api.us.encord.com"
    domain="https://api.encord.com",
)

# Get project for which labels are to be added
project: Project = user_client.get_project(PROJECT_ID)

# Create radio button attribute for Person type
ontology_structure = project.ontology_structure

# Find a keypoint annotation object in the project ontology
keypoint_ontology_object: Object = ontology_structure.get_child_by_title(title="Point of Interest", type_=Object)
assert keypoint_ontology_object is not None, "Keypoint object 'Point of Interest' not found in ontology."

# Dictionary of labels per data unit and per frame with Point of Interest
pcd_labels = {
    "scene-1094": {
        1: {
            "label_ref": "poi_001",
            "coordinates": PointCoordinate3D(x=0.01, y=0.02, z=0.03)
        }
    },
    "scene-0916": {
        1: [
            {
                "label_ref": "poi_002",
                "coordinates": PointCoordinate3D(x=0.03, y=0.03, z=0.03)
            },
            {
                "label_ref": "poi_003",
                "coordinates": PointCoordinate3D(x=0.5, y=0.4, z=0.3)
            },
            {
                "label_ref": "poi_004",
                "coordinates": PointCoordinate3D(x=0.9, y=0.3, z=0.3)
            },
        ],
    },
    "scene-0796": {
        0: {
            "label_ref": "poi_005",
            "coordinates": PointCoordinate3D(x=0.05, y=0.02, z=0.03)
        },
        2: [
            {
                "label_ref": "poi_006",
                "coordinates": PointCoordinate3D(x=0.3, y=0.3, z=0.3)
            },
            {
                "label_ref": "poi_007",
                "coordinates": PointCoordinate3D(x=0.4, y=0.5, z=0.3)
            },
            {
                "label_ref": "poi_008",
                "coordinates": PointCoordinate3D(x=0.11, y=0.2, z=0.3)
            },
        ],
    },
    "scene-1100": {
        0: {
            "label_ref": "poi_009",
            "coordinates": PointCoordinate3D(x=0.1, y=0.2, z=0.3)
        },
        3: [
            {
                "label_ref": "poi_010",
                "coordinates": PointCoordinate3D(x=0.3, y=0.3, z=0.3)
            },
            {
                "label_ref": "poi_011",
                "coordinates": PointCoordinate3D(x=0.8, y=0.5, z=0.3)
            },
            {
                "label_ref": "poi_012",
                "coordinates": PointCoordinate3D(x=0.11, y=0.2, z=0.3)
            },
        ],
    },
    "scene-0655": {
        1: [
            {
                "label_ref": "poi_013",
                "coordinates": PointCoordinate3D(x=0.2, y=0.1, z=0.3)
            },
            {
                "label_ref": "poi_014",
                "coordinates": PointCoordinate3D(x=0.6, y=0.6, z=0.3)
            },
            {
                "label_ref": "poi_015",
                "coordinates": PointCoordinate3D(x=0.10, y=0.1, z=0.3)
            },
        ],
        2: [
            {
                "label_ref": "poi_016",
                "coordinates": PointCoordinate3D(x=0.4, y=0.1, z=0.3)
            },
            {
                "label_ref": "poi_014",
                "coordinates": PointCoordinate3D(x=0.8, y=0.5, z=0.3)
            },
            {
                "label_ref": "poi_017",
                "coordinates": PointCoordinate3D(x=0.11, y=0.2, z=0.3)
            },
        ],
        3: [
            {
                "label_ref": "poi_016",
                "coordinates": PointCoordinate3D(x=0.5, y=0.2, z=0.3)
            },
            {
                "label_ref": "poi_014",
                "coordinates": PointCoordinate3D(x=0.7, y=0.4, z=0.3)
            },
            {
                "label_ref": "poi_017",
                "coordinates": PointCoordinate3D(x=0.9, y=0.3, z=0.3)
            },
        ],
    },
}


# Initialize label rows
label_row_map = {}
with project.create_bundle(bundle_size=BUNDLE_SIZE) as bundle:
    for data_title in pcd_labels.keys():
        rows = project.list_label_rows_v2(data_title_eq=data_title)
        if not rows:
            print(f"Skipping: No label row found for {data_title}")
            continue
        lr = rows[0]
        lr.initialise_labels(bundle=bundle)
        label_row_map[data_title] = lr

# Create instances
label_rows_to_save = []
for data_title, frames in pcd_labels.items():
    lr = label_row_map.get(data_title)
    if not lr:
        continue

    instances_by_ref = {}

    for frame_no, items in frames.items():
        # normalize to list
        items = items if isinstance(items, list) else [items]

        for item in items:
            ref = item["label_ref"]
            coords = item["coordinates"]

            if ref not in instances_by_ref:
                instances_by_ref[ref] = keypoint_ontology_object.create_instance()

            instances_by_ref[ref].set_for_frames(coordinates=coords, frames=frame_no)

    # Add only instances that have at least one frame
    for inst in instances_by_ref.values():
        if inst.get_annotation_frames():
            lr.add_object_instance(inst)

    label_rows_to_save.append(lr)

# Save all label rows
with project.create_bundle(bundle_size=BUNDLE_SIZE) as bundle:
    for lr in label_rows_to_save:
        lr.save(bundle=bundle)
        print(f"Saved label row for {lr.data_title}")

Segmentations

COMING SOON!
⌘I