fly-behavior / core /processing.py
katospiegel's picture
Deploy fly-behavior as an imaging-plaza Gradio Space (SDSC)
e0361cd verified
Raw
History Blame Contribute Delete
1.34 kB
"""The ONE entrypoint a tool author edits.
`process(video_path, engine, fps, px_per_mm)` tracks flies and computes behavior,
returning a trajectory+ethogram summary image and a report. `simulate_full` also
returns the raw result + movie so the UI can build the annotated video.
"""
from __future__ import annotations
import numpy as np
from . import fast_track, viz
from .io import read_video
ENGINES = ["fast", "pose"]
def simulate_full(video_path: str, engine: str = "fast",
fps: float = 15.0, px_per_mm: float = 4.0) -> dict:
if engine not in ENGINES:
raise ValueError(f"Unknown engine '{engine}'. Choose one of {ENGINES}.")
movie = read_video(video_path)
if engine == "pose":
from . import pose
res = pose.analyze(movie, fps=float(fps))
else:
res = fast_track.analyze(movie, fps=float(fps), px_per_mm=float(px_per_mm))
return {
"summary": viz.summary_image(movie, res),
"report": res["report"],
"res": res,
"movie": movie,
}
def process(video_path: str, engine: str = "fast",
fps: float = 15.0, px_per_mm: float = 4.0) -> tuple[np.ndarray, dict]:
"""Returns (trajectory+ethogram summary RGB, report dict)."""
r = simulate_full(video_path, engine, fps, px_per_mm)
return r["summary"], r["report"]