CIFAR10数据集提取图像并分类存储


import pickle
import numpy as np
import cv2 
import os

# cifar10下载地址:http://www.cs.toronto.edu/~kriz/cifar.html

PATH_DATA = '/cifar-10-batches-py'
PATH_TRAIN = PATH_DATA + '/train'
PATH_TEST = PATH_DATA + '/test'
PATH_CLASS = PATH_DATA + '/batches.meta'

def unpickle(file):
    with open(file, 'rb') as fo:
        dict_ = pickle.load(fo, encoding='bytes')
    return dict_
    # dict_keys([b'batch_label', b'labels', b'data', b'filenames'])

def unpack_classname(datapath):
    raw_data = unpickle(datapath)
    raw_data = raw_data[b'label_names']
    length = np.linspace(0,len(raw_data),len(raw_data),endpoint=False)
    return  {int(i):str(j,encoding='utf-8') for i,j in zip(length,raw_data)}

def process_path(path):
    if not os.path.exists(path):
        os.makedirs(path)

def unpack_image(label_dict,data_paths, save_path):
    for path in data_paths:
        raw_data = unpickle(path)
        for img,img_name,label in zip(raw_data[b'data'],raw_data[b'filenames'],raw_data[b'labels']):
            img = img.reshape(3,32,32).transpose(1,2,0)
            label_path = save_path+'/'+label_dict[label]
            process_path(label_path)
            img_path = os.path.join(label_path, str(img_name,encoding= 'utf-8'))
            cv2.imwrite(img_path, img)
       
def process_cifar_data():
    files = os.listdir(PATH_DATA)
    process_path(PATH_TRAIN)
    process_path(PATH_TEST)
    train_paths = []
    test_paths = []
    for file in files:
        if file.endswith(('0','1','2','3','4','5')):
            train_paths.append(file)
        if file.endswith('batch'):
            test_paths.append(file)
    path_train = [os.path.join(PATH_DATA,x) for x in train_paths]
    path_test = [os.path.join(PATH_DATA,x) for x in test_paths]
    label_dict = unpack_classname(PATH_CLASS)
    unpack_image(label_dict,path_train,PATH_TRAIN)
    print("Finished to unpikle the train data!")
    unpack_image(label_dict,path_test,PATH_TEST)
    print("Finished to unpikle the test data!")


if __name__ == '__main__':

    process_cifar_data()
  • 4
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值