| | 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 |
| |
|
| | |
| | def load_image(image_url, image_size=(256, 256), preserve_aspect_ratio=True): |
| | """Loads and preprocesses images.""" |
| | |
| | image_path = tf.keras.utils.get_file(os.path.basename(image_url)[-128:], image_url) |
| | |
| | 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 |
| |
|
| | 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') |
| | |
| | |
| | |
| | |
| | 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); |