• 图片数据处理


    处理GTSRB的原始数据集,从GTSRB官网上下载的文件由2个压缩文件组成,分别为GTSRB_Final_Test_Images.zip, GTSRB_Final_Training_Images.zip。

    下载地址:http://benchmark.ini.rub.de/?section=gtsrb&subsection=dataset

    从官网说明得知共有43个类别的交通标志牌,解压后分别得到训练集和测试集,其中训练集图片按类别分别存储在不同文件夹下,每个类别分别有200到2000多张图片不等。

    图片以PPM格式存储,每个文件夹下都有一个CSV文件,存储着不同图片的大小信息以及交通标识在图片上的位置坐标,

    下面的程序要做的是遍历图片文件,根据CSV提供的信息,对图片进行裁剪,并以JPG格式保存到指定文件夹,通过这次练习,对os.path(), os.walk()等一些API有了一定了解,

    处理后的数据作为接下来制作TFFrecords文件提供材料

     1 # -*- coding: utf-8 -*-
     2 
     3 from PIL import Image
     4 import os
     5 import re
     6 
     7 # 获取当前路径(不光以下的方法,还有其它方法,如os.getcwd())
     8 cur_path = os.path.abspath(os.curdir)
     9 # print(cur_path)
    10 
    11 new_dir = ['test_file_dir', 'train_file_dir']
    12 for dir in new_dir:
    13     dir = os.path.join(cur_path, dir)
    14     if os.path.exists(dir):  # 否则会报错
    15         pass
    16     else:
    17         os.mkdir(dir)
    18 
    19 # resize后的大小
    20 width = 128
    21 height = 128
    22 
    23 test_source_dir = 'E:CVVGGnetGTSRB_Final_Test_ImagesGTSRBFinal_TestImages'
    24 train_source_dir = 'E:CVVGGnetGTSRB_Final_Training_ImagesGTSRBFinal_TrainingImages'
    25 
    26 # 处理测试集
    27 # with open('GTSRB_Final_Test_ImagesGT-final_test.test.csv') as file:
    28 with open(test_source_dir + 'GT-final_test.test.csv', 'r') as file:
    29     print('lala')
    30     content = []
    31     i = 0
    32     for line in file:
    33         print(line)
    34         i += 1
    35         if i == 1:
    36             continue
    37         content = content + line.split(';')
    38         print(content)
    39         pic = Image.open(test_source_dir + '\' + content[0]) # 如果使用os.path.join()的话,中间不用加'\'
    40         pic = pic.crop((float(content[3]), float(content[4]), float(content[5]), float(content[6][:-1]))) # content[6]里有一个换行符
    41         # 调整图像大小(Image.BILINEAR指定采用双线性法对像素点插值)
    42         pic.resize((width, height), Image.BILINEAR).save(r'%s\%s.jpg' % (os.path.join(cur_path, new_dir[0]), content[0][0:-4]))
    43         content[:] = []
    44 
    45 # 处理训练集
    46 
    47 # dirs, files分别是子文件夹和文件的名称的list,注意不是路径!!! root即walk()里的路径
    48 for (root, dirs, files) in os.walk(train_source_dir):  # os.walk()不返回任何东西,不能用=号, 只能用for...in...的方式获得
    49     for sub_dir in dirs:
    50         new_folder = os.path.join(cur_path, new_dir[1], sub_dir)
    51         # print(new_folder)
    52         if os.path.exists(new_folder):
    53             pass
    54         else:
    55             os.mkdir(new_folder)
    56         for (_, _, filename) in os.walk(os.path.join(root, sub_dir)):
    57             for sub_file in filename:
    58                 if sub_file.endswith('.csv'):
    59                     with open(os.path.join(root, sub_dir, sub_file), 'r') as csv_file:
    60                         print('lala')
    61                         content = []
    62                         i = 0
    63                         for line in csv_file:
    64                             print(line)
    65                             i += 1
    66                             if i == 1:
    67                                 continue
    68                             content = content + line.split(';')
    69                             print(content)
    70                             pic = Image.open(os.path.join(root, sub_dir, content[0]))
    71                             pic = pic.crop((float(content[3]), float(content[4]), float(content[5]),
    72                                             float(content[6])))
    73                             # 调整图像大小(Image.BILINEAR指定采用双线性法对像素点插值)
    74                             pic.resize((width, height), Image.BILINEAR).save(r'%s\%s.jpg' % (new_folder, content[0][0:-4]))
    75                             content[:] = []
  • 相关阅读:
    格式化 | python笔记(1)
    在docker容器中部署python-selenium+chrome-headless自动化脚本(续)
    Jenkins+Postman+Newma+Xmysql之API全自动化测试
    1分钟搭建极简mock server
    绘图神器-matplotlib入门
    请务必每天早上8点将前十条科技要闻发给三爷
    请以excel管理你的接口测试用例
    如何优雅地使用httprunner进行接口测试
    一键压测工具改造(locust)
    shell中if的可判断的类型
  • 原文地址:https://www.cnblogs.com/tan-wm/p/9555644.html
Copyright © 2020-2023  润新知