tmdwo commited on
Commit
b1c7049
Β·
verified Β·
1 Parent(s): 3e87cf7

Upload app.py

Browse files
Files changed (1) hide show
  1. app.py +25 -23
app.py CHANGED
@@ -247,26 +247,28 @@ def draw_points_on_image(image, layer_manager):
247
  return draw_img
248
 
249
  # ============ UI FUNCTIONS ============
 
 
 
 
 
250
  def create_new_layer(name, current_manager):
251
  """μƒˆ λ ˆμ΄μ–΄ 생성"""
252
  if current_manager is None:
253
  current_manager = LayerManager()
254
-
255
  if not name.strip():
256
- return current_manager, create_layer_status_html(current_manager), gr.Dropdown(choices=[]), "Please enter a layer name"
257
 
258
  # 쀑볡 이름 체크
259
  for layer_id, layer in current_manager.layers.items():
260
  if layer['name'] == name.strip():
261
- return current_manager, create_layer_status_html(current_manager), gr.Dropdown(choices=[(layer['name'], lid) for lid, layer in current_manager.layers.items()]), f"Layer name '{name}' already exists"
262
 
263
  layer_id = current_manager.create_layer(name.strip())
264
  current_manager.set_current_layer(layer_id)
265
-
266
- # λ“œλ‘­λ‹€μš΄ 선택지 μ—…λ°μ΄νŠΈ
267
- choices = [(layer['name'], lid) for lid, layer in current_manager.layers.items()]
268
 
269
- return current_manager, create_layer_status_html(current_manager), gr.Dropdown(choices=choices, value=layer_id), f"Layer '{name}' created"
270
 
271
  def create_layer_status_html(current_manager):
272
  """λ ˆμ΄μ–΄ μƒνƒœ ν‘œμ‹œ HTML 생성 (μ‹œκ°μ  ν‘œμ‹œλ§Œ)"""
@@ -462,16 +464,10 @@ def refresh_visualization(current_manager, image, opacity, border_width):
462
 
463
 
464
  # ============ GRADIO INTERFACE ============
465
- custom_css="""
466
- #col-container { margin: 0 auto; max-width: 1200px; }
467
- #main-title h1 { font-size: 2.1em !important; }
468
- .layer-button { margin: 2px; }
469
- """
470
-
471
  # No custom JavaScript needed anymore
472
  custom_js = ""
473
 
474
- with gr.Blocks(css=custom_css) as demo:
475
  with gr.Column(elem_id="col-container"):
476
  gr.Markdown("# **SAM3 Layer Segmentation Tool**", elem_id="main-title")
477
  gr.Markdown("**Layer-based object separation and area analysis tool** | 1. Create layers 2. Select point mode and click 3. Run segmentation (processes all layers)")
@@ -545,17 +541,15 @@ with gr.Blocks(css=custom_css) as demo:
545
  if mgr is None:
546
  mgr = LayerManager()
547
 
548
- choices = [(layer['name'], lid) for lid, layer in mgr.layers.items()]
549
-
550
  if layer_id:
551
  mgr.set_current_layer(layer_id)
552
- return mgr, create_layer_status_html(mgr), gr.Dropdown(choices=choices, value=layer_id), f"Layer '{mgr.layers[layer_id]['name']}' selected"
553
- return mgr, create_layer_status_html(mgr), gr.Dropdown(choices=choices, value=None), "Please select a layer"
554
 
555
  layer_selector.change(
556
  on_layer_select,
557
  inputs=[layer_selector, st_layer_manager],
558
- outputs=[st_layer_manager, layer_buttons_html, layer_selector, status_text]
559
  )
560
 
561
  # 포인트 λͺ¨λ“œ λ³€κ²½
@@ -619,8 +613,8 @@ with gr.Blocks(css=custom_css) as demo:
619
  new_manager = LayerManager()
620
  empty_html = "<div style='padding: 10px; text-align: center; color: #888;'>No layers created</div>"
621
  # μ—…λ‘œλ“œν•œ 이미지λ₯Ό 좜λ ₯에도 ν‘œμ‹œ
