HandRefiner / app.py
fffiloni's picture
Update app.py
cfecf1d verified
raw
history blame
4.15 kB
import gradio as gr
import subprocess
import os
from PIL import Image
def resize_image(image_path, target_height, output_path):
# Open the image file
with Image.open(image_path) as img:
# Calculate the ratio to resize the image to the target height
#ratio = target_height / float(img.size[1])
# Calculate the new width based on the aspect ratio
#new_width = int(float(img.size[0]) * ratio)
# Resize the image
resized_img = img.resize((512, target_height), Image.LANCZOS)
# Save the resized image
resized_img.save(output_path)
return output_path
def generate(image, prompt, seed):
print(image, prompt, seed)
image_path = os.path.splitext(image)[0]
image_name = os.path.basename(image_path)
resized=resize_image(image, 512, f"output/{image_name}.jpg")
print(f"IMAGE NAME: {image_name}")
command = f"python handrefiner.py --input_img {resized} --out_dir output --strength 0.55 --weights models/inpaint_depth_control.ckpt --prompt '{prompt}' --seed {seed}"
try:
result = subprocess.run(command, shell=True, check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE, text=True)
output_path = 'output'
print("Output:", result.stdout)
print(output_path)
# List all files and directories in the given directory
contents = os.listdir("output")
# Print the contents
for item in contents:
print(item)
return f"output/{image_name}_0.jpg"
except subprocess.CalledProcessError as e:
print("Error:", e.stderr)
return None
css="""
#col-container{
max-width: 860px;
margin: 0 auto;
}
#project-links{
margin: 0 0 12px !important;
column-gap: 8px;
display: flex;
justify-content: center;
flex-wrap: nowrap;
flex-direction: row;
align-items: center;
}
"""
with gr.Blocks(css=css) as demo:
with gr.Column(elem_id="col-container"):
gr.HTML("""
<h2 style="text-align: center;">
HandRefiner
</h2>
<p style="text-align: center;">
Refining Malformed Hands in Generated Images by Diffusion-based Conditional Inpainting <br />
For demo purpose, every input images are resized to 512 1:1 aspect ratio
</p>
<p style="margin:12px auto;display: flex;justify-content: center;">
<a href="https://huggingface.co/spaces/fffiloni/HandRefiner?duplicate=true"><img src="https://huggingface.co/datasets/huggingface/badges/resolve/main/duplicate-this-space-lg.svg" alt="Duplicate this Space"></a>
</p>
""")
with gr.Row():
with gr.Column():
image = gr.Image(type='filepath', sources=["upload"])
textbox = gr.Textbox(show_label=False, value="a person facing the camera, making a hand gesture, indoor")
seed = gr.Slider(label="Seed", minimum=0, maximum=1000000, value=42, step=1)
submit_btn = gr.Button("Submit")
gr.Examples(
examples = [
"examples/IMG_1050.jpeg",
"examples/IMG_1051.jpeg",
"examples/IMG_1052.jpeg",
"examples/IMG_1053.jpeg"
],
inputs = [image]
)
with gr.Column():
output_image = gr.Image(label="Fixed hands result")
gr.HTML("""
<p id="project-links" align="center">
<a href='https://github.com/wenquanlu/HandRefiner'><img src='https://img.shields.io/badge/Project-Page-Green'></a> <a href='https://arxiv.org/abs/2311.17957'><img src='https://img.shields.io/badge/Paper-Arxiv-red'></a>
</p>
<img src="https://github.com/wenquanlu/HandRefiner/raw/main/Figs/banner.png" style="margin: 0 auto;border-radius: 10px;" />
""")
submit_btn.click(fn=generate, inputs=[image, textbox, seed], outputs=[output_image])
demo.queue(max_size=10).launch(debug=True, show_api=False)