使用Python客户端

简介

我们要访问TensorFlow serving服务,Python应用也需要实现对应的gRPC客户端。

TensorFlow serving官方文档提供了生成mnist Python客户端的例子,但由于依赖bazel编译,编译出来的Python脚本不能直接运行。

完整例子

这里提供一个Python gRPC客户端例子,手动生成proto代码,没有任何依赖可以直接运行 https://github.com/tobegit3hub/deep_recommend_system/tree/master/python_predict_client

./predict_client.py --host 127.0.0.1 --port 9000 --model_name linear --model_version 1

不同模型的输入格式不同,我们只需要直接修改Python脚本中构建TensorProto的代码即可,建议使用该项目编译生成的文件和代码例子。

实现原理

实现Python gRPC客户端,我们需要编译TensorFlow serving和TensorFlow的proto文件,由于官方项目依赖bazel编译,我们需要修改proto文件中的依赖路径。

编译生成的Python文件可以直接import,然后参考TensorFlow的文档生成TensorProto对象,参考gRPC的文档调用gRPC服务端即可。

读取图片文件生成TesorProto

在图像分类等场景,我们需要将图片转成numpy或者TensorProto对象,才能通过gRPC请求TensorFlow serving服务,这里提供使用scipy ndimage的例子,测试已经支持jpg和png文件。

这里提供一个完整的使用CNN训练图像分类模型,然后使用Python客户端加载jpg或png文件进行预测的例子 https://github.com/tobegit3hub/deep_cnn/blob/master/python_predict_client/predict_client.py

from scipy import ndimage

# Create numpy ndarray for batch images
features = np.ndarray(shape=(5, 32, 32, 3), dtype=np.float32)

image_filepaths = ["../data/inference/Blastoise.png",
                   "../data/inference/Charizard.png",
                   "../data/inference/Mew.png",
                   "../data/inference/Pikachu.png",
                   "../data/inference/Venusaur.png"]

for index, image_filepath in enumerate(image_filepaths):
  image_ndarray = ndimage.imread(image_filepaths[0], mode="RGB")
  features[index] = image_ndarray

# Create TensorProto
features_tensor_proto = tf.contrib.util.make_tensor_proto(features,
                                                          dtype=tf.float32)

results matching ""

    No results matching ""