TensorFlow生成tfrecords时出现UnicodeDecodeError错误该如何解决?
错误原因
该报错为Windows系统下的路径编码冲突导致:你的图片文件路径、文件名或CSV文件中包含中文/非UTF-8编码的特殊字符,tf.io.gfile.GFile接口在Windows下默认使用UTF-8解码路径,碰到GBK编码的字符就会抛出解码失败错误。
可行解决方法
方案1(最简便,优先尝试):替换TensorFlow文件读取接口为Python原生接口
将create_tf_example函数中读取图片的代码:with tf.io.gfile.GFile(os.path.join(path, '{}'.format(group.filename)), 'rb') as fid:修改为:
with open(os.path.join(path, group.filename), 'rb') as fid:原生
open函数对Windows下的中文路径兼容性更好,无需修改其他逻辑即可正常读取二进制图片文件。方案2(需保留
tf.io.gfile.GFile时使用):转码路径字符串
在构造图片路径后先做编码兼容处理,修改读取部分代码为:img_path = os.path.join(path, group.filename).encode('utf-8').decode('latin-1') with tf.io.gfile.GFile(img_path, 'rb') as fid:补充检查:确认CSV文件编码
如果你运行时在pd.read_csv步骤也出现同类编码错误,可修改读取CSV的代码,指定对应编码:# CSV为Excel默认保存的GBK编码时用这个 examples = pd.read_csv(FLAGS.csv_input, encoding='gbk') # CSV为UTF-8带BOM编码时用这个 examples = pd.read_csv(FLAGS.csv_input, encoding='utf-8-sig')根源规避方案
全链路避免出现非ASCII字符:所有文件路径、图片文件名、标注类别名统一使用英文+数字组合,不要包含中文、特殊符号、空格,从根本上避免编码冲突问题。
内容的提问来源于stack exchange,提问作者Bellafkih Fatima
相关产品推荐
相关产品推荐

