in src/lambda-inference/app.py [0:0]
def lambda_handler(event, context):
"""
Lambda Handler for Image Processing logic.
"""
#Load the event
print("My event: {}\n".format(event))
try:
event = json.loads(event['body'])
except:
event = event['body']
# Content image pre-processing
input_image = event["image"]
content_image_object = Image.open(BytesIO(base64.b64decode(input_image)))
content_image = load_img(content_image_object)
content_image = tensor_to_image(content_image)
#Encode content image scaled to base64
buffered = BytesIO()
content_image.save(buffered, format="JPEG")
img_str = base64.b64encode(buffered.getvalue())
event["image"] = img_str.decode("utf-8")
#Read endpoint name from Parameter store
ssm = boto3.client('ssm')
endpoint_name = ssm.get_parameter(Name='endpoint_name')
endpoint_name = endpoint_name['Parameter']['Value']
print("Using endpoint: {}".format(endpoint_name))
#Invoke endpoint
sm_runtime = boto3.client('sagemaker-runtime')
response = sm_runtime.invoke_endpoint(
EndpointName=endpoint_name,
Body=json.dumps(event),
ContentType='application/json',
Accept='application/json'
)
result = json.loads(response['Body'].read())
#Lambda response back to API Gateway
response = {'headers': {"Content-Type": "image/jpg"},
'statusCode': 200,
'body': json.dumps(result),
'isBase64Encoded': True}
print(response)
return response