File size: 1,340 Bytes
e0361cd
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
"""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"]