dicom_series_to_volume
Objectif
- Utilisé pour convertir un dossier de série DICOM CT en un volume NIfTI HU avec preuve d'affine. Non destiné aux DICOM multi-frame ou à un usage clinique.
- Utiliser le wrapper exactement comme documenté ; ne pas remplacer le point d'entrée upstream par une implémentation écrite à la main.
- Manifest I/O : les entrées sont
dicom_dir; les sorties sontnifti_volumeetresult_json.
Instructions
- Lire
skill_manifest.yamlavant de modifier les arguments, les effets de bord ou les portes de validation. - Exécuter
scripts/series_to_volume.pyvia la commande documentée ci-dessous ; garder les sorties dans un répertoire d'exécution fourni par l'appelant. - Si un agent hôte expose
run_script, utiliserrun_script("scripts/series_to_volume.py", args=[...]); sinon exécuter la commande Bash/Python affichée ci-dessous. - Vérifier le JSON émis et le vérificateur
dicom_volume_quality_v1associé avant de traiter l'exécution comme preuve.
Scripts Disponibles
| Script | Objectif | Arguments |
|---|---|---|
scripts/series_to_volume.py |
Point d'entrée principal déclaré par skill_manifest.yaml. | PATH_TO_DICOM_DIR [--output OUT.nii.gz] |
Prérequis
- Exigences runtime : packages Python listés dans
runtime.side_effects.pip_packages. - Exécuter les commandes depuis la racine du repository sauf indication contraire ci-dessous.
Limitations
- Série unique uniquement ; l'entrée multi-série est rejetée en préflight.
- DICOM multi-frame (NumberOfFrames > 1 par fichier) non supporté.
- Syntaxes de transfert compressées (JPEG / JPEG2000 / RLE) non supportées.
- Pas de réorientation de voxels. L'affine est dérivée des en-têtes DICOM et représentée en coordonnées NIfTI/RAS ; une porte en aval (p. ex. expected_axcodes) est attendue pour asserter l'orientation avant que ce volume ne soit alimenté à un modèle de segmentation.
- Non destiné au déploiement clinique, au diagnostic autonome, à la soumission réglementaire, à l'inférence en production (utiliser un convertisseur vérifié tel que dcm2niix pour cela).
Dépannage
| Erreur | Cause | Correction |
|---|---|---|
| Dépendance manquante ou erreur d'import | Dérive du package runtime par rapport à skill_manifest.yaml. |
Installer les packages déclarés dans le manifest ou utiliser la commande de configuration documentée. |
| Sortie vide ou invalide selon le schéma | Mauvais chemin d'entrée, modalité non supportée ou défaillance upstream. | Réexécuter avec une fixture connue et inspecter le JSON du wrapper plus stderr. |
| Défaillance de la porte de validation | La sortie a violé un invariant d'ingénierie déclaré. | Conserver le pack de preuve défaillant et utiliser le message de la porte pour réparer les entrées ou le code du wrapper. |
Lit une série DICOM, trie les coupes par ImagePositionPatient, applique RescaleSlope et RescaleIntercept, construit une affine à partir des balises d'orientation et d'espacement, et écrit un .nii.gz plus un résumé JSON.
python scripts/series_to_volume.py PATH_TO_DICOM_DIR --output PATH_TO_OUT.nii.gz
Pour une exécution fiable avec le vérificateur associé :
python -m eval_engine.run_trusted skills/dicom-series-to-volume \
--fixture PATH_TO_DICOM_DIR \
--out runs/dicom_series_to_volume_trusted
Champs de sortie clés : n_slices, series_instance_uid, output.path, output.shape, output.spacing, output.axcodes, output.affine, hu_range, et runtime.conversion_seconds.
Limites de portée : CT à série unique uniquement ; pas de DICOM multi-frame, gestion de syntaxe de transfert compressée, jeux de structures RT, réorientation automatique ou usage clinique.