def process_face_detection()

in source/consumer/lambda_handler.py [0:0]


def process_face_detection(asset, workflow, results):
    metadata = json.loads(results)
    es = connect_es(es_endpoint)
    extracted_items = []
    if isinstance(metadata, list):
        for page in metadata:
            # Parse schema for video:
            if "Faces" in page:
                for item in page["Faces"]:
                    try:
                        item["Operator"] = "face_detection"
                        item["Workflow"] = workflow
                        if "Face" in item:
                            # flatten the inner Face array
                            item["BoundingBox"] = item["Face"]["BoundingBox"]
                            item["AgeRange"] = item["Face"]["AgeRange"]
                            item["Smile"] = item["Face"]["Smile"]
                            item["Eyeglasses"] = item["Face"]["Eyeglasses"]
                            item["Sunglasses"] = item["Face"]["Sunglasses"]
                            item["Gender"] = item["Face"]["Gender"]
                            item["Beard"] = item["Face"]["Beard"]
                            item["Mustache"] = item["Face"]["Mustache"]
                            item["EyesOpen"] = item["Face"]["EyesOpen"]
                            item["MouthOpen"] = item["Face"]["MouthOpen"]
                            item["Emotions"] = item["Face"]["Emotions"]
                            item["Confidence"] = item["Face"]["Confidence"]
                            # Delete the flattened array
                            del item["Face"]
                        extracted_items.append(item)
                    except KeyError as e:
                        print("KeyError: " + str(e))
                        print("Item: " + json.dumps(item))
            # Parse schema for images:
            if "FaceDetails" in page:
                for item in page["FaceDetails"]:
                    item["Operator"] = "face_detection"
                    item["Workflow"] = workflow
                    extracted_items.append(item)
    else:
        # Parse schema for videos:
        if "Faces" in metadata:
            for item in metadata["Faces"]:
                try:
                    item["Operator"] = "face_detection"
                    item["Workflow"] = workflow
                    if "Face" in item:
                        # flatten the inner Face array
                        item["BoundingBox"] = item["Face"]["BoundingBox"]
                        item["AgeRange"] = item["Face"]["AgeRange"]
                        item["Smile"] = item["Face"]["Smile"]
                        item["Eyeglasses"] = item["Face"]["Eyeglasses"]
                        item["Sunglasses"] = item["Face"]["Sunglasses"]
                        item["Gender"] = item["Face"]["Gender"]
                        item["Beard"] = item["Face"]["Beard"]
                        item["Mustache"] = item["Face"]["Mustache"]
                        item["EyesOpen"] = item["Face"]["EyesOpen"]
                        item["MouthOpen"] = item["Face"]["MouthOpen"]
                        item["Emotions"] = item["Face"]["Emotions"]
                        item["Confidence"] = item["Face"]["Confidence"]
                        # Delete the flattened array
                        del item["Face"]
                    extracted_items.append(item)
                except KeyError as e:
                    print("KeyError: " + str(e))
                    print("Item: " + json.dumps(item))
        # Parse schema for images:
        if "FaceDetails" in metadata:
            for item in metadata["FaceDetails"]:
                item["Operator"] = "face_detection"
                item["Workflow"] = workflow
                extracted_items.append(item)
    bulk_index(es, asset, "face_detection", extracted_items)