Я пытаюсь использовать модель, основанную на обнаружении объектов, с Tensorflow REST API. Я уже делаю это, используя режим GRPC. Я ввожу изображение base64, проанализированное в массив Numpy, как показано ниже:
#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 )-\037%*!\',#)..."
}
И это прекрасно работает в GRPC.
Для Tensorflow REST API я не знаю, как это должно работать.
Я создал полезную нагрузку так:
{
"signature_name": "serving_default",
"inputs":{
"inputs":[
{
"b64":""
}
]
}
}
Передача изображения в формате base64.
Что я делаю не так?
Каждый раз, когда я отправляю запрос, я получаю сообщение об ошибке:
Type: Object is not of expected type: uint8"
Что-то не так с этой структурой?
Как мне построить правильный JSON для прогнозирования на моделях обнаружения объектов?
Большое спасибо!