Comment créer un profil d'anonymisation DICOM personnalisé à partir de CSV, JSON ou XML
Ce tutoriel montre comment créer des profils d’anonymisation personnalisés DICOM en utilisant des fichiers CSV, JSON ou XML en C#. Les profiles personnalizés vous permettent de définir exactement quels tags doivent être supprimés, remplacés ou conservés selon les politiques de confidentialité spécifiques de votre institution.
Pourquoi créer des profils personnalisés ?
Les profils DICOM PS3.15 prédéfinis peuvent ne pas répondre à toutes les exigences institutionnelles.
- Retenir des identifiants institutionnels spécifiques pour la traçabilité interne
- Appliquer les règles de confidentialité spécifiques à l’organisation
- Respecter les exigences réglementaires uniques dans votre juridiction
Les actions expliquées
Les actions suivantes peuvent être appliquées aux tags DICOM:
| Action | Code | Description |
|---|---|---|
| Supprimer | D | Supprimer complètement l’étiquette des données |
| zero | Z | Remplacer la valeur par une valeur vide ou zéro |
| Supprimer | X | Supprimer si présent (comme supprimé) |
| Keep | K | Conserver la valeur originale inchangée |
| Clean | C | Nettoyer la valeur en supprimant les informations d’identification |
| Remplacer par UID | U | Remplacer par un nouveau UID généré |
Étiquette : Préparer l’environnement
- Configurez Visual Studio ou tout IDE .NET compatible.
- Créer un nouveau projet d’application pour la console .NET 8.
- Installez Aspose.Medical à partir du NuGet Package Manager.
- Préparez votre fichier de définition de profil personnalisé.
Guide pas à pas pour créer des profils personnalisés
Étape 1 : Installer Aspose.Medical
Ajoutez la bibliothèque Aspose.Medical à votre projet en utilisant NuGet.
Install-Package Aspose.MedicalÉtape 2 : Créer un profil CSV
Créez un fichier CSV avec des modèles et des actions de tag. Chaque ligne spécifie un tag et son action.
- Profile.csv : *
TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0010,0030);X
(0010,0040);K
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0080);D
(0008,0081);D
(0008,1030);C<button class=“hextra-code-copy-btn hx-group/copybtn hx-transition-all active:hx-opacity-50 hx-bg-primary-700/5 hx-border hx-border-black/5 hx-text-gray-600 hover:hx-text-gray-900 hx-rounded-md hx-p-1.5 dark:hx-bg-primary-300/10 dark:hx-border-white/10 dark:hx-text-gray-400 dark:hover:hx-text-gray-50” title=“Copier le code”
<div class="copy-icon group-[.copied]/copybtn:hx-hidden hx-pointer-events-none hx-h-4 hx-w-4"></div>
<div class="success-icon hx-hidden group-[.copied]/copybtn:hx-block hx-pointer-events-none hx-h-4 hx-w-4"></div>
Ce profil :
- Nom et identifiant du patient Zeros
- Supprimer la date de naissance
- Le sexe patient
- Remplacer l’étude, la série et le SOP Instance UID
- Supprimer les informations institutionnelles
- Description de l’étude de Cleans
Étape 3 : Créer une définition de profil JSON (alternative)
Créer un fichier JSON avec les mêmes définitions de tag.
- Profile.json : *
[
{ "TagPattern": "(0010,0010)", "Action": "Z" },
{ "TagPattern": "(0010,0020)", "Action": "Z" },
{ "TagPattern": "(0010,0030)", "Action": "X" },
{ "TagPattern": "(0010,0040)", "Action": "K" },
{ "TagPattern": "(0020,000D)", "Action": "U" },
{ "TagPattern": "(0020,000E)", "Action": "U" },
{ "TagPattern": "(0008,0018)", "Action": "U" },
{ "TagPattern": "(0008,0080)", "Action": "D" },
{ "TagPattern": "(0008,0081)", "Action": "D" },
{ "TagPattern": "(0008,1030)", "Action": "C" }
]Étape 4 : Créer une définition de profil XML (alternative)
Créer un fichier XML avec les mêmes définitions de tag.
- Le profil xml : *
<?xml version="1.0" encoding="utf-8"?>
<ConfidentialityProfile>
<TagAction TagPattern="(0010,0010)" Action="Z" />
<TagAction TagPattern="(0010,0020)" Action="Z" />
<TagAction TagPattern="(0010,0030)" Action="X" />
<TagAction TagPattern="(0010,0040)" Action="K" />
<TagAction TagPattern="(0020,000D)" Action="U" />
<TagAction TagPattern="(0020,000E)" Action="U" />
<TagAction TagPattern="(0008,0018)" Action="U" />
<TagAction TagPattern="(0008,0080)" Action="D" />
<TagAction TagPattern="(0008,0081)" Action="D" />
<TagAction TagPattern="(0008,1030)" Action="C" />
</ConfidentialityProfile>Étape 5: Téléchargez le profil personnalisé
Téléchargez le profil personnalisé en utilisant la méthode appropriée pour votre format de fichier.
using Aspose.Medical.Dicom.Anonymization;
// Load from CSV
ConfidentialityProfile profileFromCsv = ConfidentialityProfile.LoadFromCsvFile(
"profile.csv",
ConfidentialityProfileOptions.All
);
// Or load from JSON
ConfidentialityProfile profileFromJson = ConfidentialityProfile.LoadFromJsonFile(
"profile.json",
ConfidentialityProfileOptions.All
);
// Or load from XML
ConfidentialityProfile profileFromXml = ConfidentialityProfile.LoadFromXmlFile(
"profile.xml",
ConfidentialityProfileOptions.All
);Étape 6 : Appliquer le profil personnalisé
Créez un Anonymiser avec le profil chargé et appliquez-le aux fichiers DICOM.
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Anonymization;
// Load custom profile
ConfidentialityProfile profile = ConfidentialityProfile.LoadFromCsvFile(
"profile.csv",
ConfidentialityProfileOptions.All
);
// Create anonymizer with custom profile
Anonymizer anonymizer = new(profile);
// Load and anonymize DICOM file
DicomFile dcm = DicomFile.Open("patient_study.dcm");
DicomFile anonymizedDcm = anonymizer.Anonymize(dcm);
anonymizedDcm.Save("anonymized_study.dcm");Exemple de code complet avec le profil CSV
Voici un exemple complet utilisant un profil personnalisé basé sur CSV:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Anonymization;
// Load custom confidentiality profile from CSV
ConfidentialityProfile profile = ConfidentialityProfile.LoadFromCsvFile(
"hospital_privacy_profile.csv",
ConfidentialityProfileOptions.All
);
// Create anonymizer with the custom profile
Anonymizer anonymizer = new(profile);
// Load DICOM file
DicomFile dcm = DicomFile.Open("patient_scan.dcm");
// Anonymize using custom profile
DicomFile anonymizedDcm = anonymizer.Anonymize(dcm);
// Save result
anonymizedDcm.Save("anonymized_scan.dcm");
Console.WriteLine("Anonymization completed with custom profile!");Exemples de scénarios pratiques
Scénario 1: Retain Institution ID pour le suivi interne
TagPattern;Action
(0010,0010);Z
(0010,0020);Z
(0008,0080);K
(0008,0081);KScénario 2: Remplacer tous les UID pendant la préservation des relations
TagPattern;Action
(0020,000D);U
(0020,000E);U
(0008,0018);U
(0008,0016);KScénario 3: Confidentialité maximale pour la partage extérieur
TagPattern;Action
(0010,0010);X
(0010,0020);X
(0010,0030);X
(0010,0040);X
(0008,0080);X
(0008,0081);X
(0008,1030);X
(0008,103E);XValidation : tester votre profil personnalisé
Valider toujours les profils personnalisés avant l’utilisation de la production:
using Aspose.Medical.Dicom;
using Aspose.Medical.Dicom.Anonymization;
// Load custom profile
ConfidentialityProfile profile = ConfidentialityProfile.LoadFromCsvFile(
"test_profile.csv",
ConfidentialityProfileOptions.All
);
Anonymizer anonymizer = new(profile);
// Test with sample files
string[] testFiles = Directory.GetFiles("test_samples", "*.dcm");
foreach (string filePath in testFiles)
{
try
{
DicomFile dcm = DicomFile.Open(filePath);
DicomFile anonymized = anonymizer.Anonymize(dcm);
string outputPath = Path.Combine("test_output", Path.GetFileName(filePath));
anonymized.Save(outputPath);
Console.WriteLine($"✓ Processed: {Path.GetFileName(filePath)}");
}
catch (Exception ex)
{
Console.WriteLine($"✗ Failed: {Path.GetFileName(filePath)} - {ex.Message}");
}
}
Console.WriteLine("\nValidation complete. Review output files in DICOM viewer.");Troubleshooting
Path de fichier invalide
Si le fichier de profil ne peut pas être trouvé :
string profilePath = "profile.csv";
if (!File.Exists(profilePath))
{
Console.WriteLine($"Profile file not found: {profilePath}");
return;
}Invalid Tag Pattern ou Action
Assurez-vous que les étiquettes suivent le format (GGGG,EEEE) où GGGG est le groupe et EEEE est l’élément en hexadecimal. Les actions valides sont: D, Z, X, K, C, U.
Les meilleures pratiques pour les profils personnalisés
- Contrôle de version: stockez les fichiers de profil dans le contrôle de la version pour suivre les changements au fil du temps.
- Documentation: Ajouter des commentaires expliquant pourquoi des actions spécifiques ont été sélectionnées pour chaque tag.
- Testation: Valider les profils avec les données de test avant d’appliquer à la production des fichiers DICOM.
- Backup: Gardez toujours des sauvegardes des fichiers de profil originaux.
- Review: Revue périodique des profils pour s’assurer qu’ils remplissent toujours les exigences réglementaires.
Informations supplémentaires
- Considérer la création de multiples profils pour différents cas d’utilisation (partage interne, recherche externe, etc.).
- Document dont le profil a été utilisé lors de l’anonymisation des fichiers à des fins d’audit.
- Les formats JSON et XML offrent une meilleure structure pour les profils complexes avec des définitions nés.
Conclusion
Ce tutoriel a démontré comment créer des profils d’anonymisation personnalisés DICOM en utilisant des fichiers CSV, JSON ou XML en C# avec Aspose.Medical.Profils personnalizés fournissent la flexibilité pour mettre en œuvre des politiques de confidentialité spécifiques à l’institution tout en conservant le respect des règlements sanitaires.