"""
Module contains luna-remote-sdk client adapted for usage in lambda
"""
from typing import Awaitable
from luna3.common.http_objs import BinaryImage, UrlForDetection
from luna3.common.luna_response import LunaResponse
from luna3.public.sdk import VideoSDKInput
from luna3.remote_sdk.remote_sdk import LunaRemoteSDKApi
[docs]
class LRS:
"""Luna-remote-sdk client"""
[docs]
def __init__(self, lrsClient: LunaRemoteSDKApi, accountId: str):
self._accountId = accountId
self._lrsClient = lrsClient
[docs]
def getAddress(self) -> str:
"""Get luna-remote-sdk address"""
return self._lrsClient.baseUri
[docs]
def sdk(
self,
inputData: BinaryImage | list[BinaryImage] | list[UrlForDetection] | list[str],
multifacePolicy: int = 1,
detectFace: int | None = None,
detectBody: int | None = None,
estimateHeadPose: int | None = None,
estimateLandmarks68: int | None = None,
estimateLandmarks5: int | None = None,
estimateQuality: int | None = None,
estimateGaze: int | None = None,
estimateEyesAttributes: int | None = None,
estimateEmotions: int | None = None,
estimateMouthAttributes: int | None = None,
estimateMask: int | None = None,
estimateGlasses: int | None = None,
estimateLiveness: int | None = None,
estimateFaceWarp: int | None = None,
estimateBodyWarp: int | None = None,
aggregateAttributes: int | None = None,
estimateBasicAttributes: int | None = None,
estimateBodyDescriptor: int | None = None,
estimateFaceDescriptor: int | None = None,
estimateUpperBody: int | None = None,
estimateLowerBody: int | None = None,
estimateBodyBasicAttributes: int | None = None,
estimateAccessories: int | None = None,
pitchThreshold: int | None = None,
rollThreshold: int | None = None,
yawThreshold: int | None = None,
scoreThreshold: float = None,
maskStates: list[int] | None = None,
livenessStates: list[int] | None = None,
imageType: int | None = None,
useExifInfo: int | None = None,
extractExif: int | None = None,
raiseError: bool = True,
**kwargs,
) -> Awaitable[LunaResponse] | LunaResponse:
"""
Detect faces on input images.
Args:
inputData: one of:
- Single image or images list for extraction (supported formats "jpeg, png, tif, ppm, bmp").
- list of urls with images
- list of images' ids
multifacePolicy: multiple face detection policy:
0 - multiple face detection not allowed,
1 - multiple face detection allowed,
2 - get best detection from the image
detectFace: detect faces
detectBody: detect human bodies
estimateHeadPose: Available values : 0, 1
estimateLandmarks5: Available values : 0, 1
estimateLandmarks68: Available values : 0, 1
estimateQuality: Available values : 0, 1
estimateGaze: Available values : 0, 1
estimateEyesAttributes: Available values : 0, 1
estimateMouthAttributes: Available values : 0, 1
estimateEmotions: Available values : 0, 1
estimateMask: Available values: 0, 1
estimateGlasses: Available values: 0, 1
estimateLiveness: Available values: 0, 1
estimateFaceDescriptor: Available values : 0, 1
estimateBodyDescriptor: Available values : 0, 1
estimateBasicAttributes: Available values : 0, 1
estimateBodyWarp: Available values : 0, 1
estimateFaceWarp: Available values : 0, 1
estimateUpperBody: Available values : 0, 1
estimateLowerBody: Available values : 0, 1
estimateBodyBasicAttributes: Available values : 0, 1
estimateAccessories: Available values : 0, 1
pitchThreshold: maximum deviation pitch angle from 0
rollThreshold: maximum deviation roll angle from 0
yawThreshold: maximum deviation yaw angle from 0
scoreThreshold: descriptor garbage score
maskStates: Array of integer (filter by mask state) (Items Enum:1 2 3)
livenessStates: Array of integer (filter by liveness state) (Items Enum:0 1 2)
aggregateAttributes: Available values : 0, 1
imageType: image type (0 - raw image, 1 - face warped image, 2 - body warped image)
useExifInfo: whether to use exif info for auto orientation
extractExif: extract EXIF meta information from images
raiseError: whether to raise LunaApiException in case of failure
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with samples, exif, filename for succeeded images and
errors for failed images will be returned.
"""
return self._lrsClient.sdk(
inputData=inputData,
multifacePolicy=multifacePolicy,
detectFace=detectFace,
detectBody=detectBody,
estimateHeadPose=estimateHeadPose,
estimateLandmarks68=estimateLandmarks68,
estimateLandmarks5=estimateLandmarks5,
estimateQuality=estimateQuality,
estimateGaze=estimateGaze,
estimateEyesAttributes=estimateEyesAttributes,
estimateEmotions=estimateEmotions,
estimateMouthAttributes=estimateMouthAttributes,
estimateMask=estimateMask,
estimateGlasses=estimateGlasses,
estimateLiveness=estimateLiveness,
estimateFaceWarp=estimateFaceWarp,
estimateBodyWarp=estimateBodyWarp,
aggregateAttributes=aggregateAttributes,
estimateBasicAttributes=estimateBasicAttributes,
estimateBodyDescriptor=estimateBodyDescriptor,
estimateFaceDescriptor=estimateFaceDescriptor,
estimateUpperBody=estimateUpperBody,
estimateLowerBody=estimateLowerBody,
estimateBodyBasicAttributes=estimateBodyBasicAttributes,
estimateAccessories=estimateAccessories,
pitchThreshold=pitchThreshold,
rollThreshold=rollThreshold,
yawThreshold=yawThreshold,
scoreThreshold=scoreThreshold,
maskStates=maskStates,
livenessStates=livenessStates,
imageType=imageType,
useExifInfo=useExifInfo,
extractExif=extractExif,
raiseError=raiseError,
**kwargs,
)
[docs]
def videosdk(self, videoSDKInput: VideoSDKInput, **kwargs) -> Awaitable[LunaResponse] | LunaResponse:
"""
Process video
Args:
videoSDKInput: video properties including url and analytics params
Returns:
class:`~.LunaResponse` or *asyncio coroutine* with *LunaResponse*.
In body of :class: `~.LunaResponse` json with samples, exif, filename for succeeded images and
errors for failed images will be returned.
"""
return self._lrsClient.videosdk(videoSDKInput, **kwargs)