Spaces:
Runtime error
Runtime error
'''NEURAL STYLE TRANSFER''' | |
"""##Importing Libraries""" | |
import gradio as gr | |
import tensorflow as tf | |
# import os | |
import PIL | |
from PIL import Image,ImageOps | |
import numpy as np | |
# import time | |
# import requests | |
import cv2 | |
from cv2 import * | |
# !mkdir nstmodel | |
# !wget -c https://storage.googleapis.com/tfhub-modules/google/magenta/arbitrary-image-stylization-v1-256/2.tar.gz -O - | tar -xz -C /nstmodel | |
# import tensorflow.keras | |
# from PIL import Image, ImageOps | |
#import requests | |
#import tarfile | |
''' | |
url = "https://storage.googleapis.com/tfhub-modules/google/magenta/arbitrary-image-stylization-v1-256/2.tar.gz" | |
response = requests.get(url,stream=True) | |
path_input="./" | |
urllib.request.urlretrieve(url, filename=path_input) | |
file = tarfile.open(fileobj=response.raw, mode="r|gz") | |
file.extractall(path="./nst_model") | |
''' | |
MODEL_PATH='Nst_model' | |
# Disable scientific notation for clarity | |
np.set_printoptions(suppress=True) | |
# Load the model | |
model = tf.keras.models.load_model(MODEL_PATH) | |
def tensor_to_image(tensor): | |
tensor = tensor*255 | |
tensor = np.array(tensor, dtype=np.uint8) | |
if np.ndim(tensor)>3: | |
assert tensor.shape[0] == 1 | |
tensor = tensor[0] | |
return PIL.Image.fromarray(tensor) | |
"""##Saving unscaled Tensor images.""" | |
def save_image(image, filename): | |
""" | |
Saves unscaled Tensor Images. | |
Args: | |
image: 3D image tensor. [height, width, channels] | |
filename: Name of the file to save to. | |
""" | |
if not isinstance(image, Image.Image): | |
image = tf.clip_by_value(image, 0, 255) | |
image = Image.fromarray(tf.cast(image, tf.uint8).numpy()) | |
image.save("%s.jpg" % filename) | |
print("Saved as %s.jpg" % filename) | |
"""## Grayscaling image for testing purpose to check if we could get better results.""" | |
def gray_scaled(inp_img): | |
gray = cv2.cvtColor(inp_img, cv2.COLOR_BGR2GRAY) | |
gray_img = np.zeros_like(inp_img) | |
gray_img[:,:,0] = gray | |
gray_img[:,:,1] = gray | |
gray_img[:,:,2] = gray | |
return gray_img | |
def transform_mymodel(content_image,style_image): | |
# Convert to float32 numpy array, add batch dimension, and normalize to range [0, 1] | |
content_image=gray_scaled(content_image) | |
content_image = content_image.astype(np.float32)[np.newaxis, ...] / 255.0 | |
style_image = style_image.astype(np.float32)[np.newaxis, ...] / 255.0 | |
#Resizing image | |
style_image = tf.image.resize(style_image, (256, 256)) | |
# Stylize image | |
outputs = model(tf.constant(content_image), tf.constant(style_image)) | |
stylized_image = outputs[0] | |
# stylized = tf.image.resize(stylized_image, (356, 356)) | |
stylized_image =tensor_to_image(stylized_image) | |
save_image(stylized_image,'stylized') | |
return stylized_image | |
def gradio_intrface(mymodel): | |
# Initializing the input component | |
image1 = gr.inputs.Image() #CONTENT IMAGE | |
image2 = gr.inputs.Image() #STYLE IMAGE | |
stylizedimg=gr.outputs.Image() | |
gr.Interface(fn=mymodel, inputs= [image1,image2] , outputs= stylizedimg,title='Style Transfer').launch() | |
"""The function will be launched both Inline and Outline where u need to add a content and style image.""" | |
gradio_intrface(transform_mymodel) | |