Spaces:
Running
on
Zero
Running
on
Zero
File size: 5,448 Bytes
002ccb7 1ee3bf0 c644570 002ccb7 99d346d 1ee3bf0 33469f8 002ccb7 1ee3bf0 002ccb7 1ee3bf0 99d346d 002ccb7 cad6ebe a750c0e c4e3a54 a750c0e c4e3a54 a750c0e c4e3a54 a750c0e 002ccb7 1ee3bf0 33469f8 002ccb7 1ee3bf0 33469f8 002ccb7 33469f8 1ee3bf0 002ccb7 |
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 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 |
import diffusers
import gradio as gr
import torch
from diffusers import AutoPipelineForInpainting
import spaces
device = "cuda" if torch.cuda.is_available() else "cpu"
pipe = AutoPipelineForInpainting.from_pretrained(
"diffusers/stable-diffusion-xl-1.0-inpainting-0.1",
torch_dtype=torch.float16,
variant="fp16",
).to(device)
def read_content(file_path: str) -> str:
"""read the content of target file"""
with open(file_path, "r", encoding="utf-8") as f:
content = f.read()
return content
@spaces.GPU()
def predict(
input_image,
prompt="",
negative_prompt="",
guidance_scale=7.5,
steps=20,
strength=1.0,
scheduler="EulerDiscreteScheduler",
):
if negative_prompt == "":
negative_prompt = None
scheduler_class_name = scheduler.split("-")[0]
add_kwargs = {}
if len(scheduler.split("-")) > 1:
add_kwargs["use_karras"] = True
if len(scheduler.split("-")) > 2:
add_kwargs["algorithm_type"] = "sde-dpmsolver++"
scheduler = getattr(diffusers, scheduler_class_name)
pipe.scheduler = scheduler.from_pretrained(
"stabilityai/stable-diffusion-xl-base-1.0", subfolder="scheduler", **add_kwargs
)
init_image = input_image["background"].convert("RGB")
mask = input_image["layers"][0].getchannel("A").convert("L")
output = pipe(
prompt=prompt,
negative_prompt=negative_prompt,
image=init_image,
mask_image=mask,
guidance_scale=guidance_scale,
num_inference_steps=int(steps),
strength=strength,
)
return init_image, output.images[0]
image_blocks = gr.Blocks()
with image_blocks as demo:
gr.HTML(read_content("header.html"))
with gr.Row():
with gr.Column():
input_image = gr.ImageMask(
type="pil",
label="Input Image",
canvas_size=(1024, 1024),
layers=True,
height=512,
)
with gr.Row():
with gr.Row():
prompt = gr.Textbox(
placeholder="Your prompt (what you want in place of what is erased)",
show_label=False,
elem_id="prompt",
)
btn = gr.Button("Inpaint!", elem_id="run_button")
with gr.Accordion(open=False):
with gr.Row():
guidance_scale = gr.Number(
value=7.5,
minimum=1.0,
maximum=20.0,
step=0.1,
label="guidance_scale",
)
steps = gr.Number(
value=20, minimum=10, maximum=30, step=1, label="steps"
)
strength = gr.Number(
value=0.99,
minimum=0.01,
maximum=1.0,
step=0.01,
label="strength",
)
negative_prompt = gr.Textbox(
label="negative_prompt",
placeholder="Your negative prompt",
info="what you don't want to see in the image",
)
with gr.Row():
schedulers = [
"DEISMultistepScheduler",
"HeunDiscreteScheduler",
"EulerDiscreteScheduler",
"DPMSolverMultistepScheduler",
"DPMSolverMultistepScheduler-Karras",
"DPMSolverMultistepScheduler-Karras-SDE",
]
scheduler = gr.Dropdown(
label="Schedulers",
choices=schedulers,
value="EulerDiscreteScheduler",
)
with gr.Column():
image_out = result = gr.ImageSlider(
interactive=False,
label="Output",
)
btn.click(
fn=predict,
inputs=[
input_image,
prompt,
negative_prompt,
guidance_scale,
steps,
strength,
scheduler,
],
outputs=[image_out],
)
gr.Examples(
examples=[
["./imgs/aaa (8).png"],
["./imgs/download (1).jpeg"],
["./imgs/0_oE0mLhfhtS_3Nfm2.png"],
["./imgs/02_HubertyBlog-1-1024x1024.jpg"],
["./imgs/jdn_jacques_de_nuce-1024x1024.jpg"],
["./imgs/c4ca473acde04280d44128ad8ee09e8a.jpg"],
["./imgs/canam-electric-motorcycles-scaled.jpg"],
["./imgs/e8717ce80b394d1b9a610d04a1decd3a.jpeg"],
["./imgs/Nature___Mountains_Big_Mountain_018453_31.jpg"],
["./imgs/Multible-sharing-room_ccexpress-2-1024x1024.jpeg"],
],
fn=predict,
inputs=[input_image],
cache_examples=False,
)
gr.HTML(
"""
<div class="footer">
<p>Model by <a href="https://huggingface.co/diffusers" style="text-decoration: underline;" target="_blank">Diffusers</a> - Gradio Demo by 🤗 Hugging Face
</p>
</div>
"""
)
image_blocks.queue(max_size=25, api_open=False).launch(share=False)
|