def handler()

in python/image-content-search/src/imageAnalysis/main.py [0:0]


def handler(event, context):

    for record in event['Records']:
        # receiptHandle = record['receiptHandle']
        body = record['body']
        message = json.loads(body)

        bucket = os.environ['ICS_IMAGES_BUCKET']
        key = message['image']
        # original_key = message['original_key']
        # original_last_modified = message['original_last_modified']
        # etag = message['etag']

        logger.info('Processing {}.'.format(key))

        detected_labels = rekognition_client.detect_labels(
            Image={'S3Object': {'Bucket': bucket, 'Name': key}},
            MaxLabels=20,
            MinConfidence=85)
            
        detected_unsafe_contents = rekognition_client.detect_moderation_labels(
            Image={'S3Object': {'Bucket': bucket, 'Name': key}})
               
        object_labels = []

        for l in detected_labels['Labels']:
            object_labels.append(l['Name'].lower()) # add objects in image

        for l in detected_unsafe_contents['ModerationLabels']:
            if ('offensive' not in object_labels): object_labels.append("offensive") #label image as offensive
            object_labels.append(l['Name'].lower())

        image_id = key.split("/")[-1]

        response = events_client.put_events(
            Entries=[
                {
                    'Source': "EventBridge",
                    'Resources': [
                        context.invoked_function_arn,
                    ],
                    'DetailType': 'images_labels',
                    'Detail': json.dumps({"labels": object_labels, "image_id": image_id}),
                    'EventBusName': event_bus_name
                },
            ]
        )

        if response["FailedEntryCount"] == 1:
            raise Exception(f'Failed entry observed. Count: {response["Entries"]}')