isr / app.py
dragonSwing's picture
Fix app layout
7c10976
import os
import cv2
import gradio as gr
from utils import get_upsampler, get_face_enhancer
def inference(img, task, model_name, scale):
if scale > 4:
scale = 4 # avoid too large scale value
try:
img = cv2.imread(img, cv2.IMREAD_UNCHANGED)
h, w = img.shape[0:2]
if h > 3500 or w > 3500:
raise gr.Error(f"image too large: {w} * {h}")
if (h < 300 and w < 300) and model_name != "srcnn":
img = cv2.resize(img, (w * 2, h * 2), interpolation=cv2.INTER_LANCZOS4)
return cv2.cvtColor(img, cv2.COLOR_BGR2RGB)
if task == "face":
upsample_model_name = "realesr-general-x4v3"
else:
upsample_model_name = model_name
upsampler = get_upsampler(upsample_model_name)
if task == "face":
face_enhancer = get_face_enhancer(model_name, scale, upsampler)
else:
face_enhancer = None
try:
if face_enhancer is not None:
_, _, output = face_enhancer.enhance(
img, has_aligned=False, only_center_face=False, paste_back=True
)
else:
output, _ = upsampler.enhance(img, outscale=scale)
except RuntimeError as error:
raise gr.Error(error)
output = cv2.cvtColor(output, cv2.COLOR_BGR2RGB)
return output
except Exception as error:
raise gr.Error(f"global exception: {error}")
def on_task_change(task):
if task == "general":
return gr.Dropdown.update(
choices=[
"srcnn",
"RealESRGAN_x2plus",
"RealESRGAN_x4plus",
"RealESRNet_x4plus",
"realesr-general-x4v3",
],
value="realesr-general-x4v3",
)
elif task == "face":
return gr.Dropdown.update(
choices=["GFPGANv1.3", "GFPGANv1.4", "RestoreFormer"], value="GFPGANv1.4"
)
elif task == "anime":
return gr.Dropdown.update(
choices=["srcnn", "RealESRGAN_x4plus_anime_6B", "realesr-animevideov3"],
value="RealESRGAN_x4plus_anime_6B",
)
title = "ISR: General Image Super Resolution"
description = r"""Gradio demo for <a href='https://github.com/TencentARC/GFPGAN' target='_blank'><b>GFPGAN: Towards Real-World Blind Face Restoration with Generative Facial Prior</b></a>.<br>
It can be used to restore your **old photos** or improve **AI-generated faces**.<br>
To use it, simply upload your image.<br>
If GFPGAN is helpful, please help to ⭐ the <a href='https://github.com/TencentARC/GFPGAN' target='_blank'>Github Repo</a> and recommend it to your friends 😊
"""
article = r"""
<center><img src='https://visitor-badge.glitch.me/badge?page_id=akhaliq_GFPGAN' alt='visitor badge'></center>
"""
with gr.Blocks(css="style.css", title=title) as demo:
with gr.Row(elem_classes=["container"]):
with gr.Column(scale=2):
input_image = gr.Image(type="filepath", label="Input")
# with gr.Row():
task = gr.Dropdown(
["general", "face", "anime"],
type="value",
value="general",
label="task",
)
model_name = gr.Dropdown(
[
"srcnn",
"RealESRGAN_x2plus",
"RealESRGAN_x4plus",
"RealESRNet_x4plus",
"realesr-general-x4v3",
],
type="value",
value="realesr-general-x4v3",
label="model",
)
scale = gr.Slider(
minimum=1.5,
maximum=4,
value=2,
step=0.5,
label="Scale factor",
info="Scaling factor",
)
run_btn = gr.Button(value="Submit")
with gr.Column(scale=3):
output_image = gr.Image(type="numpy", label="Output image")
with gr.Column(elem_classes=["container"]):
gr.Examples(
[
["examples/landscape.jpg", "general", 2],
["examples/cat.jpg", "general", 2],
["examples/cat2.jpg", "face", 2],
["examples/AI-generate.png", "face", 2],
["examples/Blake_Lively.png", "face", 2],
["examples/old_image.jpg", "face", 2],
["examples/naruto.png", "anime", 2],
["examples/luffy2.jpg", "anime", 2],
],
[input_image, task, scale],
)
gr.HTML(
"""<br><br><br><center>You can duplicate this Space to skip the queue:<a href="https://huggingface.co/spaces/dragonSwing/isr?duplicate=true"><img src="https://bit.ly/3gLdBN6" alt="Duplicate Space"></a><br>
<p><img src="https://visitor-badge.glitch.me/badge?page_id=dragonswing.isr" alt="visitors"></p></center>"""
)
run_btn.click(inference, [input_image, task, model_name, scale], [output_image])
task.change(on_task_change, [task], [model_name])
demo.queue(concurrency_count=4).launch()