使用tf.keras数据增强时,flow()循环报文件不存在错误求助
解决ImageDataGenerator flow方法的FileNotFoundError问题
问题核心原因
你遇到的FileNotFoundError是因为save_to_dir指定的目录不存在,flow方法不会自动创建目标目录。另外代码里的计数变量i作用域错误,会导致仅处理第一张图片就停止生成增强图。
修复步骤
1. 提前创建保存目录
在调用flow前,先检查并创建目标目录,避免找不到路径的错误:
import os # 定义保存增强图的目录 save_dir = '/home/kai/SURF22/yolov5/data/sc_google_aug' # 目录不存在则创建 if not os.path.exists(save_dir): os.makedirs(save_dir)
2. 修正计数变量的位置
将i的初始化放到遍历图片的循环内部,确保每张原图都能生成指定数量的增强图:
for image in os.listdir(folder_dir + "prelim_data/sc_google_trans"): # 每张图单独初始化计数 i = 0 # 后续加载图片、处理数组的代码不变
3. 优化代码(可选)
把ImageDataGenerator的定义提到循环外,无需每次处理图片都重复初始化:
# 提前定义数据增强器 idg = ImageDataGenerator(horizontal_flip=True, vertical_flip=True, rotation_range=360, brightness_range=[0.2, 1.0], shear_range=45) save_dir = '/home/kai/SURF22/yolov5/data/sc_google_aug' if not os.path.exists(save_dir): os.makedirs(save_dir) folder_dir = "/home/kai/SURF22/yolov5/data/" for image in os.listdir(folder_dir + "prelim_data/sc_google_trans"): i = 0 img = Image.open(folder_dir + "prelim_data/sc_google_trans/" + image) aug_img = img.copy() aug_array = img_to_array(aug_img) aug_array = aug_array.reshape((1,) + aug_array.shape) for batch in idg.flow(aug_array, batch_size=1, save_to_dir=save_dir, save_prefix='aug', save_format='png'): i += 1 if i > 3: break
额外说明
- 你提到的“传入图像绝对路径出现字符串转浮点数错误”:
flow方法仅接收图像数组,不能直接传路径字符串,你原本用数组的方式是正确的。 - 确认
folder_dir + "prelim_data/sc_google_trans"路径真实存在,且目录内有可正常读取的图片文件。
内容的提问来源于stack exchange,提问作者Marie
相关产品推荐
相关产品推荐

