TensorFlow加载JPEG图片失败求助(MacOS+Python3.6.4环境)
解决TensorFlow Inception3推理时的图片格式报错问题
从你给出的报错信息来看,核心问题是:你的代码尝试读取了非图片格式的文件,虽然你确认测试用的是JPEG,但报错里的文件头'\000\000\000\001Bud1\000\000\020\000\000\000\010\000'完全不是JPEG(JPEG标准开头是FF D8 FF)。大概率是MacOS自动生成的.DS_Store隐藏文件(目录缓存文件)被os.walk遍历到了,或者目录里混了其他非图片文件。
直接修复方案
修改你的文件遍历逻辑,过滤掉非图片文件和隐藏文件:
import os import tensorflow as tf # 定义支持的图片扩展名 ALLOWED_EXTENSIONS = ('.jpg', '.jpeg', '.png', '.gif') with tf.gfile.FastGFile('inception_model/classify_image_graph_def.pb', 'rb') as f: graph_def = tf.GraphDef() graph_def.ParseFromString(f.read()) tf.import_graph_def(graph_def, name='') with tf.Session() as sess: softmax_tensor = sess.graph.get_tensor_by_name('softmax:0') # 遍历目录 for root, dirs, files in os.walk('images/'): for file in files: # 跳过隐藏文件(比如Mac的.DS_Store) if file.startswith('.'): continue # 只处理指定扩展名的图片文件 if not file.lower().endswith(ALLOWED_EXTENSIONS): continue # 加载并推理图片 image_path = os.path.join(root, file) image_data = tf.gfile.FastGFile(image_path, 'rb').read() predictions = sess.run(softmax_tensor, {'DecodeJpeg/contents:0': image_data}) # 这里可以添加你的结果处理逻辑 print(f"处理图片: {file}")
额外排查步骤
如果修改后还是报错,可以做这两步验证:
- 手动检查图片完整性:用Mac预览打开你的测试图片,确认能正常显示;或者在终端执行
hexdump -n 10 你的图片路径.jpg,查看输出的前几个字节是否是ff d8 ff(JPEG标准开头)。 - 清理目录冗余文件:手动删除
images/目录下的隐藏文件和非图片文件,确保目录里只有你要测试的图片。
关于其他警告的说明
你看到的几个警告不影响当前推理,解释一下:
compiletime version 3.5 ... does not match runtime version 3.6:你安装的TensorFlow是用Python3.5编译的,和你当前的Python3.6版本不匹配,不影响功能,介意的话可以重新安装适配Python3.6的TensorFlow版本。Your CPU supports instructions that this TensorFlow binary was not compiled to use:提示你的CPU支持更高级的指令集,但当前TensorFlow版本没用到,不影响运行速度(如果追求性能可以编译源码安装TensorFlow)。Op BatchNormWithGlobalNormalization is deprecated:Inception3模型使用了TensorFlow的旧操作,官方已经标记为废弃,但不影响推理功能。
内容的提问来源于stack exchange,提问作者Jiang Wenbo
相关产品推荐
相关产品推荐

