def lambda_handler()

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)