import gradio as gr import functools import os from matplotlib import gridspec import matplotlib.pylab as plt import numpy as np import tensorflow as tf import tensorflow_hub as hub def crop_center(image): """Returns a cropped square image.""" shape = image.shape new_shape = min(shape[1], shape[2]) offset_y = max(shape[1] - shape[2], 0) // 2 offset_x = max(shape[2] - shape[1], 0) // 2 image = tf.image.crop_to_bounding_box( image, offset_y, offset_x, new_shape, new_shape) return image # @functools.lru_cache(maxsize=None) def load_image(image_url, image_size=(256, 256), preserve_aspect_ratio=True): """Loads and preprocesses images.""" # Cache image file locally. image_path = tf.keras.utils.get_file(os.path.basename(image_url)[-128:], image_url) # Load and convert to float32 numpy array, add batch dimension, and normalize to range [0, 1]. img = tf.io.decode_image( tf.io.read_file(image_path), channels=3, dtype=tf.float32)[tf.newaxis, ...] img = crop_center(img) img = tf.image.resize(img, image_size, preserve_aspect_ratio=True) return img def show_n(images, titles=('',)): n = len(images) image_sizes = [image.shape[1] for image in images] w = (image_sizes[0] * 6) // 320 plt.figure(figsize=(w * n, w)) gs = gridspec.GridSpec(1, n, width_ratios=image_sizes) for i in range(n): plt.subplot(gs[i]) plt.imshow(images[i][0], aspect='equal') plt.axis('off') plt.title(titles[i] if len(titles) > i else '') plt.show() img1 = gr.inputs.Textbox(lines=1, placeholder=None, default="", label="Link 1ra imagen", optional=False) img2 = gr.inputs.Textbox(lines=1, placeholder=None, default="", label="Link 2da imagen", optional=False) out = gr.outputs.Image(type="plot", label=None) def final_output(img1, img2): content_image_url = img1 style_image_url = img2 output_image_size = 384 # @param {type:"integer"} content_img_size = (output_image_size, output_image_size) style_img_size = (256, 256) content_image = load_image(content_image_url, content_img_size) style_image = load_image(style_image_url, style_img_size) style_image = tf.nn.avg_pool(style_image, ksize=[3,3], strides=[1,1], padding='SAME') #content_image = img1 #style_image = img2 hub_handle = 'https://tfhub.dev/google/magenta/arbitrary-image-stylization-v1-256/2' hub_module = hub.load(hub_handle) outputs = hub_module(tf.constant(content_image), tf.constant(style_image)) stylized_image = outputs[0] return (show_n([content_image, style_image, stylized_image])) gr.Interface(final_output, inputs=[img1, img2], outputs= out, live=False, title="asd", description="asd").launch(debug=True);