cellpose-app / core /processing.py
katospiegel's picture
Deploy cellpose-app as an imaging-plaza Gradio Space (SDSC)
52c8b2c
Raw
History Blame Contribute Delete
1.5 kB
"""The ONE entrypoint a tool author edits.
`process(image_path, engine, diameter)` segments cells/nuclei and returns an
overlay summary image + a report. `simulate_full` also returns the raw result.
"""
from __future__ import annotations
import os
import numpy as np
from . import fast_seg, viz
from .io import load_image
ENGINES = ["fast", "cellpose"]
def simulate_full(image_path: str, engine: str = "fast", diameter: float = 0.0) -> dict:
if engine not in ENGINES:
raise ValueError(f"Unknown engine '{engine}'. Choose one of {ENGINES}.")
img = load_image(image_path)
# Use ground-truth labels if a sidecar exists (the baked example) to score.
gt = None
side = os.path.splitext(str(image_path))[0] + "_labels.npy"
if os.path.exists(side):
try:
gt = np.load(side)
except Exception: # noqa: BLE001
gt = None
if engine == "cellpose":
from . import cellpose_engine
res = cellpose_engine.analyze(img, diameter=float(diameter), gt=gt)
else:
md = int(diameter / 2) if diameter else 8
res = fast_seg.analyze(img, min_distance=max(3, md), gt=gt)
return {"summary": viz.summary_image(res), "report": res["report"], "res": res}
def process(image_path: str, engine: str = "fast", diameter: float = 0.0) -> tuple[np.ndarray, dict]:
"""Returns (segmentation overlay RGB, report dict)."""
r = simulate_full(image_path, engine, diameter)
return r["summary"], r["report"]