TextureScraping / swapae /data /dataset_tools.py
sunshineatnoon
Add application file
1b2a9b1
raw
history blame
3.18 kB
import PIL
import os
import numpy as np
import argparse
import lmdb
import sys
import cv2
sys.path.append(".")
from swapae.data.image_folder import make_dataset
def create_lmdb_from_images(opt):
paths = sorted(make_dataset(opt.input))
output_dir = opt.output
print('Extracting images to "%s"' % output_dir)
if not os.path.isdir(output_dir):
os.makedirs(output_dir)
# initialize lmdb
output_dir = opt.output
lmdb_env = lmdb.open(output_dir, map_size=1099511627776)
with lmdb_env.begin(write=True) as txn:
for idx, image_path in enumerate(paths):
if idx % 10 == 0:
print('%d\r' % idx, end='', flush=True)
img = PIL.Image.open(image_path).convert('RGB')
img = np.asarray(img)
img = cv2.imencode('.png', img)[1].tostring()
txn.put(image_path.encode('ascii'), img)
def create_lmdb_from_tfrecords(opt):
# initialize tensorflow
assert opt.stylegan_codebase_path is not None
sys.path.append(opt.stylegan_codebase_path)
import dnnlib.tflib as tflib
from training import dataset
import tensorflow as tf
tfrecord_dir = opt.input
print('Loading dataset "%s"' % tfrecord_dir)
tflib.init_tf({'gpu_options.allow_growth': True})
dset = dataset.TFRecordDataset(tfrecord_dir, max_label_size=0, repeat=False, shuffle_mb=0)
tflib.init_uninitialized_vars()
# initialize lmdb
output_dir = opt.output
lmdb_env = lmdb.open(output_dir, map_size=1099511627776)
print('Extracting images to "%s"' % output_dir)
if not os.path.isdir(output_dir):
os.makedirs(output_dir)
idx = 0
with lmdb_env.begin(write=True) as txn:
while True:
idx += 1
if idx % 10 == 0:
print('%d\r' % idx, end='', flush=True)
try:
images, _labels = dset.get_minibatch_np(1)
except tf.errors.OutOfRangeError:
break
if images.shape[1] == 1:
img = PIL.Image.fromarray(images[0][0], 'L').convert('RGB')
else:
img = PIL.Image.fromarray(images[0].transpose(1, 2, 0), 'RGB')
img = np.asarray(img)
img = cv2.imencode('.png', img)[1].tostring()
imagekey = "%08d" % idx
txn.put(imagekey.encode('ascii'), img)
if __name__ == "__main__":
os.environ["CUDA_VISIBLE_DEVICES"] = "-1"
parser = argparse.ArgumentParser()
parser.add_argument("mode",
choices=("create_lmdb_from_images",
"create_lmdb_from_tfrecords",
))
parser.add_argument("--input", help="input path")
parser.add_argument("--output", help="input path")
parser.add_argument("--stylegan_codebase_path",
help="path to stylegan codebase. Path to git clone https://github.com/NVlabs/stylegan.git")
opt = parser.parse_args()
if opt.mode == "create_lmdb_from_images":
create_lmdb_from_images(opt)
elif opt.mode == "create_lmdb_from_tfrecords":
create_lmdb_from_tfrecords(opt)
print("Finished")