python - 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库的帮助下解决了它
解决方案
既然您提到您使用 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)
推荐阅读
- php - 如何将 PDO 的 execute($variable) 转换为 MySQLi 语句
- json - 是否有为 json 模式指定版本的标准
- angular - 声明构造函数的最佳位置 - Typescript
- python - 如何使用计数器计算表中插入记录的数量并使用python脚本打印每个作业中插入记录的数量
- java - spring-data-jpa :找到对集合 org.hibernate.HibernateException 的共享引用
- ios - ReplayKit 广播扩展崩溃 EXC_RESOURCE RESOURCE_TYPE_MEMORY on mic on
- stream - Jitsi 多流处理
- android - 如何在android的饼图中为值/图表设置clicklistener?
- c++ - C++ setw() 函数不会为打印的最后一个值添加空格(错位的宽度/空格?)
- python - UnboundLocalError:分配前引用的局部变量“照片”