import spaces import gradio as gr import subprocess import re from PIL import Image import opencvinpaint def sanitize_prompt(prompt): # Allow only alphanumeric characters, spaces, and basic punctuation allowed_chars = re.compile(r"[^a-zA-Z0-9\s.,!?-]") sanitized_prompt = allowed_chars.sub("", prompt) return sanitized_prompt #@spaces.GPU(duration=120) def process_images(image, image2=None,inpaint_radius=3,blur_radius=25,edge_expand=8,inpaint_mode="Telea"): # I'm not sure when this happen if not isinstance(image, dict): if image2 == None: print("empty mask") return image else: image = dict({'background': image, 'layers': [image2]}) if image2!=None: mask = image2 else: if len(image['layers']) == 0: print("empty mask") return image mask = image['layers'][0] output = opencvinpaint.process_image(image["background"],mask,inpaint_radius,blur_radius,edge_expand,inpaint_mode) return output # code from https://huggingface.co/spaces/diffusers/stable-diffusion-xl-inpainting/blob/main/app.py def read_file(file_path: str) -> str: """read the text of target file """ with open(file_path, 'r', encoding='utf-8') as f: content = f.read() return content css=""" #col-left { margin: 0 auto; max-width: 640px; } #col-right { margin: 0 auto; max-width: 640px; } """ #css=css, demo_blocks = gr.Blocks(css=css, elem_id="demo-container") with demo_blocks as demo: with gr.Column(): gr.HTML(read_file("demo_header.html")) with gr.Row(): with gr.Column(): image = gr.ImageEditor(sources=['upload','clipboard'],transforms=[],image_mode='RGB', layers=False, elem_id="image_upload", type="pil", label="Upload",brush=gr.Brush(colors=["#333"], color_mode="fixed")) with gr.Row(elem_id="prompt-container", equal_height=False): with gr.Row(): btn = gr.Button("Inpaint!", elem_id="run_button") image_mask = gr.Image(sources=['upload','clipboard'], elem_id="mask_upload", type="pil", label="Mask_Upload",height=400, value=None) with gr.Accordion(label="Advanced Settings", open=False): with gr.Row( equal_height=True): inpaint_radius = gr.Number(value=3, minimum=1.0, maximum=20.0, step=1, label="Inpaint Radius") blur_radius = gr.Number(value=25, minimum=0.0, maximum=50.0, step=1, label="Blur Radius") edge_expand = gr.Number(value=8, minimum=0.0, maximum=20.0, step=1, label="Edge Expand") with gr.Row(equal_height=True): modes = ["Telea", "Navier-Stokes"] inpaint_mode = gr.Dropdown(label="modes", choices=modes, value="Telea") with gr.Column(): image_out = gr.Image(sources=[],label="Output", elem_id="output-img") btn.click(fn=process_images, inputs=[image, image_mask,inpaint_radius,blur_radius,edge_expand,inpaint_mode], outputs =image_out, api_name='infer') gr.Examples( examples=[["examples/street.jpg", "examples/street_mask.jpg"]] , #fn=predict, inputs=[image,image_mask], cache_examples=False, ) gr.HTML( """
Inpaint Code OpenCV inpaint example - Gradio Demo by 🤗 Hugging Face