ImageComposition / main.py
Superlang's picture
config
047d71d
raw
history blame
2.05 kB
import importlib
import os
from PIL import Image
import gradio as gr
from omegaconf import OmegaConf
config = OmegaConf.load("config/annotator.yaml")
package_annotator = "processor"
def process_image(cls: str, fg: Image.Image, bg: Image.Image, *kwargs):
if fg.size != bg.size:
fg = fg.resize(bg.size)
module_imp = importlib.import_module(package_annotator)
model = getattr(module_imp, cls)
image_processor = model()
result = image_processor(fg, bg, *kwargs)
if type(result) == tuple:
return result
return [result]
def process(cls):
def process_fc(img, res, *args):
return process_image(cls, img, res, *args)
return process_fc
block = gr.Blocks().queue()
examples = [[os.path.join(os.path.dirname(__file__), "example/product.png"),
os.path.join(os.path.dirname(__file__), "example/bg.png")]]
with block:
for key in config.keys():
cls, input_element = config[key]["process"], config[key].get("input")
input_append = []
with gr.Tab(key):
with gr.Row():
gr.Markdown("## " + key)
with gr.Row():
with gr.Column():
input_image = gr.Image(label="foreground", source='upload', type="pil", image_mode="RGBA")
bg_image = gr.Image(label="background", source='upload', type="pil", image_mode="RGBA")
if input_element is not None:
for item in input_element:
input_append.append(getattr(gr, item["attr"])(**item["args"]))
run_button = gr.Button(label="Run")
gr.Examples(examples, [input_image, bg_image])
with gr.Column():
gallery = gr.Gallery(label="Generated images", show_label=False).style(height="auto")
run_button.click(fn=process(cls),
inputs=[input_image, bg_image] + input_append,
outputs=[gallery])
block.launch(server_port=7867)