File size: 1,006 Bytes
24113f1
 
 
 
 
 
 
 
 
 
1834bc0
 
 
 
24113f1
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
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)