今天需要用到一个交通标志牌(GTSRB数据集),但是数据都是ppm格式的,虽说用PIL模块也是可以直接打开的,但是不利于直接查看很不方便,所以这里打算做一个转化处理。
首先是从网上下载到所需的数据集,下载地址在这里。截图如下所示:
这里想要先去吐槽一下,找了好几遍才找到了数据集的下载链接,这也太不起眼了吧,我红框标出来了。
点击跳转到了下载页面后就可以进行下载了,下面是需要下载的数据集:
当然了,如果不在乎的话也是可以直接全部下载的。
下载后直接解压缩会得到如下文件结构:
我们简单看下测试数据集:
可以看到:一共有12630张测试图像,除此之外还有一个csv文件,存放没一张图片的ROI数据,训练集也是同样的组成,接下来我们直接来进行数据解析处理,代码实现如下所示:
#!usr/bin/env python#encoding:utf-8from __future__ import division'''__Author__:沂水寒城功能: GTSRB数据集解析处理'''import osimport PILimport numpy as npimport pandas as pdimport matplotlib.pyplot as pltdef convertTrainData(dataDir='data/GTSRB/Final_Training/Images/',saveDir='dataset/train/'):'''训练数据集转化处理'''labelDir=os.listdir(dataDir)for label in labelDir:oneDir=dataDir+label+'/'oneSaveDir=saveDir+label+'/'if not os.path.exists(oneSaveDir):os.makedirs(oneSaveDir)for one_file in os.listdir(oneDir):if one_file.endswith(".csv"):csvFile=os.path.join(oneDir,one_file)csv_data=pd.read_csv(csvFile)csv_data_array=np.array(csv_data)for i in range(csv_data_array.shape[0]):csv_data_list=np.array(csv_data)[i,:].tolist()[0].split(";")one_ppm=os.path.join(oneDir,csv_data_list[0])img=PIL.Image.open(one_ppm)box=[int(csv_data_list[3]),int(csv_data_list[4]),int(csv_data_list[5]),int(csv_data_list[6])]img=img.crop(box)one_save_path=oneSaveDir+str(len(os.listdir(oneSaveDir))+1)+'.png'img.save(one_save_path)def convertTestData(dataDir='data/GTSRB/Final_Test/Images/',saveDir='dataset/test/'):'''测试数据集转化处理'''if not os.path.exists(saveDir):os.makedirs(saveDir)file_list=os.listdir(dataDir)for one_file in file_list:if one_file.endswith(".csv"):csvFile=os.path.join(dataDir,one_file)csv_data=pd.read_csv(csvFile)csv_data_array=np.array(csv_data)for i in range(csv_data_array.shape[0]):csv_data_list=np.array(csv_data)[i,:].tolist()[0].split(";")one_ppm=os.path.join(dataDir,csv_data_list[0])img=PIL.Image.open(one_ppm)box=[int(csv_data_list[3]),int(csv_data_list[4]),int(csv_data_list[5]),int(csv_data_list[6])]img=img.crop(box)one_save_path=saveDir+str(len(os.listdir(saveDir))+1)+'.png'img.save(one_save_path)if __name__ == "__main__":convertTrainData(dataDir='data/GTSRB/Final_Training/Images/',saveDir='dataset/train/')convertTestData(dataDir='data/GTSRB/Final_Test/Images/',saveDir='dataset/test/')
执行,等待一会后,看下处理好的数据集:
首先是【训练集】:
接下来是【测试集】:
完成上述的数据解析存储处理之后就可以进行后续的建模分析了。