Tensorflow服务:以\\\'\\\\ n开头的未知格式

时间:2018-12-05 05:42:22

标签: tensorflow

最近我使用tensorflow服务API服务模型。该模型是图像分类器。根据tf服务文件。分类任务的请求格式如下:

post_data = {
  "signature_name": "classify",
  "examples": [
    {
      "inputs": {"b64": s}
    },]}

其中 s 是base64编码的图像,其计算方式为:

img_path = '/Users/wuyanxue/Desktop/234.jpg'
img_b64 = base64.b64encode(open(img_path, 'rb').read())
s = str(img_b64, encoding='utf-8')

请注意,base64encode是url不安全的。当我使用 json = post_data 参数将请求发布到服务器时。它给了我

  

期望的图像(JPEG,PNG或GIF),格式以\\'\\ n \ ...开头。

因此,我一步一步检查了模型代码,即:

serialized_tf_example = tf.placeholder(shape=[1], dtype=tf.string, name='tf_example')
img_contents = tf.image.decode_jpeg(serialized_tf_example[0], channels=3)

此方法的签名为:

tensor_info_x = utils.build_tensor_info(serialized_tf_example)
tensor_info_class_names = utils.build_tensor_info(tf.convert_to_tensor(['neg', 'pos'], dtype=tf.string))
tensor_info_logits = utils.build_tensor_info(predictions)
classification_signature = signature_def_utils.build_signature_def(
inputs={"inputs": tensor_info_x},
outputs={"classes": tensor_info_class_names,
         "scores": tensor_info_logits},
method_name=signature_constants.CLASSIFY_METHOD_NAME)

模型已建立:

builder.add_meta_graph_and_variables(
  sess,
  [tag_constants.SERVING],
  signature_def_map={'classify': classification_signature},
  legacy_init_op=legacy_init_op
)

很明显,这是jpeg解码错误,但是当我使用同一图像文件使用

填充模型时
sess.run(results, feed_dict={serialized_tf_example: [open(img_path, 'rb').read()]})

它没有错误,结果正确。

在使用此tf服务分类API之前,我使用了tf服务预测API。 在该预测过程中,我使用了相同的模型并进行了预测。 它运行没有任何错误。当然,这两个API的请求格式略有不同。 (例如,预测使用“实例”,但不使用“示例”。) 我发现这两种呼叫类型之间没有其他区别。 谁能告诉我什么不正确?

0 个答案:

没有答案