如何使用TensorFlow REST API在对象检测中正确构建请求JSON



我正在尝试使用基于对象检测的模型使用TensorFlow REST API。我已经使用GRPC模式了。我输入一个base64映像,将其解析为一个numpy数组,作为代码bellow:

            #Converting to byte array
            image = base64.b64decode(input)
            #Now converting to numpy array
            nparr = np.fromstring(image, np.uint8)
            #Decode into image object
            image = cv2.imdecode(nparr, cv2.IMREAD_COLOR)
            #Expandind the array
            image_expanded = np.expand_dims(image, axis=0)
            #Making the predict of image
            result = self._predict(image_expanded, label_map_string, num_classes, image)

因此,我称预测方法是GRPC调用发生的地方:

        stub = self._connection()
        result = None
        request = predict_pb2.PredictRequest()
        request.model_spec.name = self.lst_model_names[0]
        request.model_spec.signature_name = self.signature_name
        label_map = label_map_util.load_labelmap(label_map_string)
        categories = label_map_util.convert_label_map_to_categories(label_map, max_num_classes=num_classes,
                                                                    use_display_name=True)
        category_index = label_map_util.create_category_index(categories)
        request.inputs['inputs'].CopyFrom(
            tf.contrib.util.make_tensor_proto(data))
        result = stub.Predict.future(request, self.timeout)

在请求对象中,我有类似的东西:

model_spec {
name: "object_detection"
signature_name: "serving_default"
}
inputs {
  key: "inputs"
  value {
    dtype: DT_UINT8
    tensor_shape {
      dim {
        size: 1
      }
      dim {
        size: 720
      }
      dim {
        size: 1280
      }
      dim {
        size: 3
      }
    }
    tensor_content: "&/3 )-37%*!',#)..."
}

它在grpc中完美工作。

对于TensorFlow REST API,我不知道它应该如何工作。我已经建立了这样的有效载荷:

{
"signature_name": "serving_default",
"inputs":{
    "inputs":[
        {
            "b64":""
        }
    ]
}

}

将图像输入作为base64格式。

我在做什么错?

每次发送请求时,我都会发生错误:

Type: Object is not of expected type: uint8"

这种结构有问题吗?

我应该如何构建正确的JSON来预测对象检测模型?

非常感谢!

我认为结构应该是这样。" b64"适用于base64编码图像,但您的输入是UINT8。

body = {
    "signature_name": "serving_default",
    "inputs": [
        image 
        ]
    }

最新更新