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"]}')