我正在使用invoke_endpoint函数从AWS Lamba调用语义分割模型,但没有得到图像响应,而是得到了application/x-recordio-protobuf,我无法将其转换为图像进行进一步处理。语义分割模型在我的sagemaker笔记本中按预期工作。问题是当从AWS Lambda调用它时。我需要从AWS Lambda或类似的服务调用它,这样我就可以将它与一个应用程序连接,该应用程序将通过一个rest服务传递图像输入。
下面是我的代码的相关部分:
runtime= boto3.client('runtime.sagemaker')
response = runtime.invoke_endpoint(EndpointName=ENDPOINT_NAME,
ContentType='image/jpeg',
Body=imageBody,
Accept='image/jpeg')
我还没有找到好的例子来说明如何从AWS Lambda中正确地调用专门用于语义分割模型的端点。我也尝试过导入sagemaker,但AWS Lambda没有附带该模块,而且我也找不到适合sagemaker的层。
如果有人知道如何能够从AWS调用语义分割模型,向其传递图像,并获得图像作为响应,我将不胜感激。
1条答案
按热度按时间yacmzcpb1#
我假设当你在笔记本上声明它可以工作时,你使用的是.predict()- SageMaker Python SDK。
如果是这样的话,您可以使用boto 3客户端(我看到您已经展示了它),您只需要像SDK一样将
imageBody
序列化为字节,并设置正确的AcceptType
和ContentType
。若要查询部署到端点的已训练模型,您需要提供影像和表示所需输出类型的AcceptType。端点会采用image/jpeg内容类型的JPEG影像。如果您要求image/png的AcceptType,算法会输出PNG档案,其中含有与标签本身相同格式的区段遮罩。如果您要求application/x-recordio-protobuf的AcceptType,该算法返回以recordio-protobuf格式编码的类概率。
https://docs.aws.amazon.com/sagemaker/latest/dg/semantic-segmentation.html#semantic-segmentation-inputoutput-inference