File size: 3,933 Bytes
f24d19f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
316424f
7c0ca8f
316424f
7c0ca8f
 
316424f
7c0ca8f
316424f
7c0ca8f
 
 
 
316424f
7c0ca8f
 
316424f
7c0ca8f
 
316424f
f24d19f
7c0ca8f
f24d19f
 
 
 
 
 
 
 
 
 
 
7c0ca8f
 
 
 
 
 
 
 
 
 
 
f24d19f
7c0ca8f
f24d19f
7c0ca8f
 
f24d19f
 
7c0ca8f
 
f24d19f
 
7c0ca8f
f24d19f
 
 
 
 
7c0ca8f
 
 
f24d19f
7c0ca8f
 
f24d19f
 
316424f
f24d19f
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
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(
        """
            <div style="text-align: center;">
                <p>Inpaint Code <a href="https://github.com/opencv/opencv/blob/da3debda6d233af90e421e95700c63fc08b83b75/samples/python/inpaint.py" style="text-decoration: underline;" target="_blank">OpenCV inpaint example</a> - Gradio Demo by 🤗 Hugging Face
                </p>
            </div>
        """
    )

demo_blocks.queue(max_size=25).launch(share=True)