图片数据集制作

  • python图品h5py数据集的制作
  • 首先,我们要有图片的数据
  • 接下来,可以开始制作了



python图品h5py数据集的制作

由于我是看床长的人工智能教程学习的,所以我会模仿教程里的数据集来制作
这里,我将和大家一起完成海绵宝宝图片的数据集制作


首先,我们要有图片的数据

我在这之前写了一个python百度图片的爬虫

于是,使用爬虫,我们可以获取一个装有海绵宝宝图片的文件夹

python生成图片数据集路径 用python将照片做成数据集_python生成图片数据集路径


里面有1000张不定格式大小的图片

手动去除一些不含海绵宝宝的图片之后,还有800多张

为了更方便地输入接下来的程序,我们需要有一定标准的数据集,也就是图片的大小最好是确定的

所以我们需要修改每一张图片,让其大小一定

这里我选择把所有图片修改为64x64像素的,并重新编号存入另一个文件夹中

from PIL import Image
import os


def get_smaller(path_in, name, path=None, width=64, length=64):
    ''' 检查文件夹是否建立,并建立文件夹 '''
    if path == None:
        tar = os.path.exists(os.getcwd() + "\\" + name)
        if not tar:
            os.mkdir(os.getcwd() + "\\" + name)
        im_path = os.getcwd() + "\\" + name + "\\"
    else:
        tar = os.path.exists(path + "\\" + name)
        if not tar:
            os.mkdir(path + "\\" + name)
        im_path = path + "\\" + name + "\\"

    i = 1
    list_image = os.listdir(path_in)
    for item in list_image:
        '''检查是否有图片'''
        tar = os.path.exists(im_path+str(i)+'.jpg')
        if not tar:
            image = Image.open(path_in+'\\'+item)
            smaller = image.resize((width, length), Image.ANTIALIAS)
            '''注意这里如果不加转换,很可能会有报错'''
            if not smaller.mode == "RGB":
                smaller = smaller.convert('RGB')
            smaller.save(im_path+str(i)+'.jpg')
        i += 1

注意函数中注释的地方,有坑

这个函数的使用方法是:函数(原始图片文件夹路径,新文件夹名称)

你可以通过path关键字选择新文件夹的储存路径,也可以默认生成在当前目录

你还可以修改widthlength来选择新图片的大小

总之,我们得到了最终要使用的图片,它们都在新文件夹中

python生成图片数据集路径 用python将照片做成数据集_python_02

接下来,可以开始制作了

import numpy as np
import matplotlib.pyplot as plt
import h5py
import os

def createData(path):
    pics = os.listdir(path)
    all_data = []
    for item in pics:
        '''难免有图片打不开'''
        try:
            all_data.append(plt.imread(path+'\\'+item).tolist())
        except Exception as pic_wrong:
            print(item+" pic wrong")
    return all_data

def createSet(hf, name, tip, data):
    hf.create_dataset(name, data=data)
    t = [[tip]*len(data)]
    hf.create_dataset(name + '_tip', data=t)

一张图片用imread之后是一个三维数组,64x64x3 个数据,
64x64是像素,每个像素由red green blue三原色的值叠加来控制,
函数 createdata 把 path 下所有图片的数组合并到一个列表中,得到一个4维数组,并返回

createset 是做一个分类用的数据集,hf 是传入一个h5文件, name是在h5文件下新建的图片数据集的key;tip 是给图片数据加标签,并新生成一个以 name_tip 为key的数据集
相当于会有两个数据集,一个存图片数据,一个存图片数据的标签

一个h5文件可以print(hf.keys())来查看里面的key,每一个key对应一个数据集,一个h5文件可以有很多数据集

于是

if __name__ == '__main__':
    hf = h5py.File('data-train.h5', 'w')
    all_data = createData('D:\\python\\python3\\ai_01\\spangebob-test')
    createSet(hf, 'train_set_1', 1, all_data)
    hf.close()

就得到了海绵宝宝的数据集,且其中每一个图片数据标签都是1,表示图片上有海绵宝宝

接下来重复上面所有步骤,收集一点无关图片,制作成数据集,加上标签0,表示图片上没有海绵宝宝

然后,把所有不含海绵宝宝的图片数据和含海绵宝宝的图片数据合并,并把两个数据集的图片标签合并,制作成最终的训练数据集

其中有含有含棉宝宝的图片,也有不含海绵宝宝的图片,且每个图片都预先打上了标签(
答案)

有了训练数据集,我们重复上述所有步骤,制作一个测试数据集,测试数据集可以比训练数据集小
(7:3)这样

最后,把训练数据集和测试数据集合并到一个h5文件中,得到最终的数据集,其中既有训练数据集,又有测试数据集

(上面步骤的具体操作相信都可以百度到,毕竟我就是百度着做的)

完成了