小項目——自制畫風數據集

承接上篇爬取了想要的數據集之後,先將圖片的尺寸統一。(我自己爬取了塗鴉,油畫,素描這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,)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章