i4h-catheter-navigation-digital-twin

Par nvidia · skills

Construire un jumeau numérique de la vasculature d'un patient à partir d'un CT (prétraitement + segmentation). À utiliser lorsqu'on demande de prétraiter un CT, segmenter les vaisseaux, extraire la ligne centrale, ou préparer le `ct_cache` pour le viewport/DRR.

npx skills add https://github.com/nvidia/skills --skill i4h-catheter-navigation-digital-twin

i4h Catheter Navigation - Digital Twin

Purpose

Télécharger ou localiser un volume CT, le prétraiter en cache d'atténuation, et segmenter l'arbre artériel en masque vasculaire + centerline - le jumeau numérique de la vasculature nécessaire pour les exécutions de viewport et DRR spécifiques au patient.

Base Code

ROOT="${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>/dev/null)}"
if [ ! -d "$ROOT/workflows/catheter_navigation" ]; then
  ROOT="${I4H_WORKFLOWS:-$HOME/i4h-workflows}"
  [ -d "$ROOT/workflows/catheter_navigation" ] || git clone https://github.com/isaac-for-healthcare/i4h-workflows "$ROOT"
fi
export I4H_WORKFLOWS="$ROOT"; cd "$ROOT"

Basics

  • Disposition du cache de sortie : --output-dir / --ct-dir (par ex. /tmp/ct_cache) contient mu_volume.npy, metadata.json, et après segmentation les artefacts du masque vasculaire + centerline.
  • Les sujets CTA rehaussés au contraste fonctionnent au mieux ; le petit sous-ensemble de TotalSegmentator (~3,2 GB) est le dataset public documenté.
  • Respecter la licence du dataset ; aucune donnée patient n'est validée dans le repository.

Run

Exécutez les étapes ci-dessous dans l'ordre. Chaque étape est un appel bash séparé ; les variables persistent dans la session tmux de l'agent local.

Step 1 - resolve paths

REPO_ROOT="${I4H_WORKFLOWS:-$(git rev-parse --show-toplevel 2>/dev/null)}"; [ -d "$REPO_ROOT/workflows/catheter_navigation" ] || REPO_ROOT="$HOME/i4h-workflows"
WF_ROOT="${REPO_ROOT}/workflows/catheter_navigation"
RUN_DIR="${WF_ROOT}/runs/digital_twin_$(date +%Y%m%d_%H%M%S)"
mkdir -p "${RUN_DIR}/logs"
ln -sfn "${RUN_DIR}" "${WF_ROOT}/runs/.latest"

# Répertoire sujet fourni par l'utilisateur ou téléchargé (doit contenir ct.nii.gz + segmentations/)
SUBJ="${SUBJ:-}"
CACHE="${CACHE:-/tmp/ct_cache}"

if [ -z "${SUBJ}" ] || [ ! -f "${SUBJ}/ct.nii.gz" ]; then
  echo "digital-twin: set SUBJ to an extracted TotalSegmentator subject (got '${SUBJ:-<unset>}')." >&2
  echo "Example: SUBJ=/path/to/Totalsegmentator_dataset_small_v201/s0011" >&2
  exit 1
fi

Step 2 - download dataset (skip if SUBJ already exists)

Exécutez uniquement si l'utilisateur n'a pas encore de données CT.

curl -L "https://www.dropbox.com/scl/fi/pee5yxebfxrhz007cbuy5/Totalsegmentator_dataset_small_v201.zip?rlkey=osvfk02jc4lw5gr6uhrldtb9e&dl=1" \
  -o "${RUN_DIR}/Totalsegmentator_dataset_small_v201.zip"
unzip "${RUN_DIR}/Totalsegmentator_dataset_small_v201.zip" -d "${RUN_DIR}/Totalsegmentator_dataset_small_v201"
ls "${RUN_DIR}/Totalsegmentator_dataset_small_v201"
# Puis définissez SUBJ sur un sujet extrait avant de continuer.

Step 3 - preprocess CT

"${REPO_ROOT}/i4h" run catheter_navigation preprocess_ct --local \
  --run-args="--nifti ${SUBJ}/ct.nii.gz --output-dir ${CACHE} --save-hu" \
  2>&1 | tee "${RUN_DIR}/logs/preprocess_ct.log"

Step 4 - segment vessels

"${REPO_ROOT}/i4h" run catheter_navigation segment_vessels --local \
  --run-args="--ct-dir ${CACHE} --ts-gt-dir ${SUBJ}/segmentations" \
  2>&1 | tee "${RUN_DIR}/logs/segment_vessels.log"

Verify

test -f "${CACHE}/mu_volume.npy"
test -f "${CACHE}/metadata.json"
ls -la "${CACHE}"

Notes

  • SUBJ doit pointer vers un sujet extrait avec ct.nii.gz et segmentations/ (disposition TotalSegmentator).
  • CACHE est réutilisé par [[i4h-catheter-navigation-viewport]] et [[i4h-catheter-navigation-render-drr]] basé sur cache.
  • La segmentation est mixte CPU/GPU et peut prendre plusieurs minutes selon la taille du volume.

Prerequisites

  • [[i4h-catheter-navigation-setup]] completed (imports et CLI fonctionnent).
  • Un CT NIfTI et des segmentations vasculaires correspondantes (ou sujet TotalSegmentator).
  • = 32 GB RAM recommandé pour les gros volumes.

Limitations

  • Ne livre pas de données ; l'utilisateur doit télécharger ou fournir son propre CT.
  • Le miroir Zenodo est limité en débit ; préférez l'URL Dropbox dans l'étape 2.

Troubleshooting

  • Error : SUBJ non défini ou ct.nii.gz manquant - Fix : téléchargez le dataset de l'étape 2 ou définissez SUBJ sur un chemin sujet existant.
  • Error : segment_vessels échoue sur --ts-gt-dir - Fix : confirmez que ${SUBJ}/segmentations existe (vérité terrain TotalSegmentator).
  • Error : mémoire insuffisante pendant le prétraitement - Fix : utilisez un sujet plus petit ou augmentez la swap ; fermez d'autres charges GPU/CPU.

Final Response

Rapportez le chemin CACHE, les artefacts clés présents, les chemins de logs sous RUN_DIR, et recommandez [[i4h-catheter-navigation-viewport]] ou [[i4h-catheter-navigation-render-drr]] ensuite.

Skills similaires