2016-10-10 140 views
0

我想使用tf.image.decode_jpeg解码jpeg文件,但它说它不是JPEG文件。我不知道问题出在哪里。任何人都可以帮我解决这个问题吗?不是JPEG文件:以0xc3开头0xbf

这是我的测试代码。

import tensorflow as tf 

path = "/root/PycharmProjects/mscoco/train2014/COCO_train2014_000000291797.jpg" 

with open(path, "r", encoding="latin-1") as f: 
    image = f.read() 


encoded_jpeg = tf.placeholder(dtype=tf.string) 
decoded_jpeg = tf.image.decode_jpeg(encoded_jpeg, channels=3) 

sess = tf.InteractiveSession() 

sess.run(decoded_jpeg, feed_dict={encoded_jpeg: image}) 

,这是错误:

Not a JPEG file: starts with 0xc3 0xbf 
Traceback (most recent call last): 
    File "/usr/lib/python3.4/site-packages/tensorflow/python/client/session.py", line 965, in _do_call 
    return fn(*args) 
    File "/usr/lib/python3.4/site-packages/tensorflow/python/client/session.py", line 947, in _run_fn 
    status, run_metadata) 
    File "/usr/lib64/python3.4/contextlib.py", line 66, in __exit__ 
    next(self.gen) 
    File "/usr/lib/python3.4/site-packages/tensorflow/python/framework/errors.py", line 450, in raise_exception_on_not_ok_status 
    pywrap_tensorflow.TF_GetCode(status)) 
tensorflow.python.framework.errors.InvalidArgumentError: Invalid JPEG data, size 165886 
    [[Node: DecodeJpeg = DecodeJpeg[acceptable_fraction=1, channels=3, fancy_upscaling=true, ratio=1, try_recover_truncated=false, _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_Placeholder_0)]] 

During handling of the above exception, another exception occurred: 

Traceback (most recent call last): 
    File "/root/PycharmProjects/mytf/models/im2txt/im2txt/data/test.py", line 14, in <module> 
    sess.run(decoded_jpeg, feed_dict={encoded_jpeg: image}) 
    File "/usr/lib/python3.4/site-packages/tensorflow/python/client/session.py", line 710, in run 
    run_metadata_ptr) 
    File "/usr/lib/python3.4/site-packages/tensorflow/python/client/session.py", line 908, in _run 
    feed_dict_string, options, run_metadata) 
    File "/usr/lib/python3.4/site-packages/tensorflow/python/client/session.py", line 958, in _do_run 
    target_list, options, run_metadata) 
    File "/usr/lib/python3.4/site-packages/tensorflow/python/client/session.py", line 978, in _do_call 
    raise type(e)(node_def, op, message) 
tensorflow.python.framework.errors.InvalidArgumentError: Invalid JPEG data, size 165886 
    [[Node: DecodeJpeg = DecodeJpeg[acceptable_fraction=1, channels=3, fancy_upscaling=true, ratio=1, try_recover_truncated=false, _device="/job:localhost/replica:0/task:0/cpu:0"](_recv_Placeholder_0)]] 
Caused by op 'DecodeJpeg', defined at: 
    File "/root/PycharmProjects/mytf/models/im2txt/im2txt/data/test.py", line 10, in <module> 
    decoded_jpeg = tf.image.decode_jpeg(encoded_jpeg, channels=3) 
    File "/usr/lib/python3.4/site-packages/tensorflow/python/ops/gen_image_ops.py", line 283, in decode_jpeg 
    name=name) 
    File "/usr/lib/python3.4/site-packages/tensorflow/python/framework/op_def_library.py", line 703, in apply_op 
    op_def=op_def) 
    File "/usr/lib/python3.4/site-packages/tensorflow/python/framework/ops.py", line 2317, in create_op 
    original_op=self._default_original_op, op_def=op_def) 
    File "/usr/lib/python3.4/site-packages/tensorflow/python/framework/ops.py", line 1239, in __init__ 
    self._traceback = _extract_stack() 

我不能

+0

你使用tensorflow的任何原因,而不是PIL /枕头,这是更多的蟒蛇默认库成像? –

回答

3

就好像它是一个文本文件,你正在阅读的图像文件。

只需更改行:

with open(path, "r", encoding="latin-1") as f: 

with open(path, "rb") as f: 

读取图像作为二进制( “RB”=读取二进制)文件。

+2

斑点。事实证明'c3 bf'是latin-1中的'ff'的UTF-8编码,它是JFIF图像标记开始的第一个字节(是二进制数据,将它解析为任何一种编码都是不正确的)。 –

相关问题