Janeka commited on
Commit
31c0ed8
·
verified ·
1 Parent(s): 05e32bb

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +21 -29
app.py CHANGED
@@ -1,55 +1,47 @@
1
  import cv2
2
  import numpy as np
3
- from PIL import Image, ImageFilter
4
  from rembg import new_session, remove
5
- from skimage import filters, restoration
6
 
7
- # Initialize best free-tier models
8
- isnet_session = new_session("isnet-general-use") # Best details
9
- u2net_session = new_session("u2net") # Fallback model
10
 
11
  def perfect_remove_bg(img):
12
  try:
13
- # Convert input and preserve original size
14
  if isinstance(img, np.ndarray):
15
  img = Image.fromarray(img)
16
  w, h = img.size
17
 
18
- # Step 1: Primary removal with ISNet (best details)
19
  result = remove(img, session=isnet_session)
20
-
21
- # Step 2: Edge refinement
22
  mask = np.array(result.split()[-1])
23
 
24
- # Edge-preserving smoothing
25
  mask = filters.rank.mean(
26
  mask.astype(np.uint8),
27
- np.ones((3,3), np.uint8)
 
28
 
29
- # Step 3: Combine with U²Net for confidence areas
30
  u2net_mask = np.array(remove(img, session=u2net_session).split()[-1]
31
- final_mask = np.where(u2net_mask > 200, mask, u2net_mask) # Trust U²Net in clear areas
32
-
33
- # Step 4: Apply refined mask
34
- result.putalpha(Image.fromarray(final_mask).resize((w,h)))
35
 
 
36
  return result
37
 
38
  except Exception as e:
39
- print(f"⚠️ Error: {e}")
40
- return remove(img, session=u2net_session) # Fallback
41
 
42
  # Gradio interface
43
- with gr.Blocks(theme=gr.themes.Soft()) as demo:
44
- gr.Markdown("""<h1><center>✨ Ultimate Free Background Remover</center></h1>""")
45
  with gr.Row():
46
- input_img = gr.Image(label="Upload", type="pil", height=400)
47
- output_img = gr.Image(label="Result", type="pil", height=400)
48
- with gr.Row():
49
- gr.Button("Remove Background", variant="primary").click(
50
- perfect_remove_bg,
51
- inputs=input_img,
52
- outputs=output_img
53
- )
54
 
55
- demo.launch(show_error=True)
 
1
  import cv2
2
  import numpy as np
3
+ from PIL import Image
4
  from rembg import new_session, remove
5
+ from skimage import filters
6
 
7
+ # Initialize sessions
8
+ isnet_session = new_session("isnet-general-use")
9
+ u2net_session = new_session("u2net")
10
 
11
  def perfect_remove_bg(img):
12
  try:
13
+ # Convert input
14
  if isinstance(img, np.ndarray):
15
  img = Image.fromarray(img)
16
  w, h = img.size
17
 
18
+ # ISNet for details
19
  result = remove(img, session=isnet_session)
 
 
20
  mask = np.array(result.split()[-1])
21
 
22
+ # Fixed edge refinement
23
  mask = filters.rank.mean(
24
  mask.astype(np.uint8),
25
+ footprint=np.ones((3,3), np.uint8) # Correct syntax
26
+ )
27
 
28
+ # U²Net for confidence areas
29
  u2net_mask = np.array(remove(img, session=u2net_session).split()[-1]
30
+ final_mask = np.where(u2net_mask > 200, mask, u2net_mask)
 
 
 
31
 
32
+ result.putalpha(Image.fromarray(final_mask))
33
  return result
34
 
35
  except Exception as e:
36
+ print(f"Error: {e}")
37
+ return remove(img, session=u2net_session)
38
 
39
  # Gradio interface
40
+ with gr.Blocks() as demo:
41
+ gr.Markdown("## Professional BG Remover")
42
  with gr.Row():
43
+ input_img = gr.Image(label="Input", type="pil")
44
+ output_img = gr.Image(label="Output", type="pil")
45
+ gr.Button("Process").click(perfect_remove_bg, inputs=input_img, outputs=output_img)
 
 
 
 
 
46
 
47
+ demo.launch()