allknowingroger's picture
Duplicate from dbuscombe/SatelliteSuperResolution
936db7e
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()