美文网首页Python与机器学习
Python 处理 BelgiumTS 压缩文件

Python 处理 BelgiumTS 压缩文件

作者: 水之心 | 来源:发表于2019-08-06 09:35 被阅读1次

    下面以 BelgiumTS 识别交通标志数据集为例子来说明如何使用 tarfilezipfile。首先,需要载入相关包:

    from pathlib import Path
    import tarfile
    import numpy as np
    import imageio
    from matplotlib import pyplot as plt
    
    %matplotlib inline
    

    将下载好的数据存放在 root 下:

    root = Path('D:/data/BelgiumTS')
    

    借助 tarfile 处理 jp2 格式的数据

    需要注意的是 opencv 最新版已经不支持 jp2 格式的数据的处理,因而我转而使用 imagio (如果有报错,请升级 pillow):

    for t in root.glob('camera*'):
        print(t)
    

    打印下载的 jp2 格式的数据:

    D:\data\BelgiumTS\camera00.tar
    D:\data\BelgiumTS\camera01.tar
    D:\data\BelgiumTS\camera02.tar
    D:\data\BelgiumTS\camera03.tar
    D:\data\BelgiumTS\camera04.tar
    D:\data\BelgiumTS\camera05.tar
    D:\data\BelgiumTS\camera06.tar
    D:\data\BelgiumTS\camera07.tar
    

    为了代码的可复用性,定义 tar 文件的解码器:

    class DecodeTar:
        def __init__(self, tar_name):
            '''
            tarfile 解码器
            '''
            self.tar_name = tar_name
            
        def __iter__(self):
            with tarfile.open(self.tar_name) as tar:
                for name in tar.getnames():
                    if name.endswith('jp2'):
                        buffer = tar.extractfile(name).read()
                        yield imageio.imread(buffer)
    

    调用解码器:

    dt = DecodeTar(t)
    

    使用 plt 可视化:

    for img in dt:
        plt.imshow(img)
        plt.show()
        break
    

    我们也可以查看背景图片:

    dt = DecodeTar(root / 'NonTS_TestingBG.tar')
    for img in dt:
        plt.imshow(img)
        plt.show()
        break
    

    借助 zipfile 处理 ppm 图片

    import zipfile
    
    train = root / 'BelgiumTSC_Training.zip'
    test = root / 'BelgiumTSC_Testing.zip'
    
    z = zipfile.ZipFile(train)
    z.namelist()[:4]
    
    ['Training/',
     'Training/00000/',
     'Training/00000/01153_00000.ppm',
     'Training/00000/01153_00001.ppm']
    

    可视化:

    img = z.read('Training/00000/01153_00000.ppm')  # buffer
    img = imageio.imread(img)
    
    plt.imshow(img)
    plt.show()
    

    相关文章

      网友评论

        本文标题:Python 处理 BelgiumTS 压缩文件

        本文链接:https://www.haomeiwen.com/subject/hfobdctx.html