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