小项目——自制画风数据集

承接上篇爬取了想要的数据集之后,先将图片的尺寸统一。(我自己爬取了涂鸦,油画,素描这3类图片)

关于涂鸦数据集爬下来的图片,其中混入了一些妹子和西海岸黑人黑帮文化的图片。(为什么我也不知道。。。)注意清除,数据集的好坏很关键!

resize

先统一图片格式32*32

# coding=utf-8
from PIL import Image
import os.path
import glob
def convertjpg(jpgfile,outdir,width=32,height=32):
    img = Image.open(jpgfile)
    try:
        new_img = img.resize((width,height),Image.BILINEAR)
        new_img.save(os.path.join(outdir,os.path.basename(jpgfile)))
    except Exception as e:
        print(e)
for jpgfile in glob.glob("./素描/*.jpg"):
    convertjpg(jpgfile,"./素描数据集")

在这里插入图片描述
方方正正的效果不错

分类

然后是分类,我设定的规则是

类别 名称
0 涂鸦数据集
1 油画数据集
2 素描数据集

通过批量修改文件前缀来判断,如2_1.jpg因为是2_的前缀说明是素描图像

#coding:utf-8
import os
movie_name = os.listdir('./油画数据集')
for temp in movie_name:
    new_name = '1_' + temp
 
    os.rename('./油画数据集/'+temp,'油画数据集/'+new_name)

在这里插入图片描述

归一化,生成数组

把数据集集中在data文件夹下,然后读取数据,顺便将数据归一化

import os
import numpy as np
import tensorflow as tf
from PIL import Image

train = True
data_dir = "data"
model_path = "../image_model"

def read_data(data_dir):
    datas = []
    labels = []
    fpaths = []
    for fname in os.listdir(data_dir):
        fpath = os.path.join(data_dir, fname)
        fpaths.append(fpath)
        image = Image.open(fpath)
        data = np.array(image)/255.0
        label = int(fname.split("_")[0])
        datas.append(data)
        labels.append(label)
    datas = np.array(datas)
    labels = np.array(labels)
    print("shape of datas: {}\tshape of labels: {}".format(datas.shape, 
labels.shape))
    return fpaths, datas, labels
 
fpaths, datas, labels = read_data(data_dir)

num_classes = len(set(labels))

注意!在生成数组(np.array)的时候很可能会出现通道数不同的情况,尤其是素描数据集有大量的黑白图片,这个时候要手动删除那些不合格的图片。具体来说有些图是灰度图,位深度是8而RGB的位深度是24,在属性中可以查看
在这里插入图片描述
把那些不合格的图片删除以后就完成了自制数据集啦(手动撒花)
结果如下(我一共收集了596张32×32×3的图片):

shape of datas: (596, 32, 32, 3)	shape of labels: (596,)

猜你喜欢

转载自blog.csdn.net/qq_38484259/article/details/84791079