学习笔记01(未成功)--尝试创建mnist数据集

思路:1。搜集图片,修改图片格式为28x28,灰度图像

    2。把图片和标签关联起来,制作csv,每行为图片地址和图片的标签

    3。把图片和标签打包成ubyte文件

最后没成功

1。

#####resize图片为28x28的灰度图

from skimage import transform
import matplotlib.pyplot as plt
import numpy as np
import os
from PIL import Image

pic_dir = 'C:\\Users\\antonio\\Desktop\\tf_xx\\mydata-mnist-fall\\jpg\\'#图片文件夹所在文件地址
pic_file_list = os.listdir(pic_dir)#图片文件夹列表
for each_file in pic_file_list:#指向每一个文件
    pic_file = os.path.join(pic_dir,each_file)#指向每一个文件
    pic_list = os.listdir(pic_file)#文件夹内所有图片名称列表
    for each_pic in pic_list:#每一个图片的名字
        pic_file_dir = os.path.join(pic_file,each_pic)#图片的地址
        img = Image.open(pic_file_dir)
        img_re = img.resize((28,28),Image.BILINEAR)#双线性插值为期望大小
        img_gray = img_re.convert('L')#转换为灰度图像
        img_gray.save(pic_file_dir)
        

2。

#####制作数字标签CSV,每次会覆盖之前数据
import os,os.path

indir = 'C:\\Users\\antonio\\Desktop\\tf_xx\\mydata-mnist-fall\\jpg\\'
outdir = 'C:\\Users\\antonio\\Desktop\\tf_xx\\mydata-mnist-fall\\csv\\'
label0 = '0'
label1 = '1'
label2 = '2'
label3 = '3'
label4 = '4'
label5 = '5'
label6 = '6'
label7 = '7'
label8 = '8'
label9 = '9'
label = [label0,label1,label2,label3,label4,label5,label6,label7,label8,label9]

filelist = os.listdir(indir)

filelist.sort()

with open(outdir + 'data.csv','w') as data:
    for each_item in filelist:#每一个文件夹
        pic_file = os.path.join(indir,each_item)#每个文件夹内图片的位置,指向图片所在文件夹
        pic_list = os.listdir(pic_file)#图片的名称列表
        for each_pic in pic_list:
            pic_dir = os.path.join(pic_file , each_pic)#图片地址,指向图片
            print(pic_dir)
            data.write(pic_dir + ' ' + label[int(each_item)] + '\n')
        

3。

#####从csv中的图片和标签构建ubyte文件
from PIL import Image
import struct
import os
import matplotlib.pyplot as plt
import csv

data_dir = 'C:\\Users\\antonio\\Desktop\\tf_xx\\mydata-mnist-fall\\csv\\data.csv'#csv文件地址
encoding = 'utf-8'#解码模式
csv_open = csv.reader(open(data_dir,encoding=encoding))#打开csv文件
pic_dir_list = []#图片地址列表
label_list = []#标签列表
for each in csv_open:#打开之后是列表的列表
    each_name,each_label = each[0].split()
    pic_dir_list.append(each_name)#把地址加到列表中
    label_list.append(each_label)
#####把每一个图片写到ubyte文件中
image_ubyte = "train-images-idx3-ubyte"
label_ubyte = "train-labels-idx1-ubyte" 

def write_image():
    image_file = open(image_ubyte,'wb')
    image_file.write(struct.pack('i',50855936))#魔术码
    image_file.write(struct.pack('B',50))#50个图片
    image_file.write(struct.pack('B',28))#图片高
    image_file.write(struct.pack('B',28))#图片宽
    for each in pic_dir_list:
        im = Image.open(each)
   for i in range(28):#28x28的图像
            for j in range(28):
                 image_file.write(struct.pack('B',im.getpixel((j,i))))#把每个像素写入文件
    image_file.close()
    print('write image success!!')
                
def write_label():
    label_file = open(label_ubyte,'wb')
    label_file.write(struct.pack('i',17301504))#魔术码
    label_file.write(struct.pack('B',50))#50个label
    for each in label_list:
        label_file.write(struct.pack('B',int(each)))#把每个标签按二进制打包,把标签换为0123456789,不是输出的十位二进制,one_hot会复原
    label_file.close()
    print('write label success!!')

if __name__ == '__main__':
    write_label()
    write_image()
    print('all has been done successfully!!')


4。结果

不知道为什么,还好暂时用不到,以后用到的时候再改吧。。。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值