2022-12-15 14:12:52 +01:00
|
|
|
import importlib
|
2023-05-29 12:31:17 +02:00
|
|
|
import logging
|
2022-12-15 14:12:52 +01:00
|
|
|
import pkgutil
|
|
|
|
from enum import Enum
|
2023-05-29 12:31:17 +02:00
|
|
|
from typing import Union
|
|
|
|
|
2022-12-15 14:12:52 +01:00
|
|
|
from pydantic import Field
|
2023-05-29 12:31:17 +02:00
|
|
|
from typing_extensions import Annotated
|
2022-12-15 14:12:52 +01:00
|
|
|
|
|
|
|
from . import plugins
|
|
|
|
from .detection_api import DetectionApi
|
|
|
|
from .detector_config import BaseDetectorConfig
|
|
|
|
|
|
|
|
logger = logging.getLogger(__name__)
|
|
|
|
|
2023-02-19 14:41:14 +01:00
|
|
|
|
|
|
|
_included_modules = pkgutil.iter_modules(plugins.__path__, plugins.__name__ + ".")
|
|
|
|
|
|
|
|
plugin_modules = []
|
|
|
|
|
|
|
|
for _, name, _ in _included_modules:
|
|
|
|
try:
|
|
|
|
# currently openvino may fail when importing
|
|
|
|
# on an arm device with 64 KiB page size.
|
|
|
|
plugin_modules.append(importlib.import_module(name))
|
|
|
|
except ImportError as e:
|
|
|
|
logger.error(f"Error importing detector runtime: {e}")
|
|
|
|
|
2022-12-15 14:12:52 +01:00
|
|
|
|
|
|
|
api_types = {det.type_key: det for det in DetectionApi.__subclasses__()}
|
|
|
|
|
|
|
|
|
|
|
|
class StrEnum(str, Enum):
|
|
|
|
pass
|
|
|
|
|
|
|
|
|
|
|
|
DetectorTypeEnum = StrEnum("DetectorTypeEnum", {k: k for k in api_types})
|
|
|
|
|
|
|
|
DetectorConfig = Annotated[
|
|
|
|
Union[tuple(BaseDetectorConfig.__subclasses__())],
|
|
|
|
Field(discriminator="type"),
|
|
|
|
]
|