in source/backend/index-face-lambda/function.py [0:0]
def lambda_handler(event, context):
logger.info('Invoked the IndexFace Lambda function.')
bucket = event['Records'][0]['s3']['bucket']['name']
key = event['Records'][0]['s3']['object']['key']
name = os.path.splitext(os.path.basename(key))[0]
# Register a face image to Rekognition
logger.info('Register a face image to Rekognition.')
response = rekognition.index_faces(
Image={
"S3Object": {
"Bucket": bucket,
"Name": key
}
},
CollectionId=COLLECTION_NAME
)
if response['ResponseMetadata']['HTTPStatusCode'] != 200 or len(response['FaceRecords']) == 0:
raise RuntimeError('Fail to register a face to Rekognition.')
faceId = response['FaceRecords'][0]['Face']['FaceId']
# Insert the face data to DynamoDB
logger.info('Insert the face ID to the DynamoDB table.')
try:
response = dynamodb.put_item(
TableName=DYNAMODB_TABLE_NAME,
Item={
'RekognitionId': {'S': faceId},
'Name': {'S': name},
}
)
except ClientError as err:
rekognition.delete_faces(
CollectionId=COLLECTION_NAME,
FaceId=faceId
)
raise err
# If the face image was registered successfully, delete the image from s3.
s3.delete_object(Bucket=bucket, Key=key)
logger.info('Registered a face image successfully.')