dbuscombe's picture
msg
e113be6
raw
history blame
2.64 kB
import tensorflow as tf
import numpy as np
from PIL import Image
from glob import glob
import pandas as pd
from tensorflow.keras.preprocessing.image import img_to_array
from huggingface_hub import from_pretrained_keras
import gradio as gr
model = from_pretrained_keras("keras-io/super-resolution")
model.summary()
def infer(image):
nx=image.shape[0]
ny=image.shape[1]
img = Image.fromarray(image)
# img = img.resize((100,100))
# img = img.crop((0,100,0,100))
ycbcr = img.convert("YCbCr")
y, cb, cr = ycbcr.split()
y = img_to_array(y)
y = y.astype("float32") / 255.0
input = np.expand_dims(y, axis=0)
out = model.predict(input)
nxo = out.squeeze().shape[0]
nyo = out.squeeze().shape[1]
out_img_y = out[0]
out_img_y *= 255.0
# Restore the image in RGB color space.
out_img_y = out_img_y.clip(0, 255)
out_img_y = out_img_y.reshape((np.shape(out_img_y)[0], np.shape(out_img_y)[1]))
out_img_y = Image.fromarray(np.uint8(out_img_y), mode="L")
out_img_cb = cb.resize(out_img_y.size, Image.BICUBIC)
out_img_cr = cr.resize(out_img_y.size, Image.BICUBIC)
out_img = Image.merge("YCbCr", (out_img_y, out_img_cb, out_img_cr)).convert(
"RGB"
)
out_img.save('output.png')
out = {}
out.update( {'input image size x': nx } )
out.update( {'output image size x': nxo } )
out.update( {'input image size y': ny } )
out.update( {'output image size y': nyo } )
return (pd.DataFrame(data=out.values(), index=out.keys()).transpose(), img,out_img, 'output.png')
article = "<p style='text-align: center'><a href='https://arxiv.org/abs/1609.05158' target='_blank'>Real-Time Single Image and Video Super-Resolution Using an Efficient Sub-Pixel Convolutional Neural Network</a></p><center> <a href='https://keras.io/examples/vision/super_resolution_sub_pixel/' target='_blank'>Image Super-Resolution using an Efficient Sub-Pixel CNN</a></p>"
examples= [[l] for l in glob('examples/tiles/*.jpg')]
out1 = gr.outputs.Dataframe(label='Summary', headers=["Input X (px)", "Output X (px)", "Input Y (px)", "Output Y (px)"], type='pandas')
out2 = gr.outputs.Image(label="Cropped input image", type='pil')
out3 = gr.outputs.Image(label="Super-resolution x3 image", type='pil')
out4 = gr.outputs.File(label='Click to download super-resolved image')
iface = gr.Interface(
fn=infer,
title = " Satellite Super-resolution",
description = "This space is a demo of Satellite image Super-Resolution using a Sub-Pixel Convolutional Neural Network",
article = article,
inputs=gr.inputs.Image(label="Input Image"),
outputs=[out1,out2,out3,out4],
examples=examples,
).launch()