from segmenters.base_segmenter import BaseSegmenter # SAM3 is optional; import lazily to avoid crashing when the model is unavailable try: from segmenters.sam3 import SAM3Segmenter # type: ignore except Exception as _sam3_err: # pragma: no cover - best-effort optional import SAM3Segmenter = None # type: ignore _SAM3_IMPORT_ERROR = _sam3_err from segmenters.pca_segmenter import PCASegmenter """ Model registry for segmenters """ _SEGMENTERS = {} if SAM3Segmenter is not None: _SEGMENTERS["sam3"] = SAM3Segmenter if PCASegmenter is not None: _SEGMENTERS["pca"] = PCASegmenter def get_segmenter(name: str, **kwargs): if name not in _SEGMENTERS: available = list(_SEGMENTERS) msg = f"Unknown segmenter '{name}'. Available: {available}" if name == "sam3" and 'SAM3Segmenter' in globals() and SAM3Segmenter is None: msg += f". SAM3 import error: {_SAM3_IMPORT_ERROR}" raise ValueError(msg) return _SEGMENTERS[name](**kwargs)