Janeka commited on
Commit
19dc428
·
verified ·
1 Parent(s): 79304b3

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +14 -29
app.py CHANGED
@@ -1,67 +1,52 @@
1
  import gradio as gr
2
  from rembg import remove
3
  from PIL import Image, ImageDraw
4
- import numpy as np
5
- import io
6
 
7
  def remove_bg(image):
8
  if image is None:
9
  return None
10
- image = Image.open(image)
11
  output = remove(image)
12
  return output
13
 
14
  def refine_bg(image, points, threshold, mode):
15
  if image is None:
16
  return None
17
-
18
- image = Image.open(image).convert("RGBA")
19
  mask = Image.new("L", image.size, 0)
20
  draw = ImageDraw.Draw(mask)
21
-
22
  for point in points:
23
  x, y = point
24
  color = 255 if mode == "keep" else 0
25
  draw.ellipse((x - threshold * 10, y - threshold * 10, x + threshold * 10, y + threshold * 10), fill=color)
26
-
27
  refined = Image.composite(image, Image.new("RGBA", image.size, (0, 0, 0, 0)), mask)
28
  return refined
29
 
30
  with gr.Blocks() as iface:
31
  gr.Markdown("# AI Background Remover")
32
-
33
  with gr.Row():
34
- input_img = gr.Image(type="filepath", label="Upload Image")
35
  output_img = gr.Image(type="pil", label="Output Image")
36
-
37
  remove_btn = gr.Button("Remove Background")
38
  remove_btn.click(remove_bg, inputs=input_img, outputs=output_img)
39
-
40
- refine_btn = gr.Button("Refine")
41
- refine_options = gr.Column(visible=False)
42
-
43
  with refine_options:
44
  gr.Markdown("### Refine Background")
45
- refine_editor = gr.Image(type="filepath", label="Tap to Add Points", interactive=True)
46
- keep_btn = gr.Button("+ (Keep)")
47
- remove_btn = gr.Button("- (Remove)")
48
  threshold_slider = gr.Slider(0.00, 1.00, value=0.5, step=0.01, label="Threshold")
49
  apply_refine_btn = gr.Button("Apply Refinements")
50
-
51
  refine_mode = gr.State("keep")
52
-
53
  def show_refine_section(image):
54
- return gr.update(visible=True), image # Show section and keep image visible
55
-
56
  def set_mode_keep():
57
- return "keep", "+ (Keep) Selected"
58
-
59
  def set_mode_remove():
60
- return "remove", "- (Remove) Selected"
61
-
62
- refine_btn.click(show_refine_section, inputs=input_img, outputs=[refine_options, refine_editor])
63
- keep_btn.click(set_mode_keep, outputs=[refine_mode, keep_btn])
64
- remove_btn.click(set_mode_remove, outputs=[refine_mode, remove_btn])
65
  apply_refine_btn.click(refine_bg, inputs=[input_img, refine_editor, threshold_slider, refine_mode], outputs=output_img)
66
 
67
- iface.launch()
 
1
  import gradio as gr
2
  from rembg import remove
3
  from PIL import Image, ImageDraw
 
 
4
 
5
  def remove_bg(image):
6
  if image is None:
7
  return None
 
8
  output = remove(image)
9
  return output
10
 
11
  def refine_bg(image, points, threshold, mode):
12
  if image is None:
13
  return None
 
 
14
  mask = Image.new("L", image.size, 0)
15
  draw = ImageDraw.Draw(mask)
 
16
  for point in points:
17
  x, y = point
18
  color = 255 if mode == "keep" else 0
19
  draw.ellipse((x - threshold * 10, y - threshold * 10, x + threshold * 10, y + threshold * 10), fill=color)
 
20
  refined = Image.composite(image, Image.new("RGBA", image.size, (0, 0, 0, 0)), mask)
21
  return refined
22
 
23
  with gr.Blocks() as iface:
24
  gr.Markdown("# AI Background Remover")
 
25
  with gr.Row():
26
+ input_img = gr.Image(type="pil", label="Upload Image")
27
  output_img = gr.Image(type="pil", label="Output Image")
 
28
  remove_btn = gr.Button("Remove Background")
29
  remove_btn.click(remove_bg, inputs=input_img, outputs=output_img)
30
+ with gr.Column():
31
+ refine_btn = gr.Button("Refine")
32
+ refine_options = gr.Row(visible=False)
 
33
  with refine_options:
34
  gr.Markdown("### Refine Background")
35
+ refine_editor = gr.Image(type="pil", label="Tap to Add Points", tool="sketch")
36
+ keep_btn = gr.Button("+")
37
+ remove_btn = gr.Button("-")
38
  threshold_slider = gr.Slider(0.00, 1.00, value=0.5, step=0.01, label="Threshold")
39
  apply_refine_btn = gr.Button("Apply Refinements")
 
40
  refine_mode = gr.State("keep")
 
41
  def show_refine_section(image):
42
+ return gr.update(visible=True)
 
43
  def set_mode_keep():
44
+ return "keep"
 
45
  def set_mode_remove():
46
+ return "remove"
47
+ refine_btn.click(show_refine_section, inputs=input_img, outputs=refine_options)
48
+ keep_btn.click(set_mode_keep, outputs=refine_mode)
49
+ remove_btn.click(set_mode_remove, outputs=refine_mode)
 
50
  apply_refine_btn.click(refine_bg, inputs=[input_img, refine_editor, threshold_slider, refine_mode], outputs=output_img)
51
 
52
+ iface.launch()