【问题标题】:Why would tensorflow.decode_base64 fail due to invalid character, but base64.b64decode(image_base64) succeeds为什么 tensorflow.decode_base64 由于无效字符而失败,但 base64.b64decode(image_base64) 成功
【发布时间】:2018-08-01 06:58:18
【问题描述】:

我正在转换一些图像转换代码以使用 tensorflow。

我的图像作为 base64 字符串传入。使用以下函数,可以将 base64 字符串解码并作为 np.array 打开:

def load_color_image_base64(image_base64): img_pil = Image.open(BytesIO(base64.b64decode(image_base64))).convert("RGB") return np.array(img_pil)

但是,当我将相同的字符串传递给以下 tensorflow 代码时,会出现错误:

self._image = tf.image.decode_jpeg(tf.decode_base64(self._image_b64), channels=3)

我得到的错误是:

tf.decode_base64(self._image_b64), 通道=3) 文件“/Users/jameskelly/anaconda/envs/im2volume/lib/python2.7/site-packages/tensorflow/python/ops/gen_string_ops.py”,第 106 行,在 decode_base64 “DecodeBase64”,输入=输入,名称=名称) _apply_op_helper 中的文件“/Users/jameskelly/anaconda/envs/im2volume/lib/python2.7/site-packages/tensorflow/python/framework/op_def_library.py”,第 787 行 op_def=op_def) 文件“/Users/jameskelly/anaconda/envs/im2volume/lib/python2.7/site-packages/tensorflow/python/framework/ops.py”,第 2956 行,在 create_op op_def=op_def) 文件“/Users/jameskelly/anaconda/envs/im2volume/lib/python2.7/site-packages/tensorflow/python/framework/ops.py”,第 1470 行,在 __init__ self._traceback = self._graph._extract_stack() # pylint: disable=protected-access InvalidArgumentError(参见上面的回溯):在 base64 中发现无效字符。 [[节点:DecodeBase64 = DecodeBase64[_device="/job:localhost/replica:0/task:0/device:CPU:0"](_arg_Placeholder_2_0_2)]]

需要注意的是,这段代码是在一个flask api的后面。当我直接运行该类,从磁盘加载图像并将其直接转换为 base64 时,两种情况都有效。

我还将base64字符串转换为pythonstr类型,因为它是作为unicode传入的,错误消息没有改变。

【问题讨论】:

  • 请您添加一个您正在传递并导致错误的base64编码图像的示例输入。
  • 另请参阅文档:tensorflow.org/versions/master/api_docs/python/tf/decode_base64;它说你需要通过 « web-safe » base64,它不同于普通的 base64 替换冒号 « : » 和斜线 « / » 带有破折号和下划线的符号。

标签: python tensorflow base64


【解决方案1】:

您必须使用 base64.urlsafe_b64encode,正如 Debangshu Paul 提到的那样,使用“-”而不是“+”和“_”而不是“/”。

请参阅https://docs.python.org/3/library/base64.html#base64.urlsafe_b64encode 了解更多信息。

【讨论】:

    【解决方案2】:

    将 base64 字符串中的“/”替换为“_”,将“+”替换为“-”。为我工作。 欲了解更多信息,请参阅:https://www.tensorflow.org/versions/r1.14/api_docs/python/tf/io/decode_base64

    【讨论】:

      猜你喜欢
      • 2010-09-20
      • 1970-01-01
      • 2019-01-20
      • 2010-12-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 2021-02-25
      相关资源
      最近更新 更多