如何使用ImageDataGenerator对读取的文件进行排序



输入图片描述

输入图片描述

我有一个麻烦在加载图像与DataGenerator。你可以从图片上看到,这不是我的真实路径。应该是img(1), img(2),…但是img(1), img(10), img(100),…

我该如何解决这个问题?提前谢谢你。

顺序不是您所期望的原因是生成器按字母数字顺序处理图像。例如,如果你的图片被标记为1.jpg, 2.jpg,…9.jpg, 10.jpg, 11.jpg…等等它们将按照订单进行处理1.jpg, 10 .jpg, 11.jpg等,2.jpg,20.jpg等。保持顺序的一种方法是使用"零"填充来命名文件。例如,如果您有20个文件,将它们标记为09.jpg, 10.jpg等。注意,如果使用flow_from_directory,类目录也是按字母数字顺序处理的。下面是一个函数的代码,该函数将重命名目录(source_dir)中的所有文件,从整数(snum)开始,并使用适当的'零'填充。

def rename (source_dir, snum, ):
import os    
import shutil         
flist=os.listdir(source_dir)       
temp_dir=os.path.join(source_dir, 'temp')    
if os.path.isdir(temp_dir):
shutil.rmtree(temp_dir)
os.mkdir(temp_dir)
for f in flist:
fpath=os.path.join(source_dir,f)
dpath=os.path.join(temp_dir,f)
shutil.copy(fpath, dpath)
tlist=os.listdir(temp_dir)
for f in tlist:
fpath=os.path.join(source_dir,f)
os.remove(fpath)
tlist=os.listdir(temp_dir)    
fc=len(tlist)  # determine number of d files to process which determines amout of zeros padding needed     
pad=0
mod = 10     
for i in range(1, fc + 1): # skip i=0 because 0 modulo anything is 0 and we don't want to increment pad
if i % mod == 0:
pad=pad+1                    
mod =mod * 10     
for i,f in enumerate(tlist):                 
fpath=os.path.join(temp_dir,f) #full path to the file       
index=fpath.rfind('.') # find location of last . in file name          
new_path=os.path.join(source_dir, str(i + snum).zfill(pad+1) + fpath[index :] )          
shutil.copy(fpath, new_path)        
shutil.rmtree(temp_dir)

相关内容

  • 没有找到相关文章

最新更新