Source code for regenbogen.interfaces

"""
Core data interfaces for regenbogen framework.

These interfaces define the standardized data structures used for communication
between nodes in the pipeline.
"""

from dataclasses import dataclass, field
from typing import Any, Dict, List, Optional

import numpy as np
import numpy.typing as npt


[docs] @dataclass class ObjectModel: """ Object model interface containing mesh or reference pointcloud data. Attributes: mesh_vertices: Mesh vertices as numpy array (N, 3) or None mesh_faces: Mesh faces as numpy array (M, 3) or None mesh_normals: Mesh normals as numpy array (N, 3) or None pointcloud: PointCloud instance or None name: Object name/identifier metadata: Additional metadata dictionary """ mesh_vertices: Optional[npt.NDArray[np.float32]] = None mesh_faces: Optional[npt.NDArray[np.int32]] = None mesh_normals: Optional[npt.NDArray[np.float32]] = None pointcloud: Optional["PointCloud"] = None name: str = "" metadata: Dict[str, Any] = field(default_factory=dict)
[docs] @dataclass class Features: """ Features interface containing descriptors and embeddings. Attributes: descriptors: Feature descriptors as numpy array or None keypoints: 2D keypoints as numpy array (N, 2) or None keypoints_3d: 3D keypoints as numpy array (N, 3) or None embeddings: Feature embeddings as numpy array or None metadata: Additional metadata dictionary """ descriptors: Optional[npt.NDArray[np.float32]] = None keypoints: Optional[npt.NDArray[np.float32]] = None keypoints_3d: Optional[npt.NDArray[np.float32]] = None embeddings: Optional[npt.NDArray[np.float32]] = None metadata: Dict[str, Any] = field(default_factory=dict)
[docs] @dataclass class Pose: """ Pose interface containing rotation, translation and confidence scores. Attributes: rotation: Rotation matrix (3, 3) or quaternion (4,) translation: Translation vector (3,) scores: Confidence scores dictionary metadata: Additional metadata dictionary """ rotation: npt.NDArray[np.float64] translation: npt.NDArray[np.float64] scores: Dict[str, float] = field(default_factory=dict) metadata: Dict[str, Any] = field(default_factory=dict)
[docs] @dataclass class BoundingBoxes: """ Bounding boxes interface for object detection results. Attributes: boxes: Bounding boxes as numpy array (N, 4) in [x1, y1, x2, y2] format scores: Confidence scores as numpy array (N,) labels: Class labels as numpy array (N,) class_names: List of class names corresponding to labels metadata: Additional metadata dictionary """ boxes: npt.NDArray[np.float32] scores: npt.NDArray[np.float32] labels: npt.NDArray[np.int32] class_names: List[str] = field(default_factory=list) metadata: Dict[str, Any] = field(default_factory=dict)
[docs] @dataclass class PointCloud: """ Point cloud interface. Attributes: points: 3D points as numpy array (N, 3) colors: Point colors as numpy array (N, 3) or None normals: Point normals as numpy array (N, 3) or None metadata: Additional metadata dictionary """ points: npt.NDArray[np.float32] colors: Optional[npt.NDArray[np.float32]] = None normals: Optional[npt.NDArray[np.float32]] = None metadata: Dict[str, Any] = field(default_factory=dict)
[docs] @dataclass class ErrorMetrics: """ Error metrics interface for evaluation results. Attributes: add: Average Distance Error add_s: Average Distance Error - Symmetric projection_error: 2D projection error runtime: Processing runtime in seconds metadata: Additional metadata dictionary """ add: Optional[float] = None add_s: Optional[float] = None projection_error: Optional[float] = None runtime: Optional[float] = None metadata: Dict[str, Any] = field(default_factory=dict)
[docs] @dataclass class Masks: """ Segmentation masks interface for instance segmentation results. Attributes: masks: Binary segmentation masks as numpy array (N, H, W) where N is number of instances boxes: Bounding boxes as numpy array (N, 4) in [x1, y1, x2, y2] format scores: Confidence scores as numpy array (N,) labels: Class labels as numpy array (N,) or None class_names: List of class names corresponding to labels metadata: Additional metadata dictionary """ masks: npt.NDArray[np.bool_] boxes: npt.NDArray[np.float32] scores: npt.NDArray[np.float32] labels: Optional[npt.NDArray[np.int32]] = None class_names: Optional[List[str]] = None metadata: Dict[str, Any] = None def __post_init__(self): if self.class_names is None: self.class_names = [] if self.metadata is None: self.metadata = {}
[docs] @dataclass class Frame: """ Frame interface containing RGB, depth, camera intrinsics/extrinsics, and pointcloud data. Attributes: rgb: RGB image as numpy array (H, W, 3) idx: Optional global frame index depth: Depth image as numpy array (H, W) or None intrinsics: Camera intrinsics matrix (3, 3) or None extrinsics: Camera extrinsics matrix (4, 4) or None pointcloud: PointCloud instance or None metadata: Additional metadata dictionary """ rgb: npt.NDArray[np.uint8] idx: Optional[int] = None depth: Optional[npt.NDArray[np.float32]] = None intrinsics: Optional[npt.NDArray[np.float64]] = None extrinsics: Optional[npt.NDArray[np.float64]] = None pointcloud: Optional["PointCloud"] = None metadata: Dict[str, Any] = field(default_factory=dict) masks: Optional[Masks] = None