由于我是看床长的人工智能教程学习的,所以我会模仿教程里的数据集来制作
这里,我将和大家一起完成海绵宝宝图片的数据集制作
我在这之前写了一个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关键字选择新文件夹的储存路径,也可以默认生成在当前目录
你还可以修改width和length来选择新图片的大小
总之,我们得到了最终要使用的图片,它们都在新文件夹中
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文件中,得到最终的数据集,其中既有训练数据集,又有测试数据集
(上面步骤的具体操作相信都可以百度到,毕竟我就是百度着做的)
完成了