622
- return new_manager, img, pd.DataFrame(), empty_html, gr.Dropdown(choices=[], interactive=True, value=None), "positive", "Include Point (Red)", "New image uploaded"
623
-
624
  img_input.change(
625
  on_image_upload,
626
  inputs=[img_input],
@@ -629,10 +623,18 @@ with gr.Blocks(css=custom_css) as demo:
629
 
630
  @spaces.GPU
631
  def run_spaces():
632
- demo.launch()
 
 
 
 
633
 
634
  def run_local():
635
- demo.launch(show_error=True)
 
 
 
 
636
 
637
  if __name__ == "__main__":
638
  # Hugging Spaces ν™˜κ²½ 감지
 
247
  return draw_img
248
 
249
  # ============ UI FUNCTIONS ============
250
+ def update_layer_selector_choices(manager):
251
+ """λ ˆμ΄μ–΄ 선택 λ“œλ‘­λ‹€μš΄μ˜ choices μ—…λ°μ΄νŠΈ"""
252
+ choices = [(layer['name'], lid) for lid, layer in manager.layers.items()]
253
+ return gr.Dropdown(choices=choices, interactive=True, value=manager.current_layer_id)
254
+
255
  def create_new_layer(name, current_manager):
256
  """μƒˆ λ ˆμ΄μ–΄ 생성"""
257
  if current_manager is None:
258
  current_manager = LayerManager()
259
+
260
  if not name.strip():
261
+ return current_manager, create_layer_status_html(current_manager), update_layer_selector_choices(current_manager), "Please enter a layer name"
262
 
263
  # 쀑볡 이름 체크
264
  for layer_id, layer in current_manager.layers.items():
265
  if layer['name'] == name.strip():
266
+ return current_manager, create_layer_status_html(current_manager), update_layer_selector_choices(current_manager), f"Layer name '{name}' already exists"
267
 
268
  layer_id = current_manager.create_layer(name.strip())
269
  current_manager.set_current_layer(layer_id)
 
 
 
270
 
271
+ return current_manager, create_layer_status_html(current_manager), update_layer_selector_choices(current_manager), f"Layer '{name}' created"
272
 
273
  def create_layer_status_html(current_manager):
274
  """λ ˆμ΄μ–΄ μƒνƒœ ν‘œμ‹œ HTML 생성 (μ‹œκ°μ  ν‘œμ‹œλ§Œ)"""
 
464
 
465
 
466
  # ============ GRADIO INTERFACE ============
 
 
 
 
 
 
467
  # No custom JavaScript needed anymore
468
  custom_js = ""
469
 
470
+ with gr.Blocks() as demo:
471
  with gr.Column(elem_id="col-container"):
472
  gr.Markdown("# **SAM3 Layer Segmentation Tool**", elem_id="main-title")
473
  gr.Markdown("**Layer-based object separation and area analysis tool** | 1. Create layers 2. Select point mode and click 3. Run segmentation (processes all layers)")
 
541
  if mgr is None:
542
  mgr = LayerManager()
543
 
 
 
544
  if layer_id:
545
  mgr.set_current_layer(layer_id)
546
+ return mgr, create_layer_status_html(mgr), f"Layer '{mgr.layers[layer_id]['name']}' selected"
547
+ return mgr, create_layer_status_html(mgr), "Please select a layer"
548
 
549
  layer_selector.change(
550
  on_layer_select,
551
  inputs=[layer_selector, st_layer_manager],
552
+ outputs=[st_layer_manager, layer_buttons_html, status_text]
553
  )
554
 
555
  # 포인트 λͺ¨λ“œ λ³€κ²½
 
613
  new_manager = LayerManager()
614
  empty_html = "<div style='padding: 10px; text-align: center; color: #888;'>No layers created</div>"
615
  # μ—…λ‘œλ“œν•œ 이미지λ₯Ό 좜λ ₯에도 ν‘œμ‹œ
616
+ return new_manager, img, pd.DataFrame(), empty_html, update_layer_selector_choices(new_manager), "positive", "Include Point (Red)", "New image uploaded"
617
+
618
  img_input.change(
619
  on_image_upload,
620
  inputs=[img_input],
 
623
 
624
  @spaces.GPU
625
  def run_spaces():
626
+ demo.launch(ssr=False, css="""
627
+ #col-container { margin: 0 auto; max-width: 1200px; }
628
+ #main-title h1 { font-size: 2.1em !important; }
629
+ .layer-button { margin: 2px; }
630
+ """)
631
 
632
  def run_local():
633
+ demo.launch(show_error=True, ssr=False, css="""
634
+ #col-container { margin: 0 auto; max-width: 1200px; }
635
+ #main-title h1 { font-size: 2.1em !important; }
636
+ .layer-button { margin: 2px; }
637
+ """)
638
 
639
  if __name__ == "__main__":
640
  # Hugging Spaces ν™˜κ²½ 감지