Как правильно построить запрос json в Обнаружении объектов с помощью Tensorflow REST API? - PullRequest
0 голосов
/ 20 мая 2019

Я пытаюсь использовать модель, основанную на обнаружении объектов, с 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 для прогнозирования на моделях обнаружения объектов?

Большое спасибо!

1 Ответ

0 голосов
/ 22 мая 2019

Я думаю, что структура должна быть такой.«b64» для изображения в кодировке base64, но ваш ввод имеет тип uint8.

body = {
    "signature_name": "serving_default",
    "inputs": [
        image 
        ]
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...