in src/annotation_consolidation_lambda.py [0:0]
def lambda_handler(event, context):
"""
Sample Annotation Consolidation Lambda for custom labeling jobs.
It takes worker's response for the item to be labeled, and output a consolidated annotation.
Parameters
----------
event: dict, required
Content of an example event
{
"version": "2018-10-16",
"labelingJobArn": <labelingJobArn>,
"labelCategories": [<string>], # If you created labeling job using aws console, labelCategories will be null
"labelAttributeName": <string>,
"roleArn" : "string",
"payload": {
"s3Uri": <string>
}
"outputConfig":"s3://<consolidated_output configured for labeling job>"
}
Content of payload.s3Uri
[
{
"datasetObjectId": <string>,
"dataObject": {
"s3Uri": <string>,
"content": <string>
},
"annotations": [{
"workerId": <string>,
"annotationData": {
"content": <string>,
"s3Uri": <string>
}
}]
}
]
As SageMaker product evolves, content of event object & payload.s3Uri will change. For a latest version refer following URL
Event doc: https://docs.aws.amazon.com/sagemaker/latest/dg/sms-custom-templates-step3.html
context: object, required
Lambda Context runtime methods and attributes
Context doc: https://docs.aws.amazon.com/lambda/latest/dg/python-context-object.html
Returns
-------
consolidated_output: dict
AnnotationConsolidation
[
{
"datasetObjectId": <string>,
"consolidatedAnnotation": {
"content": {
"<labelattributename>": {
# ... label content
}
}
}
}
]
Return doc: https://docs.aws.amazon.com/sagemaker/latest/dg/sms-custom-templates-step3.html
"""
# Event received
print("Received event: " + json.dumps(event, indent=2))
labeling_job_arn = event["labelingJobArn"]
label_attribute_name = event["labelAttributeName"]
role_arn = None
if "roleArn" in event:
role_arn = event["roleArn"]
# Create s3 client object
s3_client = S3Client(role_arn)
payload = event["payload"]
s3_ref = None
if "s3Uri" in payload:
s3_ref = payload["s3Uri"]
payload = json.loads(s3_client.get_object_from_s3(s3_ref))
# Perform consolidation
return do_consolidation(payload, s3_client, labeling_job_arn, label_attribute_name, s3_ref)