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:]


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


编辑好的我在opencv库的帮助下解决了它


慕婉清6462132
浏览 112回答 1
1回答

收到一只叮咚

既然您提到您使用 OpenCV 解决了这个问题,我正在使用 OpenCV 为社区编写下面的解决方案。from matplotlib.image import imreadimport osimport cv2path = "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)
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python