Cellpose / app.py
Shalani08's picture
Update app.py
e7d9c1d verified
from fastapi import FastAPI, UploadFile, File, Query
import tifffile
import numpy as np
from cellpose import models
from fastapi.responses import FileResponse
from huggingface_hub import snapshot_download
import os
from io import BytesIO
import tempfile
app = FastAPI(
title="Cellpose API",
docs_url="/docs",
redoc_url=None
)
@app.get("/")
def root():
return {"status": "ok"}
MODEL_REPO = "Shalani08/cellpose_3.1.1_finetuned"
repo_dir = snapshot_download(
repo_id=MODEL_REPO,
repo_type="model",
revision="8a020c0",
token=os.environ.get("HF_TOKEN")
)
model_dir = f"{repo_dir}/ddq_model"
model = models.CellposeModel(
pretrained_model=model_dir,
gpu=False
)
@app.post("/segment")
async def segment(
image: UploadFile = File(...),
diameter: float = Query(0, description="Cell diameter (0 = auto)"),
channels: str = Query("0,0", description="Cellpose channels"),
flow_threshold: float = Query(0.4),
cellprob_threshold: float = Query(0.0)
):
img_bytes = await image.read()
img = tifffile.imread(BytesIO(img_bytes))
if img.ndim == 3 and img.shape[-1] == 3:
img = img[..., 0]
ch = [int(c) for c in channels.split(",")]
masks, _, _ = model.eval(
img,
diameter=diameter,
channels=ch,
flow_threshold=flow_threshold,
cellprob_threshold=cellprob_threshold
)
tmp = tempfile.NamedTemporaryFile(suffix=".tif", delete=False)
tifffile.imwrite(tmp.name, masks.astype(np.uint16))
return FileResponse(tmp.name, media_type="image/tiff")