在使用base64编码的图像时,如何使用tensorflow部署keras模型?

时间:2019-07-14 21:25:56

标签: python tensorflow keras tensorflow-serving

在将keras模型引入生产时,tensorflow通常用作REST API。因为图像数据期望与网络输入层相同的输入格式,例如图像数据,所以它具有一些缺点。 JSON中形状为(300,300,3)的数组。使其工作的唯一方法似乎是将tensorflow服务API包装到另一个服务中。

如何使tensorflow用于提供一个keras模型,该模型接受base64编码的图像,而无需将其包装在另一个API中?

1 个答案:

答案 0 :(得分:0)

我找到了解决方案,here是更详细的说明:

import tensorflow as tf
sess = tf.Session() # get the tensorflow session to reuse it in keras

from keras import backend as K
from keras.models import load_model

K.set_session(sess)
K.set_learning_phase(0) # make sure we disable dropout and other training specific layers

string_inp = tf.placeholder(tf.string, shape=(None,)) #string input for the base64 encoded image
imgs_map = tf.map_fn(
    tf.image.decode_image,
    string_inp,
    dtype=tf.uint8
) # decode jpeg
imgs_map.set_shape((None, None, None, 3))
imgs = tf.image.resize_images(imgs_map, [300, 300]) # resize images
imgs = tf.reshape(imgs, (-1, 300, 300, 3)) # reshape them 
img_float = tf.cast(imgs, dtype=tf.float32) / 255 - 0.5 # and make them to floats

model = load_model('keras.h5', compile=False) # load the model
output = model(img_float) # use the image tensor as input for keras
# ...(save to savedModel format and load in tensorflow serve)