Python实现交通标志牌(GTSRB数据集)解析处理

        今天需要用到一个交通标志牌(GTSRB数据集),但是数据都是ppm格式的,虽说用PIL模块也是可以直接打开的,但是不利于直接查看很不方便,所以这里打算做一个转化处理。

     首先是从网上下载到所需的数据集,下载地址在这里。截图如下所示:

Python实现交通标志牌(GTSRB数据集)解析处理_第1张图片

     这里想要先去吐槽一下,找了好几遍才找到了数据集的下载链接,这也太不起眼了吧,我红框标出来了。

      点击跳转到了下载页面后就可以进行下载了,下面是需要下载的数据集:
 

Python实现交通标志牌(GTSRB数据集)解析处理_第2张图片

      当然了,如果不在乎的话也是可以直接全部下载的。

       下载后直接解压缩会得到如下文件结构:

      我们简单看下测试数据集:

Python实现交通标志牌(GTSRB数据集)解析处理_第3张图片

     可以看到:一共有12630张测试图像,除此之外还有一个csv文件,存放没一张图片的ROI数据,训练集也是同样的组成,接下来我们直接来进行数据解析处理,代码实现如下所示:

#!usr/bin/env python
#encoding:utf-8
from __future__ import division


'''
__Author__:沂水寒城
功能: GTSRB数据集解析处理
'''


 
import os
import PIL
import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

 
 
def 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/')

         执行,等待一会后,看下处理好的数据集:
         首先是【训练集】:

Python实现交通标志牌(GTSRB数据集)解析处理_第4张图片

Python实现交通标志牌(GTSRB数据集)解析处理_第5张图片

Python实现交通标志牌(GTSRB数据集)解析处理_第6张图片

Python实现交通标志牌(GTSRB数据集)解析处理_第7张图片

      接下来是【测试集】:

Python实现交通标志牌(GTSRB数据集)解析处理_第8张图片

       完成上述的数据解析存储处理之后就可以进行后续的建模分析了。

你可能感兴趣的:(python实践,深度学习)