import numpy as np import gradio as gr from PIL import Image from io import BytesIO from copy import deepcopy from core import process_inpaint from huggingface_hub import login import os import spaces login(os.getenv("HF_TOKEN")) @spaces.GPU() def process_image(image, mask, progress=gr.Progress(track_tqdm=True)): if np.unique(mask["background"]).size == 1: print("\nDid not Receive Mask\n") print("Mask Size : ", image["layers"][0].shape) print("Unique values: ", np.unique(image["layers"][0])) print("Type : ", type(image["layers"][0])) mask = image["layers"][0] output = process_inpaint(image["background"], mask) else: print("\nProcessing Received Mask\n") print("Mask Size : ", mask["background"].shape) print("Unique values: ", np.unique(mask["background"])) print("Type : ", type(mask["background"])) mask = mask["background"] output = process_inpaint(image["background"], mask) img_output = Image.fromarray(output).convert("RGB") return img_output, mask with gr.Blocks() as demo: gr.Markdown("# OBJECT REMOVER") with gr.Row(): with gr.Column(): image = gr.ImageMask(type="numpy", layers=False, label="Upload Image") with gr.Accordion(label="Advanced", open=False): mask = gr.ImageMask(label="Mask", format="png", value=None, sources=["upload"]) button = gr.Button("Remove") with gr.Column(): output = gr.Image(format="png", label="Output Image") mask_out = gr.Image(format="png", label="Output Image") button.click(fn=process_image, inputs=[image, mask], outputs=[output, mask_out]) demo.launch(debug=True,show_error=True)