Geometric (Box, Polygon, Line, Keypoints, Cuboid) Annotations
In this guide, we'll use the Python SDK to construct geometric annotations. Each geometric
annotation object in Nucleus has five components:
- Label of the annotation in the class taxonomy, e.g. car or pedestrian
- Geometry to define the position, size, etc. of the box / polygon / line / cuboid
- Reference ID of the item to which to apply the annotation
- Annotation ID, an optional unique (per dataset item) key to refer to the annotation
- Metadata, optional key-value pairs pertaining to the annotation, e.g. vehicle_color = blue
All geometric annotation types (box, polygon, line, cuboid) share the same structure aside from the geometry. Below, we'll explore how to construct the annotation objects, including geometries, for each type:
BoxAnnotation
BoxAnnotation
A 2D bounding box based on a given XY position, width, and height.
For more info, see our Python SDK Reference for BoxAnnotations
.
from nucleus import BoxAnnotation
box_gt = BoxAnnotation(
label="car",
x=4, # px between left edge of the box and left border of the image
y=6, # px between top edge of the box and top border of the image
width=12, # width in px
height=18, # height in px
reference_id="image_1",
annotation_id="image_1_car_box_1",
metadata={"vehicle_color": "ruby"}
)
PolygonAnnotation
PolygonAnnotation
A 2D polygon constructed by connecting 3+ vertices.
For more info, see our Python SDK Reference for PolygonAnnotations
.
from nucleus import Point, PolygonAnnotation
polygon_gt = PolygonAnnotation(
label="bus",
vertices=[ # list of vertices as Point objects
Point(x=100, y=100),
Point(150, 200),
Point(200, 100),
],
reference_id="image_2",
annotation_id="image_2_bus_polygon_1",
metadata={"vehicle_color": "sapphire"}
)
LineAnnotation
LineAnnotation
A 2D line constructed by connecting 2+ vertices (an unclosed polygon).
For more info, see our Python SDK Reference for LineAnnotations
.
from nucleus import Point, LineAnnotation
line_gt = LineAnnotation(
label="lane",
vertices=[ # list of vertices as Point objects
Point(x=100, y=100),
Point(200, 300),
Point(300, 200),
],
reference_id="image_1",
annotation_id="image_1_lane_line_1",
metadata={"position": "shoulder"},
)
KeypointsAnnotation
KeypointsAnnotation
A collection of 2D points that are named and connected via a domain-specific skeleton.
For more info, see our Python SDK Reference for KeypointsAnnotations
.
from nucleus import Keypoint, KeypointsAnnotation
keypoint_gt = KeypointsAnnotation(
label="face",
keypoints=[
Keypoint(100, 100, visible=True),
Keypoint(200, 300, visible=False),
Keypoint(visible=False),
],
names=["left_eye", "right_eye", "nose"],
skeleton=[[0, 2], [1, 2]],
reference_id="image_1",
annotation_id="image_1_face_1",
metadata={"visibility": "partial"},
)
CuboidAnnotation
CuboidAnnotation
A 3D cuboid based on a given position, dimensions, and yaw. Cannot be applied to 2D images, only 3D pointcloud DatasetItems
.
For more info, see our Python SDK Reference for CuboidAnnotations
.
from nucleus import Point3D, CuboidAnnotation
cuboid_gt = CuboidAnnotation(
label="car",
position=Point3D(100, 100, 10), # center of the cuboid
dimensions=Point3D(x=5, y=10, z=5), # length (x), width (y), height (z)
yaw=0, # rotation in rad about the Z axis
reference_id="pointcloud_1",
annotation_id="pointcloud_1_car_cuboid_1",
metadata={"vehicle_color": "emerald"}
)
Updated over 2 years ago