"""Registry of vision targets — swap by name from the viewer.""" from __future__ import annotations from .base import Detection, TargetDetector from .orange_ball import METHOD_LABELS, METHODS, OrangeBallDetector from .teachable_machine import DEFAULT_MODEL_DIR, TeachableMachineModel TARGET_FACTORIES = { "orange_ball": OrangeBallDetector, "none": lambda: None, } def create_target(name: str = "orange_ball") -> TargetDetector | None: key = name.strip().lower() if key in ("", "none", "off"): return None factory = TARGET_FACTORIES.get(key) if factory is None: known = ", ".join(sorted(k for k in TARGET_FACTORIES if k != "none")) raise ValueError(f"unknown target '{name}'. known: {known}") return factory() __all__ = [ "Detection", "TargetDetector", "OrangeBallDetector", "TeachableMachineModel", "DEFAULT_MODEL_DIR", "METHODS", "METHOD_LABELS", "create_target", "TARGET_FACTORIES", ]