在application / x-recordio-protobuf中转换PNG图像以在C#中调用sagemaker端点

时间:2019-04-06 14:07:17

标签: c# amazon-sagemaker

我正在尝试使用InvokeEndpointRequest对象在C%中的SageMaker端点上进行一些推断。我的推断主体是PNG或JPEG图像。但是,SageMaker需要应用程序/ x-recordio-protobuf格式。如何将我的图像文件转换成这种格式,以便能够对上述对象使用InvokeEndpoint。

InvokeEndpointRequest invokeRequest = new InvokeEndpointRequest
{
  EndpointName = "kmeans-2019-xx-xx-xx-xx-xx-xxx",
  Body= GetImageFromFile(),
  ContentType= "application/x-recordio-protobuf"
};
InvokeEndpointResponse invokeResponse = smClient.InvokeEndpoint(invokeRequest);

目前,GetImageFromFile方法仅读取图像文件并在MemoryStream中对其进行转换:

Stream stream = openFileDialog.OpenFile();

byte[] data = new byte[stream.Length];
stream.Read(data, 0, (int)stream.Length);
MemoryStream ms=new MemoryStream(data);

return ms;

我尝试使用Protobuf-net序列化MemoryStream,但是它不起作用。

1 个答案:

答案 0 :(得分:0)

您可以首先将PNG图片转换为numpy数组(可以使用PILOpenCV或通过其他库来完成)。

将图像表示为ndarray后,将其转换为protobuf recordIO格式,如example所示。