def main(): parser = build_parser() options = parser.parse_args() width = options.width style_scale = options.style_scale content_image = imread(options.content) style_image = imread(options.style) if width is not None: new_shape = (int( math.floor( float(content_image.shape[0]) / content_image.shape[1] * width)), width) content_image = sm.imresize(content_image, new_shape) if style_scale is not None: style_image = sm.imresize(style_image, style_scale) initial = options.initial if initial is not None: initial = sm.imresize(imread(initial), content_image.shape[:2]) image = stylize(options.network, initial, content_image, style_image, options.iterations, options.content_weight, options.style_weight, options.tv_weight, options.learning_rate, print_iter=options.print_iter) imsave(options.output, image)
def main(): parser = build_parser() options = parser.parse_args() content_image = imread(options.content) style_image = imread(options.style) width = options.width if width is not None: new_shape = (int(math.floor(float(content_image.shape[0]) / content_image.shape[1] * width)), width) content_image = scipy.misc.imresize(content_image, new_shape) target_shape = content_image.shape style_image = scipy.misc.imresize(style_image, options.style_scale * target_shape[1] / style_image.shape[1]) initial = options.initial if initial is not None: initial = scipy.misc.imresize(imread(initial), content_image.shape[:2]) image = stylize(options.network, initial, content_image, style_image, options.iterations, options.content_weight, options.style_weight, options.tv_weight, options.learning_rate, print_iterations=options.print_iterations, checkpoint_iterations=options.checkpoint_iterations) imsave(options.output, image)
def main(): parser = build_parser() options = parser.parse_args() content_image = imread(options.content) style_images = [] for style in options.styles: style_images.append(imread(style)) width = options.width if width is not None: new_shape = (int( math.floor( float(content_image.shape[0]) / content_image.shape[1] * width)), width) content_image = scipy.misc.imresize(content_image, new_shape) target_shape = content_image.shape for i in range(len(style_images)): style_scale = STYLE_SCALE if options.style_scales != None: style_scale = options.style_scales[i] style_images[i] = scipy.misc.imresize( style_images[i], style_scale * target_shape[1] / style_images[i].shape[1]) style_blend_weights = options.style_blend_weights if style_blend_weights == None: # default is equal weights style_blend_weights = [1.0 / len(style_images) for _ in style_images] else: total_blend_weight = sum(style_blend_weights) style_blend_weights = [ weight / total_blend_weight for weight in style_blend_weights ] initial = options.initial if initial is not None: initial = scipy.misc.imresize(imread(initial), content_image.shape[:2]) image = stylize(options.network, initial, content_image, style_images, options.iterations, options.content_weight, options.style_weight, style_blend_weights, options.tv_weight, options.learning_rate, print_iterations=options.print_iterations, checkpoint_iterations=options.checkpoint_iterations) imsave(options.output, image)
def main(): parser = build_parser() options = parser.parse_args() content_image = imread(options.content) style_images = [imread(style) for style in options.styles] width = options.width if width is not None: new_shape = (int(math.floor(float(content_image.shape[0]) / content_image.shape[1] * width)), width) content_image = scipy.misc.imresize(content_image, new_shape) target_shape = content_image.shape for i in range(len(style_images)): style_scale = STYLE_SCALE if options.style_scales is not None: style_scale = options.style_scales[i] style_images[i] = scipy.misc.imresize(style_images[i], style_scale * target_shape[1] / style_images[i].shape[1]) style_blend_weights = options.style_blend_weights if style_blend_weights is None: # default is equal weights style_blend_weights = [1.0 / len(style_images) for _ in style_images] else: total_blend_weight = sum(style_blend_weights) style_blend_weights = [weight / total_blend_weight for weight in style_blend_weights] initial = options.initial if initial is not None: initial = scipy.misc.imresize(imread(initial), content_image.shape[:2]) image = stylize( options.network, initial, content_image, style_images, options.iterations, options.content_weight, options.style_weight, style_blend_weights, options.tv_weight, options.learning_rate, print_iterations=options.print_iterations, checkpoint_iterations=options.checkpoint_iterations, ) imsave(options.output, image)
def generate(content_file, style_file, output_file): # https://stackoverflow.com/a/42121886 key = 'TF_CPP_MIN_LOG_LEVEL' if key not in os.environ: os.environ[key] = '2' parser = build_parser() options = parser.parse_args(["--content",content_file,"--styles", style_file,"--output",output_file]) if not os.path.isfile(options.network): parser.error("Network %s does not exist. (Did you forget to " "download it?)" % options.network) if [options.checkpoint_iterations, options.checkpoint_output].count(None) == 1: parser.error("use either both of checkpoint_output and " "checkpoint_iterations or neither") if options.checkpoint_output is not None: if re.match(r'^.*(\{.*\}|%.*).*$', options.checkpoint_output) is None: parser.error("To save intermediate images, the checkpoint_output " "parameter must contain placeholders (e.g. " "`foo_{}.jpg` or `foo_%d.jpg`") content_image = imread(options.content) style_images = [imread(style) for style in options.styles] width = options.width if width is not None: new_shape = (int(math.floor(float(content_image.shape[0]) / content_image.shape[1] * width)), width) content_image = scipy.misc.imresize(content_image, new_shape) target_shape = content_image.shape for i in range(len(style_images)): style_scale = STYLE_SCALE if options.style_scales is not None: style_scale = options.style_scales[i] style_images[i] = scipy.misc.imresize(style_images[i], style_scale * target_shape[1] / style_images[i].shape[1]) style_blend_weights = options.style_blend_weights if style_blend_weights is None: # default is equal weights style_blend_weights = [1.0/len(style_images) for _ in style_images] else: total_blend_weight = sum(style_blend_weights) style_blend_weights = [weight/total_blend_weight for weight in style_blend_weights] initial = options.initial if initial is not None: initial = scipy.misc.imresize(imread(initial), content_image.shape[:2]) # Initial guess is specified, but not noiseblend - no noise should be blended if options.initial_noiseblend is None: options.initial_noiseblend = 0.0 else: # Neither inital, nor noiseblend is provided, falling back to random # generated initial guess if options.initial_noiseblend is None: options.initial_noiseblend = 1.0 if options.initial_noiseblend < 1.0: initial = content_image # try saving a dummy image to the output path to make sure that it's writable if os.path.isfile(options.output) and not options.overwrite: raise IOError("%s already exists, will not replace it without " "the '--overwrite' flag" % options.output) try: imsave(options.output, np.zeros((500, 500, 3))) except: raise IOError('%s is not writable or does not have a valid file ' 'extension for an image file' % options.output) loss_arrs = None for iteration, image, loss_vals in stylize( network=options.network, initial=initial, initial_noiseblend=options.initial_noiseblend, content=content_image, styles=style_images, preserve_colors=options.preserve_colors, iterations=options.iterations, content_weight=options.content_weight, content_weight_blend=options.content_weight_blend, style_weight=options.style_weight, style_layer_weight_exp=options.style_layer_weight_exp, style_blend_weights=style_blend_weights, tv_weight=options.tv_weight, learning_rate=options.learning_rate, beta1=options.beta1, beta2=options.beta2, epsilon=options.epsilon, pooling=options.pooling, print_iterations=options.print_iterations, checkpoint_iterations=options.checkpoint_iterations, ): if (image is not None) and (options.checkpoint_output is not None): imsave(fmt_imsave(options.checkpoint_output, iteration), image) if (loss_vals is not None) \ and (options.progress_plot or options.progress_write): if loss_arrs is None: itr = [] loss_arrs = OrderedDict((key, []) for key in loss_vals.keys()) for key,val in loss_vals.items(): loss_arrs[key].append(val) itr.append(iteration) imsave(options.output, image) if options.progress_write: fn = "{}/progress.txt".format(os.path.dirname(options.output)) tmp = np.empty((len(itr), len(loss_arrs)+1), dtype=float) tmp[:,0] = np.array(itr) for ii,val in enumerate(loss_arrs.values()): tmp[:,ii+1] = np.array(val) np.savetxt(fn, tmp, header=' '.join(['itr'] + list(loss_arrs.keys()))) if options.progress_plot: import matplotlib matplotlib.use('Agg') from matplotlib import pyplot as plt fig,ax = plt.subplots() for key, val in loss_arrs.items(): ax.semilogy(itr, val, label=key) ax.legend() ax.set_xlabel("iterations") ax.set_ylabel("loss") fig.savefig("{}/progress.png".format(os.path.dirname(options.output)))