feat: stage7 — Model Manager (F16) and Sequential VO (F07)

This commit is contained in:
Yuzviak
2026-03-22 22:59:55 +02:00
parent 9ef046d623
commit 058ed315dd
8 changed files with 494 additions and 2 deletions
+21
View File
@@ -0,0 +1,21 @@
"""Model Manager schemas (Component F16)."""
from typing import Any
from pydantic import BaseModel
class ModelConfig(BaseModel):
"""Configuration for an ML model."""
model_name: str
model_path: str
format: str
precision: str # "fp16", "fp32"
warmup_iterations: int = 3
class InferenceEngine:
"""Base definition for an inference engine."""
def __init__(self, model_name: str, format_: str):
self.model_name = model_name
self.format = format_
def infer(self, input_data: Any) -> Any:
raise NotImplementedError
+49
View File
@@ -0,0 +1,49 @@
"""Sequential Visual Odometry schemas (Component F07)."""
from typing import Optional
import numpy as np
from pydantic import BaseModel
class Features(BaseModel):
"""Extracted image features (e.g., from SuperPoint)."""
model_config = {"arbitrary_types_allowed": True}
keypoints: np.ndarray # (N, 2)
descriptors: np.ndarray # (N, 256)
scores: np.ndarray # (N,)
class Matches(BaseModel):
"""Matches between two sets of features (e.g., from LightGlue)."""
model_config = {"arbitrary_types_allowed": True}
matches: np.ndarray # (M, 2)
scores: np.ndarray # (M,)
keypoints1: np.ndarray # (M, 2)
keypoints2: np.ndarray # (M, 2)
class RelativePose(BaseModel):
"""Relative pose between two frames."""
model_config = {"arbitrary_types_allowed": True}
translation: np.ndarray # (3,)
rotation: np.ndarray # (3, 3)
confidence: float
inlier_count: int
total_matches: int
tracking_good: bool
scale_ambiguous: bool = True
chunk_id: Optional[str] = None
class Motion(BaseModel):
"""Motion estimate from OpenCV."""
model_config = {"arbitrary_types_allowed": True}
translation: np.ndarray # (3,) unit vector
rotation: np.ndarray # (3, 3) rotation matrix
inliers: np.ndarray # Boolean mask of inliers
inlier_count: int