in source/backend/rekognize-face-lambda/function.py [0:0]
def lambda_handler(event, context):
# logger.info(event)
binary_image = base64.b64decode(event['body'])
try:
try:
response = rekognition.search_faces_by_image(
CollectionId=COLLECTION_ID,
Image={'Bytes': binary_image},
FaceMatchThreshold=REKOGNITION_FACE_SIMILARITY_THRESHOLD,
MaxFaces=1
)
except ClientError as err:
code = err.response['Error']['Code']
if code in ['ProvisionedThroughputExceededException', 'ThrottlingException']:
logger.exception()
elif code in ['InvalidParameterException']:
logger.info('No face in Rekognition')
else:
logger.exception(err)
return generate_response('INVALID', '', 0)
face_matches = response['FaceMatches']
if len(face_matches) > 0:
face_match = face_matches[0]
similarity = face_match['Similarity']
face = face_match['Face']
face_id = face['FaceId']
try:
response = dynamodb.get_item(
TableName=DYNAMODB_TABLE_NAME,
Key={'RekognitionId': {'S': face_id}}
)
name = response['Item']['Name']['S']
update_item(face_id, similarity)
except Exception as err:
logger.exception(err)
return generate_response('INVALID', '', 0)
logger.info('Above Rekognition Threshold. Similarity: {}'.format(similarity))
return generate_response('OK', name, similarity)
else:
logger.info('Similar Faces Not Found')
return generate_response('NO_MATCH', '', 0)
except Exception as err:
logger.exception(err)
return generate_response('INVALID', '', 0)