Клиент обнаружения обслуживающего объекта Tensorflow - PullRequest
0 голосов
/ 26 сентября 2019

У меня есть контейнер докера с тензорным потоком, работающий с моделью детектора объектов.Для создания этой модели я использовал следующий код

  input_img = sess.graph.get_tensor_by_name('Placeholder:0')
  output_cls_prob = sess.graph.get_tensor_by_name('Reshape_2:0')
  output_box_pred = sess.graph.get_tensor_by_name('rpn_bbox_pred/Reshape_1:0')

  builder = tf.saved_model.builder.SavedModelBuilder('./export/1')

  imageplaceholder_info = tf.saved_model.utils.build_tensor_info(input_img)
  cls_prob_info = tf.saved_model.utils.build_tensor_info(output_cls_prob)
  box_pred_info = tf.saved_model.utils.build_tensor_info(output_box_pred)
  prediction_signature = (
    tf.saved_model.signature_def_utils.build_signature_def(
      inputs={
        'image': imageplaceholder_info
      },
      outputs={
        'output_cls_prob': cls_prob_info,
        'output_box_pred': box_pred_info
      },
      method_name=tf.saved_model.signature_constants.PREDICT_METHOD_NAME
    )
  )
  init_op = tf.group(tf.tables_initializer(), name='legacy_init_op')
  builder.add_meta_graph_and_variables(sess, [tf.saved_model.tag_constants.SERVING],
       signature_def_map={'ctpn_recs_predict': prediction_signature}, legacy_init_op=init_op)
  builder.save()

Докер запускает эту модель обслуживания тензорного потока на локальном хосте: порт 9000. Как отправить изображение на этот номер порта и получить соответствующий ответ (в моем случае output_cls_prob и output_box_pred)?

Пока у меня есть этот клиентский код grpc для чтения изображения:

def run(host, port, image, model, signature_name):

    channel = grpc.insecure_channel('{host}:{port}'.format(host=host, port=port))
    stub = prediction_service_pb2_grpc.PredictionServiceStub(channel)


    # Read an image
    data = imread(image)
    data = data.astype(np.float32)
    print(data)




    if __name__ == '__main__':
        parser = argparse.ArgumentParser()
        parser.add_argument('--host', help='Tensorflow server host name', default='localhost', type=str)
        parser.add_argument('--port', help='Tensorflow server port number', default=9000, type=int)
        parser.add_argument('--image', help='input image', type=str, default='1.jpg')
        parser.add_argument('--model', help='model name', type=str, default='serve/test')
        parser.add_argument('--signature_name', help='Signature name of saved TF model',
                            default='prediction_signature', type=str)

        args = parser.parse_args()
        run(args.host, args.port, args.image, args.model, args.signature_name)

что я должен сделать, чтобы считанное изображение было отправлено в tenorflowобслуживающий докер контейнер для прогноза?

...