LiangLabUMB commited on
Commit
26e54cc
·
verified ·
1 Parent(s): af3397f

Update app.py

Browse files
Files changed (1) hide show
  1. app.py +18 -3
app.py CHANGED
@@ -237,10 +237,17 @@ def filter_mask_by_size(masks,minimum_pixels):
237
  renumbered_masks = np.zeros_like(filtered_masks)
238
  for new_id, old_id in enumerate(unique_ids, start=1):
239
  renumbered_masks[filtered_masks == old_id] = new_id
 
240
 
241
- return renumbered_masks, removed_count
242
 
243
-
 
 
 
 
 
 
244
 
245
  @spaces.GPU
246
  def run_segmentation_editor(editor_data, model_choice, min_cell_size):
@@ -277,6 +284,11 @@ def run_segmentation_editor(editor_data, model_choice, min_cell_size):
277
  # Run Cellpose segmentation
278
  masks, flows, styles = model.eval(processed_image_np, diameter=None, channels=[0, 0])
279
 
 
 
 
 
 
280
  if min_cell_size > 0:
281
  masks, removed_count = filter_mask_by_size(masks, min_cell_size)
282
  filter_msg = f"Removed {removed_count} small objects (< {min_cell_size} pixels).\n"
@@ -313,6 +325,7 @@ def run_segmentation_editor(editor_data, model_choice, min_cell_size):
313
  pack_array(masks),
314
  pack_array(processed_image_np),
315
  confluency,
 
316
  )
317
 
318
  except Exception as e:
@@ -371,6 +384,8 @@ with gr.Blocks(
371
  masks_state = gr.State(value=None)
372
  image_state = gr.State(value=None)
373
 
 
 
374
  with gr.Tab("Image Editor (Draw Selection)"):
375
  gr.Markdown("### Draw selection and run segmentation")
376
 
@@ -434,7 +449,7 @@ with gr.Blocks(
434
  segment_btn1.click(
435
  fn=run_segmentation_editor,
436
  inputs=[image_editor, model_dropdown1, min_size_slider1],
437
- outputs=[cell_count_output1, overlay_output1, info_output1, viability_section1, masks_state, image_state, confluency_output1]
438
  ).then( # Chain the initial viability assessment after segmentation
439
  fn=update_viability_realtime,
440
  inputs=[blue_threshold1, masks_state, image_state], # Pass stored state as inputs
 
237
  renumbered_masks = np.zeros_like(filtered_masks)
238
  for new_id, old_id in enumerate(unique_ids, start=1):
239
  renumbered_masks[filtered_masks == old_id] = new_id
240
+
241
 
242
+ return renumbered_masks, removed_count, mean_cell_size
243
 
244
+
245
+ def rec_min_size(masks):
246
+ num_cells = len(np.unique(masks)) - 1
247
+ if num_cells <= 0:
248
+ return 0
249
+ mean_cell_size = np.count_nonzero(masks) / num_cells
250
+ return int(round(mean_cell_size))
251
 
252
  @spaces.GPU
253
  def run_segmentation_editor(editor_data, model_choice, min_cell_size):
 
284
  # Run Cellpose segmentation
285
  masks, flows, styles = model.eval(processed_image_np, diameter=None, channels=[0, 0])
286
 
287
+
288
+ # Minimum size filtering
289
+
290
+ recommend_min = recommend_min_pixels(masks)
291
+
292
  if min_cell_size > 0:
293
  masks, removed_count = filter_mask_by_size(masks, min_cell_size)
294
  filter_msg = f"Removed {removed_count} small objects (< {min_cell_size} pixels).\n"
 
325
  pack_array(masks),
326
  pack_array(processed_image_np),
327
  confluency,
328
+ gr.update(value = recommend_min)
329
  )
330
 
331
  except Exception as e:
 
384
  masks_state = gr.State(value=None)
385
  image_state = gr.State(value=None)
386
 
387
+
388
+
389
  with gr.Tab("Image Editor (Draw Selection)"):
390
  gr.Markdown("### Draw selection and run segmentation")
391
 
 
449
  segment_btn1.click(
450
  fn=run_segmentation_editor,
451
  inputs=[image_editor, model_dropdown1, min_size_slider1],
452
+ outputs=[cell_count_output1, overlay_output1, info_output1, viability_section1, masks_state, image_state, confluency_output1, min_size_slider1]
453
  ).then( # Chain the initial viability assessment after segmentation
454
  fn=update_viability_realtime,
455
  inputs=[blue_threshold1, masks_state, image_state], # Pass stored state as inputs