我正在尝试使用基于对象检测的模型使用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
]
}