【发布时间】:2021-08-11 18:11:41
【问题描述】:
我有下一个问题,我尝试将 base64 中的图像文件发送到 Lambda 函数(用 Python 编写),用于调用 Sagemaker Endpoint,这是我的 Lambda 函数:
import os
import io
import boto3
import json
import base64
# grab environment variables
ENDPOINT_NAME = os.environ['ENDPOINT_NAME']
runtime= boto3.client('runtime.sagemaker')
def lambda_handler(event, context):
print("Received event: " + json.dumps(event, indent=2))
data = json.loads(json.dumps(event))
payload = data['foto']
img = base64.b64decode(payload)
#body = json.dumps({"instances": img})
try:
response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
Body=img)
print(response)
except Exception as e:
print("Inference Error:")
print(e)
return { "img":"ok" }
Jupyter 中的 sagemaker 端点调用可以正常使用此代码,
from tensorflow.keras.preprocessing.image import ImageDataGenerator
test_datagen = ImageDataGenerator(rescale=1./255)
test_generator = test_datagen.flow_from_directory('./data/val', target_size=(224,224))
instance = test_generator[1][0]
print(instance.shape)
array = instance.reshape((1,) + instance.shape)
payload = { 'instances': array.tolist() }
resp = tf_predictor.predict(payload)['predictions']
print(resp)
Lambda 中的错误表示数据类型未知,CloudWatch 维度错误。
我认为,错误出现在 invoke_endpoint 方法的正文中,但我没有找到如何将字节类型转换为带有图像数据的列表。我需要带有 numpy 或其他库的自定义 Lambda 函数吗?或者不需要
【问题讨论】:
标签: python amazon-web-services tensorflow aws-lambda amazon-sagemaker