当我运行代码时,出现如下错误:

File "data2record.py", line 120, in <module>
    run()
  File "data2record.py", line 114, in run
    image_data, shape, bbox, label ,imname= _processing_image(wordbb, imname,coder)
  File "data2record.py", line 64, in _processing_image
    image_data = tf.gfile.GFile(FLAGS.datasets + imname, 'r').read()
  File "/home/tian/.local/lib/python3.5/site-packages/tensorflow/python/lib/io/file_io.py", line 125, in read
    pywrap_tensorflow.ReadFromStream(self._read_buf, length, status))
  File "/home/tian/.local/lib/python3.5/site-packages/tensorflow/python/lib/io/file_io.py", line 93, in _prepare_value
    return compat.as_str_any(val)
  File "/home/tian/.local/lib/python3.5/site-packages/tensorflow/python/util/compat.py", line 106, in as_str_any
    return as_str(value)
  File "/home/tian/.local/lib/python3.5/site-packages/tensorflow/python/util/compat.py", line 84, in as_text
    return bytes_or_text.decode(encoding)
UnicodeDecodeError: 'utf-8' codec can't decode byte 0xff in position 0: invalid start byte


我的代码中的错误行是:

...
image_data = tf.gfile.GFile(FLAGS.datasets + imname, 'r').read()
image = coder.decode_jpeg(image_data)
...


我的tensorflow是1.3而python是3.5。并且此代码可以在tensorflow 1.0,python 2.7中运行。为什么它不能在tensorflow是1.3和python 3.5中运行?
代码在以下位置的datasets / data2record.py中:
有人可以帮我吗?

最佳答案

就像错误所说的那样,因为它试图将文件数据解码为unicode并失败。

更改行:

image_data = tf.gfile.GFile(FLAGS.datasets + imname, 'r').read()

至:

image_data = tf.gfile.GFile(FLAGS.datasets + imname, 'rb').read()

以二进制模式读取文件。它在Py2中工作,因为默认情况下str是字节字符串,而在Py3中它是unicode字符串,因此在文本模式下读取文件时需要解码。

关于python - tensorflow:“tf.gfile.GFile”中带有“'utf-8'编解码器的内容无法解码...”,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/45882520/

10-09 17:16