Python Tensorflow从真实图像创建数据集

时间:2020-04-09 23:02:26

标签: python tensorflow dataset

我正在尝试构建可以绘制人像的GAN模型,我可以使用mnist数据集来做,而且我想将数据集更改为目标人物的人像。我只有几个示例图像,所以我尝试使用 ImageDataGenerator 库扩展数据,并在下面添加了代码。我的第一个问题是我不确定这是否正确,这是我的第二个问题: 这是我用于创建数据的代码:

import numpy as np
import pandas as pd
import seaborn as sns 
import matplotlib.pyplot as plt
from matplotlib.image import imread
import matplotlib.image as mpimg
import os
from tensorflow.keras.preprocessing.image import ImageDataGenerator
import random
img_dir = "C:\\Users\\Casper\\Desktop\\draw_ata\\atam\\"
image_shape = (150,150,3)
if not os.path.exists('pic_data'):
    os.makedirs('pic_data')
for i in range(60000):
    random_img_path = img_dir + random.choice(os.listdir(img_dir))
    image_gen = ImageDataGenerator(rotation_range=10,width_shift_range=0.1,height_shift_range=0.1,rescale=1/255, shear_range=0.05, zoom_range=0.1,horizontal_flip=True,fill_mode="nearest")
    img = imread(random_img_path, 0)
    new_img = image_gen.random_transform(img)

    mpimg.imsave("pic_data/%d.png" % i, new_img)

它已经成功保存了图像,但是现在我的下一个目标是要获得可以用于GAN模型的正确形状。我的照片是灰度的,但是它们的形状就像彩色图像一样都是3D的。我没有注意这个问题,而是继续前进。我想像mnist数据集一样创建一个np数组。这是我要做的代码:

from tensorflow.keras.layers import Input,SimpleRNN,GRU,LSTM,Dense,Flatten,GlobalMaxPooling1D,Embedding, Dropout, LeakyReLU, BatchNormalization
from tensorflow.keras.models import Model, Sequential
from tensorflow.keras.optimizers import SGD, Adam
from tensorflow.keras.datasets import mnist
from sklearn.preprocessing import StandardScaler
import numpy as np
import pandas as pd
from matplotlib.image import imread
import matplotlib.pyplot as plt
from tensorflow.keras.preprocessing.text import Tokenizer
from tensorflow.keras.preprocessing.sequence import pad_sequences
from sklearn.model_selection import train_test_split
import os
img_dir = "C:\\Users\\Casper\\Desktop\\draw_ata\\pic_data\\"
data_train = os.listdir(img_dir)[:10000]
data_test = os.listdir(img_dir)[50000:]

for i in range(len(data_train)):
    data_train[i] = imread(img_dir + data_train[i])
data_train = np.array(data_train)
print(data_train.shape)

,输出为(10000,),但我希望它们的形状像(10000,150,150)-我的照片比例尺为150x150-,就像mnist数据集一样。我如何将它们设置为可训练的数据集,谢谢

编辑好,我借助opencv库解决了该问题

1 个答案:

答案 0 :(得分:1)

由于您已经提到过使用OpenCV解决了该问题,因此我在下面使用针对社区的OpenCV编写解决方案。

from matplotlib.image import imread
import os
import cv2

path = "path"

data_train = os.listdir(path)

for i in range(len(data_train)):
  data_train[i] = cv2.resize(cv2.imread(path + data_train[i]), (150, 150))
data_train = np.array(data_train)