From 22f32daac6d7426637144b6dbcd8d6fb0a310482 Mon Sep 17 00:00:00 2001 From: Shao Su Date: Thu, 29 Oct 2026 13:50:31 -0700 Subject: [PATCH] Use underscore flags in EgoHand docker wrappers Rename the egohand_inference.sh and detector.sh options to snake_case so they match the host run_egohand_inference_pipeline.py and run_hand_detector.py flags (e.g. --intrinsics_json, --bbox_dir, --hand_detector_weight, --hf_token). Boolean --tracking/--no-tracking is unchanged. Update the docker README and cross-references. Co-Authored-By: Claude Sonnet 5.5 Signed-off-by: Shao Su --- .../inference/docker/Dockerfile.egohand | 4 +- .../inference/docker/README.md | 68 ++++++++--------- .../inference/docker/detector.sh | 28 +++---- .../inference/docker/egohand_inference.sh | 74 +++++++++---------- 4 files changed, 87 insertions(+), 87 deletions(-) diff --git a/src/python/isaaccapture_egopost/inference/docker/Dockerfile.egohand b/src/python/isaaccapture_egopost/inference/docker/Dockerfile.egohand index 917dc93105..3666ce950a 100644 --- a/src/python/isaaccapture_egopost/inference/docker/Dockerfile.egohand +++ b/src/python/isaaccapture_egopost/inference/docker/Dockerfile.egohand @@ -58,8 +58,8 @@ RUN python -c "from soma import get_assets_dir; get_assets_dir()" \ COPY egohand /workspace/egohand COPY inference /workspace/inference -# Optional bundled weights. Populated by egohand_inference.sh build --egohand-ckpt /... -# and --hand-detector-weight /... If the files are absent the directory is still +# Optional bundled weights. Populated by egohand_inference.sh build --egohand_ckpt /... +# and --hand_detector_weight /... If the files are absent the directory is still # created (empty), so the COPY is always valid. At run time the volume-mount # paths take precedence; bundled paths are the fallback. COPY weights/ /workspace/weights/ diff --git a/src/python/isaaccapture_egopost/inference/docker/README.md b/src/python/isaaccapture_egopost/inference/docker/README.md index 1449d0ba32..f5e325f6e0 100644 --- a/src/python/isaaccapture_egopost/inference/docker/README.md +++ b/src/python/isaaccapture_egopost/inference/docker/README.md @@ -38,7 +38,7 @@ needs GitHub access, inference does not. The image entrypoint is `inference/scripts/run_egohand_inference_pipeline.py`: RT-DETR hand-bbox detection (on the fly, or read from precomputed JSONs via -`--bbox-dir`) followed by `inference/pipeline/pipeline.py: +`--bbox_dir`) followed by `inference/pipeline/pipeline.py: EgoHandInferencePipeline`, run directly on decoded video frames. ### Build @@ -61,18 +61,18 @@ Weights can be baked into the image so `run` needs fewer flags: ```bash inference/docker/egohand_inference.sh build \ - --egohand-ckpt /path/to/egohand.ckpt \ - --hand-detector-weight /path/to/rtdetr.onnx + --egohand_ckpt /path/to/egohand.ckpt \ + --hand_detector_weight /path/to/rtdetr.onnx ``` | Flag | Effect | | ---- | ------ | -| `--egohand-ckpt ` | Bundle EgoHand checkpoint (see "HuggingFace fallback" below for what happens when omitted) | -| `--hand-detector ` | Which detector the weight is for (default: `rtdetr`, the only option that takes a weight). `saved_bboxes` needs no weight -- bbox detection is precomputed and supplied at run time via `--bbox-dir`; `--hand-detector-weight` is rejected with this value | -| `--hand-detector-weight ` | Bundle detector weight (not needed if every run will use `--bbox-dir`) | +| `--egohand_ckpt ` | Bundle EgoHand checkpoint (see "HuggingFace fallback" below for what happens when omitted) | +| `--hand_detector ` | Which detector the weight is for (default: `rtdetr`, the only option that takes a weight). `saved_bboxes` needs no weight -- bbox detection is precomputed and supplied at run time via `--bbox_dir`; `--hand_detector_weight` is rejected with this value | +| `--hand_detector_weight ` | Bundle detector weight (not needed if every run will use `--bbox_dir`) | Camera intrinsics are never bundled at build time -- always pass -`--intrinsics-json` at `run` time (for both the on-the-fly and `--bbox-dir` +`--intrinsics_json` at `run` time (for both the on-the-fly and `--bbox_dir` paths). This model needs the real calibration to produce correct depth/mesh scale. @@ -82,16 +82,16 @@ scale. inference/docker/egohand_inference.sh run \ --image \ --ckpt /path/to/egohand.ckpt \ - --hand-detector-weight /path/to/rtdetr.onnx \ + --hand_detector_weight /path/to/rtdetr.onnx \ --input /path/to/clip.mp4 \ - --intrinsics-json /path/to/intrinsics.json \ + --intrinsics_json /path/to/intrinsics.json \ --out outputs/inference ``` -`--image`, `--input`, and `--intrinsics-json` are required by this wrapper +`--image`, `--input`, and `--intrinsics_json` are required by this wrapper (fails immediately, before touching Docker, if any is missing). -`--intrinsics-json` is never bundleable at build time (see above) -- always -pass it here. `--ckpt` and `--hand-detector-weight` are optional; see +`--intrinsics_json` is never bundleable at build time (see above) -- always +pass it here. `--ckpt` and `--hand_detector_weight` are optional; see "HuggingFace fallback" below. `--input` accepts a single `.mp4` file or a folder of `.mp4` files; per-video @@ -105,44 +105,44 @@ run `docker run` yourself with `python inference/scripts/run_egohand_inference_p and the mounts in "Mount layout inside the container"; see `inference/scripts/README.md` for the full argument list. -#### Two steps: detect, then reconstruct from saved boxes (`--bbox-dir`) +#### Two steps: detect, then reconstruct from saved boxes (`--bbox_dir`) ```bash # 1. Detect hand bboxes only inference/docker/detector.sh run \ --image \ --input /path/to/clip.mp4 \ - --intrinsics-json /path/to/intrinsics.json \ + --intrinsics_json /path/to/intrinsics.json \ --out /path/to/bboxes # 2. Reconstruct from the saved boxes inference/docker/egohand_inference.sh run \ - --image \ - --ckpt /path/to/egohand.ckpt \ - --input /path/to/clip.mp4 \ - --bbox-dir /path/to/bboxes \ - --intrinsics-json /path/to/intrinsics.json \ - --perspective-cropping \ - --out outputs/inference + --image \ + --ckpt /path/to/egohand.ckpt \ + --input /path/to/clip.mp4 \ + --bbox_dir /path/to/bboxes \ + --intrinsics_json /path/to/intrinsics.json \ + --perspective_cropping \ + --out outputs/inference ``` -`--bbox-dir` skips on-the-fly detection and reads the per-hand bbox JSONs that +`--bbox_dir` skips on-the-fly detection and reads the per-hand bbox JSONs that `detector.sh run` writes. It is mutually exclusive with -`--hand-detector-weight`; no detector weight is loaded. See +`--hand_detector_weight`; no detector weight is loaded. See `inference/hand_detector_2d/scripts/README.md` for the JSON layout. These wrappers run the same pipeline as the host commands, so check the [main README](../../README.md#reconstruct-with-your-own-2d-bboxes) for the -running rules, such as when `--perspective-cropping` is required for saved +running rules, such as when `--perspective_cropping` is required for saved boxes and how camera calibration is used ([camera formats](../../README.md#camera-input-formats)). #### HuggingFace fallback -Checkpoints and detector weights (`--ckpt`, `--hand-detector-weight`, +Checkpoints and detector weights (`--ckpt`, `--hand_detector_weight`, `--weight`) resolve in this order: mounted at run time, bundled at build time, downloaded from Hugging Face. Passing none is not an error; the run only fails -if the download fails. Optionally, pass `--hf-token "$HF_TOKEN"` (either +if the download fails. Optionally, pass `--hf_token "$HF_TOKEN"` (either wrapper) to forward a token as `HF_TOKEN` in the container, e.g. if you hit anonymous rate limits. @@ -150,7 +150,7 @@ anonymous rate limits. The image entrypoint is `inference/hand_detector_2d/scripts/run_hand_detector.py`: RT-DETRv2 hand-bbox detection only -- no EgoHand model, no SOMA, no torch -even loaded. Pairs with `egohand_inference.sh run --bbox-dir` to feed the JSONs +even loaded. Pairs with `egohand_inference.sh run --bbox_dir` to feed the JSONs this produces into a full EgoHand inference run without re-detecting, so detection can be run, reviewed, and cached as its own preprocessing stage. @@ -170,17 +170,17 @@ inference/docker/detector.sh run \ --image \ --input /path/to/clip.mp4 \ --out /path/to/bboxes \ - --intrinsics-json /path/to/intrinsics.json + --intrinsics_json /path/to/intrinsics.json ``` -`--image`, `--input`, `--out`, `--intrinsics-json` are required. `--weight` +`--image`, `--input`, `--out`, `--intrinsics_json` are required. `--weight` is optional (see "HuggingFace fallback" above). Writes `//_{left,right}_bbox.json` -- pass that same -`` path as `--bbox-dir` to a `egohand_inference.sh run`. +`` path as `--bbox_dir` to a `egohand_inference.sh run`. `--tracking` and `--no-tracking` override the shared tracking setting only when passed explicitly; `--no-tracking` also disables bbox smoothing. Use the same -input video and `--intrinsics-json` for both stages; see +input video and intrinsics JSON for both stages; see `inference/hand_detector_2d/scripts/README.md` for camera preprocessing details. ## Mount layout inside the container @@ -188,9 +188,9 @@ input video and `--intrinsics-json` for both stages; see | Flag | Container path | Mode | | ---- | -------------- | ---- | | `--ckpt` | `/workspace/inputs/` | ro | -| `--weight` (`detector.sh`) / `--hand-detector-weight` (`egohand_inference.sh`) | `/workspace/inputs/` | ro | -| `--intrinsics-json` (either wrapper) | `/workspace/inputs/` | ro | -| `--bbox-dir` (`egohand_inference.sh`) | `/workspace/inputs/bbox` | ro | +| `--weight` (`detector.sh`) / `--hand_detector_weight` (`egohand_inference.sh`) | `/workspace/inputs/` | ro | +| `--intrinsics_json` (either wrapper) | `/workspace/inputs/` | ro | +| `--bbox_dir` (`egohand_inference.sh`) | `/workspace/inputs/bbox` | ro | | `--input` (file) | `/workspace/inputs/video/` | ro | | `--input` (folder) | `/workspace/inputs/video` | ro | | `--out` | `/workspace/outputs/bbox` (`detector.sh`) or `/workspace/outputs/inference` (`egohand_inference.sh`) | rw | diff --git a/src/python/isaaccapture_egopost/inference/docker/detector.sh b/src/python/isaaccapture_egopost/inference/docker/detector.sh index e32a6fd6eb..9446eed893 100755 --- a/src/python/isaaccapture_egopost/inference/docker/detector.sh +++ b/src/python/isaaccapture_egopost/inference/docker/detector.sh @@ -4,7 +4,7 @@ # Local helper for building and running the standalone RT-DETRv2 bbox-detector # Docker image (inference/docker/Dockerfile.detector). Detection only -- no EgoHand -# model, no SOMA. Pair with egohand_inference.sh's --bbox-dir to feed the JSONs +# model, no SOMA. Pair with egohand_inference.sh's --bbox_dir to feed the JSONs # this produces into a full EgoHand inference run without re-detecting. # Run from the EgoHand repo root, or any subdirectory -- the script locates the root itself. # Run with no arguments for usage. @@ -34,13 +34,13 @@ usage: inference/docker/detector.sh [args] pass --weight at run time, or omit both to resolve via HF (nvidia/RT-DETR-Hand-Detector-v1) instead. - run --image --input --out --intrinsics-json [options] + run --image --input --out --intrinsics_json [options] Run inference/hand_detector_2d/scripts/run_hand_detector.py through the image entrypoint: bbox detection only, written as //_{left,right}_bbox.json -- the layout - egohand_inference.sh run --bbox-dir expects. + egohand_inference.sh run --bbox_dir expects. - Use the same input video and --intrinsics-json for the paired + Use the same input video and intrinsics JSON for the paired egohand_inference.sh run. This wrapper uses the detector's default pixel-aspect rectification and does not expose a switch to disable it. For standard pinhole cropping, match both passes' pixel-aspect settings @@ -53,10 +53,10 @@ usage: inference/docker/detector.sh [args] --image Docker image name/tag to run. Required. --input A video file, or a folder of .mp4 files; mounted read-only. --out Output dir for bbox JSONs. Required. - --intrinsics-json + --intrinsics_json Camera intrinsics JSON, mounted read-only. Required -- must match the paired egohand_inference.sh run's - --intrinsics-json (see above). + --intrinsics_json (see above). --weight RT-DETRv2 ONNX weight, mounted read-only. Not required if the image was built with --weight -- and if neither is given, resolved via HF (nvidia/RT-DETR-Hand-Detector-v1) @@ -66,9 +66,9 @@ usage: inference/docker/detector.sh [args] Override tracking from the shared rtdetr_docker.yaml (currently on). --no-tracking also disables bbox smoothing. --device Torch-style device, e.g. cuda:1 or cpu. Default: cuda. - --max-seconds Only process the first N seconds. - --frame-batch-size Frames decoded into RAM at once. Default: 2000. - --hf-token Optional. Forwarded as HF_TOKEN in the container + --max_seconds Only process the first N seconds. + --frame_batch_size Frames decoded into RAM at once. Default: 2000. + --hf_token Optional. Forwarded as HF_TOKEN in the container for authenticated HF downloads (e.g. higher rate limits). Not needed for normal runs. EOF @@ -133,15 +133,15 @@ case "$cmd" in --image) IMAGE="$2"; shift 2 ;; --input) INPUT="$2"; shift 2 ;; --out) OUT="$2"; shift 2 ;; - --intrinsics-json) INTRINSICS_JSON="$2"; shift 2 ;; + --intrinsics_json) INTRINSICS_JSON="$2"; shift 2 ;; --weight) WEIGHT="$2"; shift 2 ;; --hand) HAND="$2"; shift 2 ;; --tracking) TRACKING="true"; shift 1 ;; --no-tracking) TRACKING="false"; shift 1 ;; --device) DEVICE="$2"; shift 2 ;; - --max-seconds) MAX_SECONDS="$2"; shift 2 ;; - --frame-batch-size) FRAME_BATCH_SIZE="$2"; shift 2 ;; - --hf-token) HF_TOKEN_ARG="$2"; shift 2 ;; + --max_seconds) MAX_SECONDS="$2"; shift 2 ;; + --frame_batch_size) FRAME_BATCH_SIZE="$2"; shift 2 ;; + --hf_token) HF_TOKEN_ARG="$2"; shift 2 ;; *) echo "unknown arg: $1" >&2; usage ;; esac done @@ -151,7 +151,7 @@ case "$cmd" in [[ -e "$INPUT" ]] || die "input not found: $INPUT" [[ -n "$OUT" ]] || die "--out is required" [[ -n "$INTRINSICS_JSON" ]] \ - || die "--intrinsics-json is required -- must match the paired egohand_inference.sh run's --intrinsics-json, or the boxes land on the wrong pixels (see usage)" + || die "--intrinsics_json is required -- must match the paired egohand_inference.sh run's --intrinsics_json, or the boxes land on the wrong pixels (see usage)" [[ -f "$INTRINSICS_JSON" ]] || die "intrinsics JSON not found: $INTRINSICS_JSON" [[ "$HAND" == "left" || "$HAND" == "right" || "$HAND" == "both" ]] \ || die "--hand must be left, right, or both (got: $HAND)" diff --git a/src/python/isaaccapture_egopost/inference/docker/egohand_inference.sh b/src/python/isaaccapture_egopost/inference/docker/egohand_inference.sh index 3b7014f299..668e61454e 100755 --- a/src/python/isaaccapture_egopost/inference/docker/egohand_inference.sh +++ b/src/python/isaaccapture_egopost/inference/docker/egohand_inference.sh @@ -31,63 +31,63 @@ usage() { cat >&2 < [args] - build [--egohand-ckpt ] [--hand-detector-weight ] + build [--egohand_ckpt ] [--hand_detector_weight ] Build the named Docker image from inference/docker/Dockerfile.egohand, with the source baked in. First build: ~15 min (pip deps). Re-builds after source-only changes: <1 min (the pip layer is cached; only COPY layers re-run). Docker image name/tag to build. Required. - --egohand-ckpt Bundle an EgoHand checkpoint into the image at + --egohand_ckpt Bundle an EgoHand checkpoint into the image at $C_EGOHAND_CKPT_BUNDLED. Optional — if omitted, pass --ckpt at run time, or omit both to resolve via HF (nvidia/EgoHand-v1) instead. - --hand-detector + --hand_detector Which detector the bundled weight is for (default: rtdetr, only option). Determines the container path: rtdetr → $C_RTDETR_CKPT_BUNDLED. saved_bboxes needs no detector weight (bbox detection is precomputed and supplied at run - time via --bbox-dir); --hand-detector-weight + time via --bbox_dir); --hand_detector_weight is rejected with this value. - --hand-detector-weight Bundle the hand detector weight into the + --hand_detector_weight Bundle the hand detector weight into the image. Optional — if omitted, pass - --hand-detector-weight at run time, or omit + --hand_detector_weight at run time, or omit both to resolve via HF (nvidia/RT-DETR-Hand-Detector-v1) instead. - run --image --input --intrinsics-json [--ckpt ] [options] + run --image --input --intrinsics_json [--ckpt ] [options] Run EgoHand hand inference through the image entrypoint, inference/scripts/run_egohand_inference_pipeline.py — hand bbox detection feeding inference/pipeline/pipeline.py:EgoHandInferencePipeline. --image Docker image name/tag to run. Required. --ckpt EgoHand hand checkpoint (.ckpt), mounted read-only. - Not required if the image was built with --egohand-ckpt. + Not required if the image was built with --egohand_ckpt. If neither is given, resolved via HF (nvidia/EgoHand-v1) at run time. --input a video file, or a folder of .mp4 files; mounted read-only. - --hand-detector Hand detector backend: rtdetr (default, only option). - Ignored if --bbox-dir is passed. - --hand-detector-weight Detector weight file (.onnx for rtdetr), mounted read-only. - Not required if the image was built with --hand-detector-weight. + --hand_detector Hand detector backend: rtdetr (default, only option). + Ignored if --bbox_dir is passed. + --hand_detector_weight Detector weight file (.onnx for rtdetr), mounted read-only. + Not required if the image was built with --hand_detector_weight. If neither is given, resolved via HF (nvidia/RT-DETR-Hand-Detector-v1) at run time. - Rejected together with --bbox-dir. - --bbox-dir Skip on-the-fly bbox detection and read precomputed + Rejected together with --bbox_dir. + --bbox_dir Skip on-the-fly bbox detection and read precomputed per-hand bbox JSONs instead, mounted read-only. Layout must match inference/hand_detector_2d/scripts/ run_hand_detector.py's --output_dir: //_{left,right}_bbox.json. A saved_bboxes detector config pointing at the mounted path is generated per run (detector_backend: saved_bboxes). - --intrinsics-json Required by this wrapper. Camera intrinsics JSON, mounted + --intrinsics_json Required by this wrapper. Camera intrinsics JSON, mounted read-only. This model needs the real calibration to produce correct depth/mesh scale. - --perspective-cropping Create hand crops directly from the source camera. - Required with --bbox-dir for distorted calibration. + --perspective_cropping Create hand crops directly from the source camera. + Required with --bbox_dir for distorted calibration. Default: off (undistort full frames before cropping). - --hf-token Optional. Forwarded as HF_TOKEN in the container + --hf_token Optional. Forwarded as HF_TOKEN in the container for authenticated HF downloads (e.g. higher rate limits). Not needed for normal runs. --out Output dir (default: outputs/inference). Per-video results @@ -113,16 +113,16 @@ case "$cmd" in HAND_DETECTOR_PATH="" while [[ $# -gt 0 ]]; do case "$1" in - --egohand-ckpt) EGOHAND_CKPT_PATH="$2"; shift 2 ;; - --hand-detector) HAND_DETECTOR="$2"; shift 2 ;; - --hand-detector-weight) HAND_DETECTOR_PATH="$2"; shift 2 ;; + --egohand_ckpt) EGOHAND_CKPT_PATH="$2"; shift 2 ;; + --hand_detector) HAND_DETECTOR="$2"; shift 2 ;; + --hand_detector_weight) HAND_DETECTOR_PATH="$2"; shift 2 ;; *) echo "unknown build arg: $1" >&2; usage ;; esac done [[ "$HAND_DETECTOR" == "rtdetr" || "$HAND_DETECTOR" == "saved_bboxes" ]] \ - || die "--hand-detector must be rtdetr or saved_bboxes (got: $HAND_DETECTOR)" + || die "--hand_detector must be rtdetr or saved_bboxes (got: $HAND_DETECTOR)" [[ "$HAND_DETECTOR" != "saved_bboxes" || -z "$HAND_DETECTOR_PATH" ]] \ - || die "--hand-detector-weight is not applicable with --hand-detector saved_bboxes (bbox detection is precomputed, no detector weight is loaded)" + || die "--hand_detector_weight is not applicable with --hand_detector saved_bboxes (bbox detection is precomputed, no detector weight is loaded)" BUILD_CTX="$(mktemp -d)" trap 'rm -rf "$BUILD_CTX"' EXIT @@ -173,12 +173,12 @@ case "$cmd" in --image) IMAGE="$2"; shift 2 ;; --ckpt) CKPT="$2"; shift 2 ;; --input) INPUT="$2"; shift 2 ;; - --hand-detector) HAND_DETECTOR="$2"; shift 2 ;; - --hand-detector-weight) HAND_DETECTOR_WEIGHT="$2"; shift 2 ;; - --bbox-dir) BBOX_DIR_PATH="$2"; shift 2 ;; - --intrinsics-json) INTRINSICS_JSON="$2"; shift 2 ;; - --perspective-cropping) CROP_ARGS=(--perspective_cropping); shift ;; - --hf-token) HF_TOKEN_ARG="$2"; shift 2 ;; + --hand_detector) HAND_DETECTOR="$2"; shift 2 ;; + --hand_detector_weight) HAND_DETECTOR_WEIGHT="$2"; shift 2 ;; + --bbox_dir) BBOX_DIR_PATH="$2"; shift 2 ;; + --intrinsics_json) INTRINSICS_JSON="$2"; shift 2 ;; + --perspective_cropping) CROP_ARGS=(--perspective_cropping); shift ;; + --hf_token) HF_TOKEN_ARG="$2"; shift 2 ;; --out) OUT="$2"; shift 2 ;; *) echo "unknown arg: $1" >&2; usage ;; esac @@ -187,13 +187,13 @@ case "$cmd" in [[ -n "$IMAGE" ]] || die "--image is required" [[ -n "$INPUT" ]] || die "--input is required" [[ -e "$INPUT" ]] || die "input not found: $INPUT" - # --intrinsics-json is required -- the model needs the real calibration to produce correct depth/mesh scale + # --intrinsics_json is required -- the model needs the real calibration to produce correct depth/mesh scale [[ -n "$INTRINSICS_JSON" ]] \ - || die "--intrinsics-json is required -- the model needs the real calibration to produce correct depth/mesh scale" + || die "--intrinsics_json is required -- the model needs the real calibration to produce correct depth/mesh scale" [[ "$HAND_DETECTOR" == "rtdetr" ]] \ - || die "--hand-detector must be rtdetr (got: $HAND_DETECTOR)" + || die "--hand_detector must be rtdetr (got: $HAND_DETECTOR)" [[ -z "$BBOX_DIR_PATH" || -z "$HAND_DETECTOR_WEIGHT" ]] \ - || die "--bbox-dir and --hand-detector-weight are mutually exclusive (--bbox-dir skips detection entirely, so no detector weight is loaded)" + || die "--bbox_dir and --hand_detector_weight are mutually exclusive (--bbox_dir skips detection entirely, so no detector weight is loaded)" INPUT="$(realpath "$INPUT")" OUT="$(realpath -m "$OUT")" @@ -205,7 +205,7 @@ case "$cmd" in RUN_HAND_DETECTOR_CKPT="" # Mount EgoHand checkpoint if provided; else use it if the image was built - # with --egohand-ckpt; else leave RUN_EGOHAND_CKPT empty and omit --egohand_ckpt + # with --egohand_ckpt; else leave RUN_EGOHAND_CKPT empty and omit --egohand_ckpt # entirely, so run_egohand_inference_pipeline.py falls back to its own HF # auto-download (nvidia/EgoHand-v1) instead of failing on a bundled # path that was never populated. @@ -233,11 +233,11 @@ case "$cmd" in fi # Mount hand detector weight if provided; else use it if the image was - # built with --hand-detector-weight; else leave RUN_HAND_DETECTOR_CKPT + # built with --hand_detector_weight; else leave RUN_HAND_DETECTOR_CKPT # empty, which leaves the generated config's weights: blank (null) -- # inference/hand_detector_2d/configs/rtdetr.py falls back to HF # (nvidia/RT-DETR-Hand-Detector-v1) when weights is unset. Skipped - # entirely for --bbox-dir runs, which never load a detector weight. + # entirely for --bbox_dir runs, which never load a detector weight. if [[ -z "$BBOX_DIR_PATH" ]]; then if [[ -n "$HAND_DETECTOR_WEIGHT" ]]; then [[ -f "$HAND_DETECTOR_WEIGHT" ]] || die "hand detector weight not found: $HAND_DETECTOR_WEIGHT" @@ -286,7 +286,7 @@ case "$cmd" in # other fields set there (score_thr, padding, tracking, ...) stay in sync # automatically; only the bundled weight path is overridden. Using the # static file directly, unmodified, would silently ignore a - # --hand-detector-weight override -- it always points at + # --hand_detector_weight override -- it always points at # $C_RTDETR_CKPT_BUNDLED. When RUN_HAND_DETECTOR_CKPT is empty (neither # mounted nor bundled), this substitutes an empty value, leaving # weights: blank (null) so rtdetr.py's config builder falls back to HF.