美文网首页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