- Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathlambda_function.py
More file actions
Latest commit
86 lines (68 loc) · 2.63 KB
/
Copy pathlambda_function.py
File metadata and controls
86 lines (68 loc) · 2.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
"""
AWS Lambda function
"""
importbase64
importjson
importlogging
fromdetectionimportml_detection, ml_utils
logger=logging.getLogger()
logger.setLevel(logging.INFO)
# Find ML model type based on string request
defget_model_type(query_string):
"""Find ML model type based on string request"""
# Default ml model type
ifquery_string=="":
model_type="facebook/detr-resnet-50"
# Assess query string value
elif"detr"inquery_string:
model_type="facebook/"+query_string
elif"yolos"inquery_string:
model_type="hustvl/"+query_string
else:
raiseException("Incorrect model type.")
returnmodel_type
# Run detection pipeline: load ML model, perform object detection and return json object
defdetection_pipeline(model_type, image_bytes):
"""detection pipeline: load ML model, perform object detection and return json object"""
# Load correct ML model
processor, model=ml_detection.load_model(model_type)
# Perform object detection
results=ml_detection.object_detection(processor, model, image_bytes)
# Convert dictionary of tensors to JSON object
result_json_dict=ml_utils.convert_tensor_dict_to_json(results)
returnresult_json_dict
deflambda_handler(event, context):
"""
Lambda handler (proxy integration option unchecked on AWS API Gateway)
Args:
event (dict): The event that triggered the Lambda function.
context (LambdaContext): Information about the execution environment.
Returns:
dict: The response to be returned from the Lambda function.
"""
# logger.info(f"API event: {event}")
try:
# Retrieve model type
model_query=event.get("model", "")
model_type=get_model_type(model_query)
logger.info("Model query: %s", model_query)
logger.info("Model type: %s", model_type)
# Decode the base64-encoded image data from the event
image_data=event["body"]
ifevent["isBase64Encoded"]:
image_data=base64.b64decode(image_data)
# Run detection pipeline
result_dict=detection_pipeline(model_type, image_data)
logger.info("API Results: %s", str(result_dict))
return {
"statusCode": 200,
"headers": {"Content-Type": "application/json"},
"body": json.dumps(result_dict),
}
exceptExceptionase:
logger.info("API Error: %s", str(e))
return {
"statusCode": 500,
"headers": {"Content-Type": "application/json"},
"body": json.dumps({"error": str(e)}),
}