首页 > 解决方案 > Python Tensorflow 从真实图像创建数据集

问题描述

我正在尝试构建一个可以绘制肖像的 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 的,就像它们是彩色图像一样。我没有注意这个问题,并试图继续前进。我想创建一个 np 数组,就像 mnist 数据集一样。这是我的代码:

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库的帮助下解决了它

标签: pythontensorflowdataset

解决方案


既然您提到您使用 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)

推荐阅读