"""RekognitionBackend class with methods for supported APIs.""" import string from typing import Any, Dict, List, Tuple from moto.core import BaseBackend, BackendDict from moto.moto_api._internal import mock_random as random class RekognitionBackend(BaseBackend): """Implementation of Rekognition APIs.""" def start_face_search(self) -> str: return self._job_id() def start_text_detection(self) -> str: return self._job_id() def get_face_search( self, ) -> Tuple[str, str, Dict[str, Any], List[Dict[str, Any]], str, str]: """ This returns hardcoded values and none of the parameters are taken into account. """ return ( self._job_status(), self._status_message(), self._video_metadata(), self._persons(), self._next_token(), self._text_model_version(), ) def get_text_detection( self, ) -> Tuple[str, str, Dict[str, Any], List[Dict[str, Any]], str, str]: """ This returns hardcoded values and none of the parameters are taken into account. """ return ( self._job_status(), self._status_message(), self._video_metadata(), self._text_detections(), self._next_token(), self._text_model_version(), ) # private def _job_id(self) -> str: return "".join( random.choice(string.ascii_uppercase + string.digits) for _ in range(64) ) def _job_status(self) -> str: return "SUCCEEDED" def _next_token(self) -> str: return "" def _status_message(self) -> str: return "" def _text_model_version(self) -> str: return "3.1" def _video_metadata(self) -> Dict[str, Any]: return { "Codec": "h264", "DurationMillis": 15020, "Format": "QuickTime / MOV", "FrameRate": 24.0, "FrameHeight": 720, "FrameWidth": 1280, "ColorRange": "LIMITED", } def _persons(self) -> List[Dict[str, Any]]: return [ { "Timestamp": 0, "Person": { "Index": 0, "Face": { "BoundingBox": { "Width": 0.42217350006103516, "Height": 0.9352386593818665, "Left": 0.31870967149734497, "Top": -0.0049947104416787624, }, "Landmarks": [ { "Type": "eyeLeft", "X": 0.4800040125846863, "Y": 0.23425640165805817, }, { "Type": "eyeRight", "X": 0.63795405626297, "Y": 0.19219470024108887, }, { "Type": "mouthLeft", "X": 0.5283276438713074, "Y": 0.6190487146377563, }, { "Type": "mouthRight", "X": 0.660395085811615, "Y": 0.5830448269844055, }, { "Type": "nose", "X": 0.619724690914154, "Y": 0.3800361752510071, }, ], "Pose": { "Roll": -5.063229084014893, "Yaw": 18.038856506347656, "Pitch": 12.567241668701172, }, "Quality": { "Brightness": 83.42264556884766, "Sharpness": 67.22731018066406, }, "Confidence": 99.99860382080078, }, }, "FaceMatches": [ { "Similarity": 99.99994659423828, "Face": { "FaceId": "f2489050-020e-4c14-8693-63339847a59d", "BoundingBox": { "Width": 0.7136539816856384, "Height": 0.9471719861030579, "Left": 0.19036999344825745, "Top": -0.012074699625372887, }, "ImageId": "f3b180d3-f5ad-39c1-b825-ba30b170a90d", "ExternalImageId": "Dave_Bloggs", "Confidence": 99.99970245361328, }, }, { "Similarity": 99.9986572265625, "Face": { "FaceId": "f0d22a6a-3436-4d23-ae5b-c5cb2e795581", "BoundingBox": { "Width": 0.7198730111122131, "Height": 1.003640055656433, "Left": 0.1844159960746765, "Top": -0.00142729002982378, }, "ImageId": "738d14f3-26be-3066-b1a9-7f4f6bb3ffc6", "ExternalImageId": "Dave_Bloggs", "Confidence": 99.99939727783203, }, }, { "Similarity": 99.99791717529297, "Face": { "FaceId": "c48162bd-a16a-4e04-ad3c-967761895295", "BoundingBox": { "Width": 0.7364680171012878, "Height": 1.0104399919509888, "Left": 0.1361449956893921, "Top": -0.009593159891664982, }, "ImageId": "eae3565c-741b-342c-8e73-379a09ae5346", "ExternalImageId": "Dave_Bloggs", "Confidence": 99.99949645996094, }, }, { "Similarity": 99.37212371826172, "Face": { "FaceId": "651314bb-28d4-405d-9b13-c32e9ff28299", "BoundingBox": { "Width": 0.3711090087890625, "Height": 0.3609749972820282, "Left": 0.2571589946746826, "Top": 0.21493400633335114, }, "ImageId": "068700f5-0b2e-39c0-874b-2c58fa10d833", "ExternalImageId": "Dave_Bloggs", "Confidence": 99.99300384521484, }, }, ], } ] def _text_detections(self) -> List[Dict[str, Any]]: return [ { "Timestamp": 0, "TextDetection": { "DetectedText": "Hello world", "Type": "LINE", "Id": 0, "Confidence": 97.89398956298828, "Geometry": { "BoundingBox": { "Width": 0.1364741027355194, "Height": 0.0318513885140419, "Left": 0.4310702085494995, "Top": 0.876121461391449, }, "Polygon": [ {"X": 0.4310702085494995, "Y": 0.8769540190696716}, {"X": 0.5673548579216003, "Y": 0.876121461391449}, {"X": 0.5675443410873413, "Y": 0.90714031457901}, {"X": 0.4312596917152405, "Y": 0.9079728722572327}, ], }, }, }, { "Timestamp": 0, "TextDetection": { "DetectedText": "Hello", "Type": "WORD", "Id": 1, "ParentId": 0, "Confidence": 99.1568832397461, "Geometry": { "BoundingBox": { "Width": 0.0648193359375, "Height": 0.0234375, "Left": 0.43121337890625, "Top": 0.876953125, }, "Polygon": [ {"X": 0.43121337890625, "Y": 0.876953125}, {"X": 0.49603271484375, "Y": 0.876953125}, {"X": 0.49603271484375, "Y": 0.900390625}, {"X": 0.43121337890625, "Y": 0.900390625}, ], }, }, }, { "Timestamp": 0, "TextDetection": { "DetectedText": "world", "Type": "WORD", "Id": 2, "ParentId": 0, "Confidence": 96.63108825683594, "Geometry": { "BoundingBox": { "Width": 0.07103776931762695, "Height": 0.02804870530962944, "Left": 0.4965003430843353, "Top": 0.8795245885848999, }, "Polygon": [ {"X": 0.4965003430843353, "Y": 0.8809727430343628}, {"X": 0.5673661231994629, "Y": 0.8795245885848999}, {"X": 0.5675381422042847, "Y": 0.9061251282691956}, {"X": 0.4966723322868347, "Y": 0.9075732827186584}, ], }, }, }, { "Timestamp": 1000, "TextDetection": { "DetectedText": "Goodbye world", "Type": "LINE", "Id": 0, "Confidence": 98.9729995727539, "Geometry": { "BoundingBox": { "Width": 0.13677978515625, "Height": 0.0302734375, "Left": 0.43121337890625, "Top": 0.876953125, }, "Polygon": [ {"X": 0.43121337890625, "Y": 0.876953125}, {"X": 0.5679931640625, "Y": 0.876953125}, {"X": 0.5679931640625, "Y": 0.9072265625}, {"X": 0.43121337890625, "Y": 0.9072265625}, ], }, }, }, { "Timestamp": 1000, "TextDetection": { "DetectedText": "Goodbye", "Type": "WORD", "Id": 1, "ParentId": 0, "Confidence": 99.7258529663086, "Geometry": { "BoundingBox": { "Width": 0.0648193359375, "Height": 0.0234375, "Left": 0.43121337890625, "Top": 0.876953125, }, "Polygon": [ {"X": 0.43121337890625, "Y": 0.876953125}, {"X": 0.49603271484375, "Y": 0.876953125}, {"X": 0.49603271484375, "Y": 0.900390625}, {"X": 0.43121337890625, "Y": 0.900390625}, ], }, }, }, { "Timestamp": 1000, "TextDetection": { "DetectedText": "world", "Type": "WORD", "Id": 2, "ParentId": 0, "Confidence": 98.22015380859375, "Geometry": { "BoundingBox": { "Width": 0.0703125, "Height": 0.0263671875, "Left": 0.4976806640625, "Top": 0.880859375, }, "Polygon": [ {"X": 0.4976806640625, "Y": 0.880859375}, {"X": 0.5679931640625, "Y": 0.880859375}, {"X": 0.5679931640625, "Y": 0.9072265625}, {"X": 0.4976806640625, "Y": 0.9072265625}, ], }, }, }, ] rekognition_backends = BackendDict(RekognitionBackend, "rekognition")