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) contientmu_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
SUBJdoit pointer vers un sujet extrait avecct.nii.gzetsegmentations/(disposition TotalSegmentator).CACHEest 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 :
SUBJnon défini ouct.nii.gzmanquant - Fix : téléchargez le dataset de l'étape 2 ou définissezSUBJsur un chemin sujet existant. - Error : segment_vessels échoue sur
--ts-gt-dir- Fix : confirmez que${SUBJ}/segmentationsexiste (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.