feat(tooling): X-Ray threshold optimizer, gallery utilities, artifact registry, docs build
Optimizer (scripts/optimizer/): replay.py runs the real C++ tracker/matcher/ scene_tracker chain over a dumped-embeddings HDF5 via sae_kpn, so a threshold sweep never re-decodes video or re-embeds faces. optimize.py drives scipy's differential_evolution over the knob space, with DE-level parallelism (multiple population candidates evaluated concurrently via a ThreadPoolExecutor) on top of per-film replay parallelism. second_score.py is the per-second X-Ray scoring metric (TPI/FPI/FN, out-of-cast misID weighted 10x, fair recall masked to gallery-known cast) that superseded an earlier scene-union metric. dump_error_frames.py / dump_scene_montage.py extract annotated video frames (bounding boxes, TPI/FPI/FN captions, onscreen-vs-offscreen split) for visual review of a replay against ground truth. Gallery utilities: cast_restrict.py, gallery_membership.py, fetch_missing_actors.py, reembed_gallery.py. scripts/validation/: X-Ray ground-truth loading and provider-agnostic identity matching (identity.py's keys_for — an actor is the union of every id we can derive, since pipeline output and ground truth don't share one id space). scripts/artifacts/: push/pull scripts for the Gitea generic package registry — galleries, montage frames, and experiment data (manifests/trajectories/results) are pushed there instead of committed, since none are needed to run the app, only benchmarks. Versioned by git short-SHA. scripts/docs/: MkDocs site build (build_site.sh) and the calibration-curve comparison chart (calibration_chart.py, matplotlib, reads each gallery's embedded calibration). Gallery-building scripts (make_jellyfin_gallery.py, make_gallery.py, filter_gallery.py, run_from_jellyfin.py, movienet_eval.py, movienet_prep.py, sae_gallery.py) updated to read/write HDF5 galleries exclusively, matching the engine-side format switch. run_from_jellyfin.py and the optimizer no longer carry movie source paths in shared manifests (some source filenames include scene-release tags) — resolved locally via a gitignored file-lut.json instead.
This commit is contained in:
@@ -66,6 +66,23 @@ else
|
||||
echo "SCRFD-500MF already present: $SCRFD_FILE"
|
||||
fi
|
||||
|
||||
# ── TransNetV2 shot-boundary detection (scene detector, opt-in) ───────────────
|
||||
# ONNX export (elya5/transnetv2, MIT). Fixed input 1x100x27x48x3 (RGB 0-255),
|
||||
# primary output "534" = per-frame boundary logits. Used only with --scene-detect.
|
||||
SCENE_FILE="$MODELS_DIR/transnetv2.onnx"
|
||||
SCENE_SHA="c4d54a682bace32f25136ef83ca2c9d403e8f8193775efeb995172a0d95a8e0c"
|
||||
if [ ! -f "$SCENE_FILE" ]; then
|
||||
echo "Downloading TransNetV2…"
|
||||
curl -L "https://huggingface.co/elya5/transnetv2/resolve/main/transnetv2.onnx" \
|
||||
-o "$SCENE_FILE"
|
||||
if command -v sha256sum >/dev/null; then
|
||||
echo "$SCENE_SHA $SCENE_FILE" | sha256sum -c - \
|
||||
|| echo "WARNING: TransNetV2 sha256 mismatch (upstream may have changed)"
|
||||
fi
|
||||
else
|
||||
echo "TransNetV2 already present: $SCENE_FILE"
|
||||
fi
|
||||
|
||||
echo ""
|
||||
echo "Models ready in $MODELS_DIR/:"
|
||||
ls -lh "$MODELS_DIR"
|
||||
|
||||
Reference in New Issue
Block a user