import os from options.test_options import TestOptions from data import CreateRecursiveDataLoader from models import create_model from util.visualizer import Visualizer from util.util import mkdirs from util import html from shutil import move, copyfile import subprocess from time import sleep if __name__ == '__main__': opt = TestOptions().parse() opt.nThreads = 1 # test code only supports nThreads = 1 opt.batchSize = 1 # test code only supports batchSize = 1 opt.serial_batches = True # no shuffle opt.no_flip = True # no flip opt.experiment = opt.start_img.split(".")[0] render_dir = opt.results_dir + "/" + opt.name + "/exp:" + opt.experiment mkdirs(render_dir) copyfile(opt.start_img, render_dir + "/frame_00000.png") data_loader = CreateRecursiveDataLoader(opt) dataset = data_loader.load_data() ds = dataset.dataset model = create_model(opt) visualizer = Visualizer(opt) # create website web_dir = os.path.join(opt.results_dir, opt.name, '%s_%s' % (opt.phase, opt.which_epoch)) webpage = html.HTML(web_dir, 'Experiment = %s, Phase = %s, Epoch = %s' % (opt.name, opt.phase, opt.which_epoch)) # test print(dataset.name()) for i, data in enumerate(data_loader): if i >= opt.how_many: break model.set_input(data) model.test() visuals = model.get_current_visuals() img_path = model.get_image_paths() print('%04d: process image... %s' % (i, img_path)) ims = visualizer.save_images(webpage, visuals, img_path, aspect_ratio=opt.aspect_ratio) if dataset.name() == 'RecursiveDatasetDataLoader': last_image = opt.results_dir + opt.name + "/test_latest/images/" + ims[1] next_image = opt.results_dir + opt.name + "/exp:" + opt.experiment + "/frame_{:05d}.png".format(i+1) move(last_image, next_image) webpage.save() cmd = ("/usr/bin/ffmpeg", "-i", "frame_%04d.png", "-c:v", "libx264", "-vf", "fps=30", "-pix_fmt", "yuv420p", opt.name + "_" + opt.experiment + ".mp4") process = subprocess.Popen(cmd, stdout=subprocess.PIPE) output, error = process.communicate()