首页 > 技术文章 > 深度学习中生成.txt文件记录图片路径

learningcaiji 2020-11-17 00:09 原文

在深度学习中

我们首先要准备数据集,尤其时用pytorch进行模型搭建训练时,需要首先构建dataset,然后封装为dataloder。

在生成dataset时,我们通过图片路径读取图片,然后进行一系列图片变换,生成可用于训练的dataset,我们需要把图片路径保存在一个.txt文件中,

通过读取.txt文件,将所有图片路径保存在一个list 里面,后面再用__getitem__(self, index)方法读取图片。

self.files = [line.rstrip() for line in tuple(open(file_list, "r"))]

下面总结一下生成.txt 函数常用的几个API

因为图片都存放在文件夹下,所以最常用的就是 os 模块

1. os.listdir

通过listdir 可以将文件夹下的所有文件名称放到一个列表里,只要我们遍历这个列表,并把列表里的元素写入到txt文件中即可

2. endswith(".jpg")

通过endswith(" ") 可以筛选符合要求的文件,通常我们的图片文件都是以文件格式结尾的,如.jpg, .jpeg。。。

3. open(filename, ‘w') as f 

通过open(filename, ‘w') as f 可以打开.txt 文件,如果此文件不存在可以创建该文件,后面通过f.write(file_path) 方法将路径写入.txt文件中

4. os.path.join()

通过os.path.join() 可以生成相对路径,

5. os.path.exists()  , os.makedirs()

上面的两个方法较常用,用于判断是否存在该路径,如果不存在,则新建该路径, 存放文件

 

在 os模块中还有一个采用递归的方式 遍历文件下下所有文件和目录的方法(os.walk(rootdir))

函数返回一个可用for 循环遍历的三元素元组

如下所示文件结构:

采用os.walk()方法遍历:获得所以根目录下的所有文件

同理可以获得根目录下的所有子目录

for root, dirs, files in os.walk("google_tensorflow"):
    for dir in dirs:
        print(root)
        print(os.path.join(root, dir))

 

如果我们想看一下某目录下总共有多少张图片,可以采用glob模块下的glob方法

file_num = glob.glob(pathname=os.path.join(filepath, dirs, "*.jpg"))
    print(len(file_num))

为了检验生成的.txt 文件是否涵盖所有的图片路径

我们可以将.txt文件中记录的路径数于目录下的图片总数对比,如何获取.txt文件中的记录的路径总数呢

以只读的方式打开该文件,按行读取f.readlines(),自动返回一个列表,列表每一个元素则是txt文件中的每一行,返回列表的长度即可

with open(r"val.txt", 'r') as f:
  lists = f.readlines()
print(len(lists))

 

推荐阅读