Source code for luna_handlers.sdk.sdk_loop.estimation_targets

"""
Module contains a structure for a task estimation targets
"""
from typing import Set, Optional

from .enums import SDKFaceEstimations, SDKHumanEstimations


[docs]class BaseEstimationTargets: """ Base class for estimation targets """ __slots__ = ()
[docs] def isEmpty(self) -> bool: """ Check targets is empty or not. Returns: True if exists a targets to estimation otherwise False """ def checkTarget(targetName: str): """ Check estimation target. """ target = getattr(self, targetName) if isinstance(target, int): return target return target.estimate return not any(filter(checkTarget, self.__slots__))
[docs]class SDKLivenessEstimationPolicy: """ Liveness estimations policy Attributes: estimate (int): whether to estimate liveness scoreThreshold (Optional[float]): liveness estimation score threshold ([0...1]) qualityThreshold (Optional[float]): liveness estimation quality threshold ([0...1]) """ __slots__ = ("estimate", "scoreThreshold", "qualityThreshold") def __init__(self, estimate: int = 0, scoreThreshold: float = None, qualityThreshold: float = None): if estimate and qualityThreshold is None: raise RuntimeError("Liveness estimation is enabled, but quality threshold was not specified.") self.estimate = estimate self.scoreThreshold = scoreThreshold self.qualityThreshold = qualityThreshold def __repr__(self): return "SDKLivenessEstimationPolicy({})".format({key: getattr(self, key) for key in self.__slots__})
[docs]class SDKFaceEstimationTargets(BaseEstimationTargets): """ Face estimations targets Attributes: estimateGaze (int): estimate or not gaze direction estimateHeadPose (int): estimate or not head pose estimateEyesAttributes (int): estimate or not eyes attributes estimateAGS (int): estimate or not ags estimateQuality (int): estimate or not head pose estimateMouthAttributes (int): estimate or not mouth state estimateEmotions (int): estimate or not emotions estimateBasicAttributes (int): estimate or not basic attributes estimateFaceDescriptor (int): estimate or not face descriptor 0 - not estimate face descriptor 1 - estimate default version descriptor other values - descriptor version estimateMask (int): estimate or not mask estimateGlasses (int): estimate or not glasses estimateLiveness (SDKLivenessEstimationPolicy): liveness estimation policy """ __slots__ = ( "estimateGaze", "estimateHeadPose", "estimateEyesAttributes", "estimateAGS", "estimateEmotions", "estimateFaceDescriptor", "estimateMouthAttributes", "estimateQuality", "estimateBasicAttributes", "estimateMask", "estimateGlasses", "estimateLiveness", ) def __init__( self, estimateGaze: int = 0, estimateHeadPose: int = 0, estimateEyesAttributes: int = 0, estimateAGS: int = 0, estimateQuality: int = 0, estimateMouthAttributes: int = 0, estimateEmotions: int = 0, estimateFaceDescriptor: int = 0, estimateBasicAttributes: int = 0, estimateMask: int = 0, estimateGlasses: int = 0, estimateLiveness: SDKLivenessEstimationPolicy = SDKLivenessEstimationPolicy(), ): self.estimateBasicAttributes = estimateBasicAttributes self.estimateEmotions = estimateEmotions self.estimateFaceDescriptor = estimateFaceDescriptor self.estimateMouthAttributes = estimateMouthAttributes self.estimateQuality = estimateQuality self.estimateGaze = estimateGaze self.estimateHeadPose = estimateHeadPose self.estimateEyesAttributes = estimateEyesAttributes self.estimateAGS = estimateAGS self.estimateMask = estimateMask self.estimateGlasses = estimateGlasses self.estimateLiveness = estimateLiveness
[docs] def getTargetsForFaceDetector(self) -> Set[SDKFaceEstimations]: """ Get targets for detector. Returns: set of estimations that detector must do """ allEstimations = { SDKFaceEstimations.gaze: self.estimateGaze, SDKFaceEstimations.headPose: self.estimateHeadPose, SDKFaceEstimations.eyes: self.estimateEyesAttributes, SDKFaceEstimations.ags: self.estimateAGS, SDKFaceEstimations.liveness: self.estimateLiveness.estimate, } return set((estimation for estimation, value in allEstimations.items() if value))
[docs] def getTargetForWarpEstimator(self) -> Set[SDKFaceEstimations]: """ Get targets for detector. Returns: set of estimations that warp estimator must do """ allEstimations = { SDKFaceEstimations.mouthAttributes: self.estimateMouthAttributes, SDKFaceEstimations.quality: self.estimateQuality, SDKFaceEstimations.emotions: self.estimateEmotions, SDKFaceEstimations.mask: self.estimateMask, SDKFaceEstimations.glasses: self.estimateGlasses, } return set((estimation for estimation, value in allEstimations.items() if value))
[docs] def getTargetsForFaceExtractor(self) -> Set[SDKFaceEstimations]: """ Get targets for detector. Returns: set of estimations that detector must do """ allEstimations = { SDKFaceEstimations.faceDescriptor: self.estimateFaceDescriptor, SDKFaceEstimations.basicAttributes: self.estimateBasicAttributes, } return set((estimation for estimation, value in allEstimations.items() if value))
[docs]class SDKHumanEstimationTargets(BaseEstimationTargets): """ Human body estimations targets Attributes: estimateHumanDescriptor (int): estimate or not face descriptor 0 - not estimate face descriptor 1 - estimate default version descriptor other values - descriptor version """ __slots__ = ("estimateHumanDescriptor",) def __init__(self, estimateHumanDescriptor: int = 0): self.estimateHumanDescriptor = estimateHumanDescriptor
[docs] def getTargetsForHumanExtractor(self) -> Set[SDKHumanEstimations]: """ Get targets for detector. Returns: set of estimations that detector must do """ allEstimations = { SDKHumanEstimations.humanDescriptor: self.estimateHumanDescriptor, } return set((estimation for estimation, value in allEstimations.items() if value))
[docs]class SDKEstimationTargets: """ SDK estimation target structure. Attributes: estimateFace (int): estimate or not face detection/face attributes estimateHuman (int): estimate or not human detection/human attributes faceEstimationTargets (SDKFaceEstimationTargets): face estimation targets humanEstimationTargets (SDKHumanEstimationTargets): human estimation targets Notes: landmarks68 estimated always for face detection (for more precision warping). """ __slots__ = ("estimateFace", "estimateHuman", "faceEstimationTargets", "humanEstimationTargets") def __init__( self, estimateFace: int = 1, estimateHuman: int = 1, faceEstimationTargets: Optional[SDKFaceEstimationTargets] = None, humanEstimationTargets: Optional[SDKHumanEstimationTargets] = None, ): self.estimateHuman = estimateHuman self.estimateFace = estimateFace self.humanEstimationTargets = ( SDKHumanEstimationTargets() if humanEstimationTargets is None else humanEstimationTargets ) self.faceEstimationTargets = ( SDKFaceEstimationTargets() if faceEstimationTargets is None else faceEstimationTargets )