mocapgod/setup_hsmr.sh
type-two f8037f7b85 Lane B / session-5 item 1: durable-ize the ARM engine fixes into git
The torchvision detector drop-in, headless pyrender/OpenGL shims, and the
detector+smoke tests existed only on ultra's disk inside gitignored .engine/.
Captured byte-identical copies into engine_patches/ (mirrors the HSMR subtree)
and moved setup_hsmr.sh to the repo root (tracked, path-relative) with a
--patch step that overlays them onto the clone.

Acceptance PASSED: fresh shallow clone of HSMR in a temp dir + './setup_hsmr.sh
--patch' + validated venv -> test_detector.py green (7/7 demo imgs, 15 patches),
no hand edits. A re-clone can no longer silently drop the ARM fixes.

Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
2026-07-17 09:34:39 +10:00

88 lines
3.7 KiB
Bash
Executable File

#!/bin/bash
# HSMR pose-engine install on Apple Silicon (MPS) — Path B (local HSMR/SKEL).
# Clone -> uv venv(3.10) -> deps -> ungated weights -> apply engine_patches/ -> STOP at SKEL gate.
#
# ./setup_hsmr.sh full install (re-runnable; STOPS at the SKEL download gate)
# ./setup_hsmr.sh --patch re-apply engine_patches/ onto an existing clone and exit
#
# engine_patches/ holds our ARM/headless fixes (torchvision detector drop-in, headless
# pyrender/OpenGL shims, smoke + detector tests). HSMR itself is gitignored under .engine/,
# so a re-clone would drop those fixes — this script restores them. Override the clone
# location with HSMR_DIR=... (used by the durability test against a temp clone).
#
# ponytail: no `set -e` — optional deps (detectron2/chumpy/render) WARN and we still want the
# env + weights down so the smoke test can run and any failure is diagnosable.
set -uo pipefail
REPO="$(cd "$(dirname "$0")" && pwd)"
ENGINE="$REPO/.engine"
HSMR="${HSMR_DIR:-$ENGINE/HSMR}"
PATCHES="$REPO/engine_patches"
LOG="$ENGINE/setup.log"
JOB="$HOME/.jobs/hsmr_setup"
apply_patches(){
[ -d "$HSMR" ] || { echo "no HSMR clone at $HSMR — clone first"; exit 1; }
[ -d "$PATCHES" ] || { echo "no engine_patches/ at $PATCHES"; exit 1; }
( cd "$PATCHES" && find . -type f ! -name '.DS_Store' ) | sed 's|^\./||' | while read -r f; do
mkdir -p "$HSMR/$(dirname "$f")"
cp "$PATCHES/$f" "$HSMR/$f"
echo " patched $f"
done
}
# Standalone re-apply (after a manual HSMR re-clone).
if [ "${1:-}" = "--patch" ]; then
echo ">>> applying engine_patches/ -> $HSMR"
apply_patches
echo "patches applied."
exit 0
fi
mkdir -p "$ENGINE" "$HOME/.jobs"
exec > >(tee -a "$LOG") 2>&1
hb(){ echo "$(date +%s) $*" > "$JOB"; echo ">>> [$(date +%H:%M:%S)] $*"; }
hb "clone HSMR + submodules (SKEL)"
if [ ! -d "$HSMR/.git" ]; then
git clone --recurse-submodules https://github.com/IsshikiHugh/HSMR "$HSMR" || { hb "FAIL clone"; exit 1; }
else
git -C "$HSMR" submodule update --init || true
fi
cd "$HSMR" || { hb "FAIL cd"; exit 1; }
hb "uv venv python 3.10"
uv venv --python 3.10 .venv || { hb "FAIL venv"; exit 1; }
source .venv/bin/activate
hb "install torch + torchvision (MPS wheel)"
uv pip install torch torchvision || { hb "FAIL torch"; exit 1; }
hb "install requirements.txt"
uv pip install -r requirements.txt || hb "WARN requirements had issues"
hb "pin numpy<2 (chumpy/detectron2/smplx need 1.x)"
uv pip install "numpy==1.26.4"
# detectron2/chumpy are NOT needed — engine_patches replaces the detector and the SKEL runtime
# loads pkls without chumpy (see docs/B_ENGINE_SETUP.md). Left out on purpose; they don't build on ARM.
hb "pip install -e HSMR + thirdparty/SKEL"
uv pip install -e . || hb "WARN pip -e . failed"
uv pip install -e thirdparty/SKEL || hb "WARN SKEL editable install failed"
hb "download UNGATED weights from HuggingFace (regressors + HSMR ckpt + ViTPose backbone)"
hf download IsshikiHugh/HSMR-data_inputs \
--include "body_models/SMPL_to_J19.pkl" "body_models/J_regressor_SKEL_mix_MALE.pkl" "body_models/J_regressor_SMPL_MALE.pkl" "released_models/HSMR-ViTH-r1d1.tar.gz" "backbone/vitpose_backbone.pth" \
--local-dir data_inputs || hb "WARN hf download issue"
if [ -f data_inputs/released_models/HSMR-ViTH-r1d1.tar.gz ]; then
hb "extract HSMR checkpoint"
tar -xzf data_inputs/released_models/HSMR-ViTH-r1d1.tar.gz -C data_inputs/released_models/ && rm -f data_inputs/released_models/HSMR-ViTH-r1d1.tar.gz
fi
mkdir -p data_inputs/body_models/skel
hb "apply engine_patches/ (ARM detector, headless shims, tests)"
apply_patches
hb "DONE-ENV — SKEL gate: John drops skel_models_v1.1/ (v1.1.1) into data_inputs/body_models/skel/"
echo "=== pip freeze (key) ===" ; uv pip freeze | grep -iE 'torch|numpy|smplx|pytorch-lightning|timm' || true