Source code for ovl.helpers.vision_detector_arguments

from collections import namedtuple

from ..detectors.haar_cascade_detector import HaarCascadeDetector
from ..detectors.threshold_detector import ThresholdDetector

GroupToDetector = namedtuple("GroupToDetector", "constructor arguments")
_GROUP_TO_DETECTOR = {"threshold": GroupToDetector(ThresholdDetector, "threshold amd/or morphological functions"),
                      "haar_cascade": GroupToDetector(HaarCascadeDetector, "haar_classifier")}


def _argument_group_to_detector_constructor(argument_group, *args, **kwargs):
    return _GROUP_TO_DETECTOR[argument_group].constructor(*args, **kwargs)


[docs]def arguments_to_detector(mutually_exclusive_arguments): existing_group = None existing_group_name = None for group_name, argument_group in mutually_exclusive_arguments: if any(argument_group): if existing_group_name: raise ValueError( "When passing parameters that create a Detector only 1 group can be passed," " got both '{}' and '{}'".format(_GROUP_TO_DETECTOR[group_name].arguments, _GROUP_TO_DETECTOR[argument_group].arguments)) else: existing_group = argument_group existing_group_name = group_name if existing_group_name is None: detector = None elif existing_group_name != "detector": detector = _argument_group_to_detector_constructor(existing_group_name, *existing_group) else: detector = existing_group return detector