Spaces:
Runtime error
Runtime error
update: add color inpainting feature
Browse files
app.py
CHANGED
@@ -66,16 +66,10 @@ def resize_image(input_image, resolution, max_edge=False, edge_limit=False):
|
|
66 |
pimg[oH:oH+H, oW:oW+W] = img
|
67 |
return pimg
|
68 |
|
69 |
-
def get_canny_filter(image,
|
70 |
-
|
71 |
-
if not isinstance(image, np.ndarray):
|
72 |
-
image = np.array(image)
|
73 |
-
|
74 |
image = cv2.Canny(image, low_threshold, high_threshold)
|
75 |
image = image[:, :, None]
|
76 |
image = np.concatenate([image, image, image], axis=2)
|
77 |
-
if format == 'pil':
|
78 |
-
image = Image.fromarray(image)
|
79 |
return image
|
80 |
|
81 |
def get_color_filter(cond_image, mask_size=64):
|
@@ -85,16 +79,11 @@ def get_color_filter(cond_image, mask_size=64):
|
|
85 |
return color
|
86 |
|
87 |
def get_colorcanny(image, mask_size):
|
88 |
-
|
89 |
-
if not isinstance(image, np.ndarray):
|
90 |
-
image = np.array(image)
|
91 |
-
|
92 |
-
canny_img = get_canny_filter(image, format='np')
|
93 |
|
94 |
color_img = get_color_filter(image, int(mask_size))
|
95 |
|
96 |
color_img[np.where(canny_img > 128)] = 255
|
97 |
-
color_img = Image.fromarray(color_img)
|
98 |
return color_img
|
99 |
|
100 |
def process(input_image, prompt, n_prompt, strength=1.0, color_mask_size=96, size=512, scale=6.0, ddim_steps=20):
|
@@ -102,6 +91,35 @@ def process(input_image, prompt, n_prompt, strength=1.0, color_mask_size=96, siz
|
|
102 |
input_image = resize_image(input_image, size, max_edge=True, edge_limit=True)
|
103 |
|
104 |
cond_img = get_colorcanny(input_image, color_mask_size)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
105 |
output = pipe(
|
106 |
prompt_embeds=prompt_embeds,
|
107 |
negative_prompt_embeds=negative_prompt_embeds,
|
@@ -130,9 +148,12 @@ with block:
|
|
130 |
with gr.Row():
|
131 |
with gr.Column():
|
132 |
input_image = gr.Image(source='upload', type="numpy")
|
|
|
133 |
prompt = gr.Textbox(label="Prompt", value='')
|
134 |
n_prompt = gr.Textbox(label="Negative Prompt", value='')
|
135 |
-
|
|
|
|
|
136 |
with gr.Accordion('Advanced', open=False):
|
137 |
strength = gr.Slider(label="Control Strength", minimum=0.0, maximum=2.0, value=1.0, step=0.01)
|
138 |
color_mask_size = gr.Slider(label="Color Mask Size", minimum=32, maximum=256, value=96, step=16)
|
@@ -144,6 +165,8 @@ with block:
|
|
144 |
result_gallery = gr.Gallery(label='Output', show_label=False, elem_id="gallery").style(grid=2, height='auto')
|
145 |
ips = [input_image, prompt, n_prompt, strength, color_mask_size, size, scale, ddim_steps]
|
146 |
run_button.click(fn=process, inputs=ips, outputs=[result_gallery])
|
|
|
|
|
147 |
|
148 |
gr.Examples(
|
149 |
examples=[
|
|
|
66 |
pimg[oH:oH+H, oW:oW+W] = img
|
67 |
return pimg
|
68 |
|
69 |
+
def get_canny_filter(image, low_threshold=100, high_threshold=200):
|
|
|
|
|
|
|
|
|
70 |
image = cv2.Canny(image, low_threshold, high_threshold)
|
71 |
image = image[:, :, None]
|
72 |
image = np.concatenate([image, image, image], axis=2)
|
|
|
|
|
73 |
return image
|
74 |
|
75 |
def get_color_filter(cond_image, mask_size=64):
|
|
|
79 |
return color
|
80 |
|
81 |
def get_colorcanny(image, mask_size):
|
82 |
+
canny_img = get_canny_filter(image)
|
|
|
|
|
|
|
|
|
83 |
|
84 |
color_img = get_color_filter(image, int(mask_size))
|
85 |
|
86 |
color_img[np.where(canny_img > 128)] = 255
|
|
|
87 |
return color_img
|
88 |
|
89 |
def process(input_image, prompt, n_prompt, strength=1.0, color_mask_size=96, size=512, scale=6.0, ddim_steps=20):
|
|
|
91 |
input_image = resize_image(input_image, size, max_edge=True, edge_limit=True)
|
92 |
|
93 |
cond_img = get_colorcanny(input_image, color_mask_size)
|
94 |
+
cond_img = Image.fromarray(cond_img)
|
95 |
+
output = pipe(
|
96 |
+
prompt_embeds=prompt_embeds,
|
97 |
+
negative_prompt_embeds=negative_prompt_embeds,
|
98 |
+
image=cond_img,
|
99 |
+
generator=generator,
|
100 |
+
num_images_per_prompt=1,
|
101 |
+
num_inference_steps=ddim_steps,
|
102 |
+
guidance_scale=scale,
|
103 |
+
controlnet_conditioning_scale=float(strength)
|
104 |
+
)
|
105 |
+
return [output.images[0], cond_img]
|
106 |
+
|
107 |
+
|
108 |
+
def inpaint_process(inpaint_image, input_image, prompt, n_prompt, strength=1.0, color_mask_size=96, size=512, scale=6.0, ddim_steps=20):
|
109 |
+
if inpaint_image is None:
|
110 |
+
return process(input_image, prompt, n_prompt, strength, color_mask_size, size, scale, ddim_steps)
|
111 |
+
|
112 |
+
prompt_embeds, negative_prompt_embeds = _encode_prompt(pipe, prompt, pipe.device, 1, True, n_prompt, 3)
|
113 |
+
input_image = resize_image(input_image, size, max_edge=True, edge_limit=True)
|
114 |
+
inpaint_image = resize_image(inpaint_image, size, max_edge=True, edge_limit=True)
|
115 |
+
|
116 |
+
canny_img = get_canny_filter(input_image)
|
117 |
+
|
118 |
+
color_img = get_color_filter(inpaint_image, int(color_mask_size))
|
119 |
+
|
120 |
+
color_img[np.where(canny_img > 128)] = 255
|
121 |
+
cond_img = Image.fromarray(color_img)
|
122 |
+
|
123 |
output = pipe(
|
124 |
prompt_embeds=prompt_embeds,
|
125 |
negative_prompt_embeds=negative_prompt_embeds,
|
|
|
148 |
with gr.Row():
|
149 |
with gr.Column():
|
150 |
input_image = gr.Image(source='upload', type="numpy")
|
151 |
+
color_image = gr.ImagePaint(type="numpy")
|
152 |
prompt = gr.Textbox(label="Prompt", value='')
|
153 |
n_prompt = gr.Textbox(label="Negative Prompt", value='')
|
154 |
+
with gr.Row():
|
155 |
+
run_button = gr.Button(label="Run")
|
156 |
+
run_edit_button = gr.Button(value='Run with inpaint color', label="Run with inpaint color")
|
157 |
with gr.Accordion('Advanced', open=False):
|
158 |
strength = gr.Slider(label="Control Strength", minimum=0.0, maximum=2.0, value=1.0, step=0.01)
|
159 |
color_mask_size = gr.Slider(label="Color Mask Size", minimum=32, maximum=256, value=96, step=16)
|
|
|
165 |
result_gallery = gr.Gallery(label='Output', show_label=False, elem_id="gallery").style(grid=2, height='auto')
|
166 |
ips = [input_image, prompt, n_prompt, strength, color_mask_size, size, scale, ddim_steps]
|
167 |
run_button.click(fn=process, inputs=ips, outputs=[result_gallery])
|
168 |
+
run_edit_button.click(fn=inpaint_process, inputs=[color_image] + ips, outputs=[result_gallery])
|
169 |
+
|
170 |
|
171 |
gr.Examples(
|
172 |
examples=[
|