Le tutoriel et le document conceptuel associé, Supprimer l'identification des images médicales à l'aide de l'API Cloud Healthcare, sont destinés aux chercheurs, aux data scientists, aux équipes informatiques, et aux organisations du secteur de la santé et des sciences de la vie. Ce tutoriel vous guide tout au long de deux cas d'utilisation courants de l'anonymisation des données d'imagerie médicale à l'aide de l'API Cloud Healthcare. Le document conceptuel explique la logique de l'anonymisation des données DICOM et en décrit les étapes générales.
Dans ce tutoriel, nous partons du principe que vous disposez de connaissances de base sur Linux. Il est également utile de connaître les concepts fondamentaux liés à Google Cloud et aux normes DICOM. Exécutez toutes les commandes de ce tutoriel dans un terminal Linux.
Objectifs
- Utiliser l'opération d'anonymisation DICOM de l'API Cloud Healthcare pour supprimer ou modifier des informations personnelles et des données de santé protégées dans les instances DICOM d'un magasin DICOM
- Supprimer ou modifier du texte incrusté et des métadonnées d'informations personnelles et de données de santé protégées dans un appel d'API Cloud Healthcare
- Utilisez l'outil de ligne de commande
curl
ou Google Cloud CLI pour effectuer des appels d'API Cloud Healthcare d'anonymisation DICOM.
Coûts
Dans ce document, vous utilisez les composants facturables suivants de Google Cloud :
Obtenez une estimation des coûts en fonction de votre utilisation prévue à l'aide du simulateur de coût.
Avant de commencer
Dans ce tutoriel, nous partons du principe que vos images DICOM ont déjà été importées dans un magasin DICOM. Pour plus d'informations sur la création de magasins DICOM sur Google Cloud, consultez la page Créer et gérer des magasins DICOM. Pour plus d'informations sur l'importation de données DICOM dans des magasins DICOM, consultez la page Importer et exporter des données DICOM à l'aide de Cloud Storage.
Dans ce tutoriel, nous partons également du principe que :
- vous travaillez sur un projet appelé
MyProj
; - vous avez créé un ensemble de données appelé
dataset1
dans la région Google Cloudus-central1
dansMyProj
; - vous avez créé un magasin DICOM appelé
dicomstore1
dansdataset1
.
Si vos ressources portent un nom différent, vous devez modifier les commandes répertoriées dans ce document en conséquence.
- Dans Google Cloud Console, accédez à la page Sélecteur de projet.
Accéder à la page "Sélecteur de projet" - Sélectionnez un projet Google Cloud appelé
MyProj
. -
Vérifiez que la facturation est activée pour votre projet Google Cloud.
-
Activez Cloud Healthcare API.
- Installez Google Cloud CLI.
-
Pour initialiser gcloudCLI, exécutez la commande suivante :
gcloud init
- Dans un shell, exécutez la commande
gcloud components update
pour vous assurer que vous disposez de la dernière version de gcloud CLI incluant les fonctionnalités liées à l'API Cloud Healthcare.
Créer un compte de service IAM
Le rôle "Administrateur d'ensembles de données Healthcare" inclut tous les rôles requis pour ce tutoriel.
Attribuez le rôle "Administrateur d'ensembles de données Healthcare" au compte de service.
Activez la clé de votre compte de service :
gcloud auth activate-service-account --key-file=path-to-key-file
Le résultat est le suivant :
Activated service account credentials for: [key-name@project-name.iam.gserviceaccount.com]
key-name
est le nom que vous avez attribué à la clé du compte de service.project-name
est le nom de votre projet Google Cloud.
Utiliser une visionneuse d'images médicales
Ce tutoriel utilise la visionneuse de diagnostic Mach7 comme visionneuse d'images médicales. Vous pouvez demander une version de démonstration de la visionneuse sur le site Web de Mach7.
Pour utiliser cette visionneuse, attribuez le rôle "Lecteur de Healthcare DICOM" à votre compte utilisateur en procédant comme suit :
En tant qu'administrateur dans Google Cloud Console, accédez à la page IAM.
Cliquez sur Ajouterperson_add.
Dans le champ Nouveaux comptes principaux, saisissez votre compte utilisateur ou votre adresse Gmail.
Dans la liste déroulante Sélectionnez un rôle, sélectionnez Cloud Healthcare.
Placez le pointeur de la souris sur Cloud Healthcare, puis sélectionnez le rôle Lecteur de Healthcare DICOM.
Cliquez sur Save.
Pour utiliser la visionneuse à des fins de production, vous devez obtenir une version complète.
Obtenir un jeton d'accès OAuth 2.0
Pour ingérer des données à l'aide de l'API Cloud Healthcare, vous devez disposer d'un jeton d'accès OAuth 2.0 que les commandes de ce tutoriel vous fournissent. Dans ce tutoriel, certains exemples de requêtes API Cloud Healthcare utilisent l'outil de ligne de commande curl
. Ces exemples font appel à la commande gcloud auth print-access-token
pour obtenir un jeton de support OAuth 2.0 et pour inclure ce jeton dans l'en-tête d'autorisation de la requête. Pour en savoir plus sur cette commande, consultez la page sur gcloud auth application-default print-access-token
.
Ce tutoriel traite deux des cas d'utilisation les plus courants de l'anonymisation des informations d'identification dans des données DICOM. Dans les deux cas, la solution est fournie à l'aide de l'outil de ligne de commande curl
ou de Google Cloud CLI. Pour obtenir plus d'informations sur l'anonymisation des données DICOM à l'aide de l'API Cloud Healthcare, ainsi que des options de configuration et des exemples de commandes curl
et Windows PowerShell, consultez la page Supprimer l'identification des données DICOM.
Configurer des variables d'environnement
Cette étape s'applique aux deux cas d'utilisation.
Exportez les variables d'environnement en fonction de l'emplacement et des attributs du magasin DICOM dans lequel vos images sont stockées.
export PROJECT_ID=MyProj export REGION=us-central1 export SOURCE_DATASET_ID=dataset1 export DICOM_STORE_ID=dicomstore1 export DESTINATION_DATASET_ID=deid-dataset1
Cas d'utilisation I : supprimer toutes les métadonnées et masquer l'ensemble du texte incrusté
Ce cas d'utilisation montre comment anonymiser un ensemble de données contenant des magasins DICOM et des données DICOM en supprimant toutes les métadonnées (à l'exception des données minimales requises pour disposer d'une ressource DICOM valide) et en masquant l'ensemble du texte incrusté des images DICOM. Vous pouvez effectuer les opérations suivantes :
- Créez une requête
POST
et indiquez le nom de l'ensemble de données de destination ainsi qu'un jeton d'accès. - Supprimez toutes les métadonnées, puis créez un ensemble de tags
keepList
minimaux requis pour disposer d'une ressource DICOM valide. - Masquez tout le texte incrusté sensible de l'image DICOM en créant un objet
DeidentifyConfig
avecimage.text_redaction_mode
défini surREDACT_ALL_TEXT
.
Vous pouvez effectuer l'ensemble de ces opérations à l'aide d'une seule commande curl
comme suit :
curl -X POST \
-H "Authorization: Bearer "$(gcloud auth print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
--data "{
'destinationDataset': 'projects/$PROJECT_ID/locations/$REGION/datasets/$DESTINATION_DATASET_ID',
'config': {
'dicom': {'keepList': {
'tags': [
'StudyInstanceUID',
'SOPInstanceUID',
'TransferSyntaxUID',
'PixelData',
'Columns',
'NumberOfFrames',
'PixelRepresentation',
'MediaStorageSOPClassUID',
'MediaStorageSOPInstanceUID',
'Rows',
'SamplesPerPixel',
'BitsAllocated',
'HighBit',
'PhotometricInterpretation',
'BitsStored' ] }
},
'image': {
'textRedactionMode': 'REDACT_ALL_TEXT'
}
}
}" "https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID:deidentify"
Vous pouvez également effectuer la même opération d'anonymisation sans connaître ni spécifier de nom de tag à l'aide du profil de filtrage de tags MINIMAL_KEEP_LIST_PROFILE
. Consultez l'exemple ci-dessous :
curl -X POST \
-H "Authorization: Bearer "$(gcloud auth print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
--data "{
'destinationDataset': 'projects/$PROJECT_ID/locations/$REGION/datasets/$DESTINATION_DATASET_ID',
'config': {
'dicom':{'filterProfile':'MINIMAL_KEEP_LIST_PROFILE'},
'image': {
'textRedactionMode': 'REDACT_ALL_TEXT'
}
}
}" "https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID:deidentify"
Dans toutes les commandes précédentes, si la requête aboutit, le serveur affiche une réponse au format JSON, comme suit :
{ "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/OPERATION_NAME" }
La réponse contient un nom d'opération. Vous pouvez utiliser le nom de l'opération avec la méthode Operation get
pour suivre l'état de l'opération.
curl -X GET \
-H "Authorization: Bearer "$(gcloud auth print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
"https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME"
Si la requête aboutit, le serveur affiche une réponse au format JSON.
Une fois le processus d'anonymisation terminé, la réponse inclut "done":
true
.
{ "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "2018-01-01T00:00:00Z", "endTime": "2018-01-01T00:00:00Z" }, "done": true, "response": { "@type": "...", "successStoreCount": "SUCCESS_STORE_COUNT" } }
Vous pouvez également utiliser Google Cloud CLI pour exécuter toutes les versions de l'API Cloud Healthcare, y compris l'API d'anonymisation.
Pour obtenir la liste complète des commandes disponibles, consultez la documentation gcloud
de l'API Cloud Healthcare ou exécutez la commande suivante :
gcloud healthcare --help
L'exemple suivant montre comment utiliser gcloud CLI pour anonymiser un ensemble de données contenant des magasins DICOM et des données DICOM afin de supprimer toutes les métadonnées et masquer l'ensemble du texte incrusté des images DICOM.
gcloud healthcare datasets deidentify $SOURCE_DATASET_ID \
--location $REGION \
--dicom-filter-tags=StudyInstanceUID,SOPInstanceUID,TransferSyntaxUID,PixelData,Columns,NumberOfFrames,PixelRepresentation,MediaStorageSOPClassUID,MediaStorageSOPInstanceUID,Rows,SamplesPerPixel,BitsAllocated,HighBit,PhotometricInterpretation,BitsStored \
--text-redaction-mode all \
--destination-dataset projects/$PROJECT_ID/locations/$REGION/datasets/$DESTINATION_DATASET_ID \
--async
Si la requête aboutit, le serveur affiche une réponse de ce type :
Request issued for: [$SOURCE_DATASET_ID] Check operation [OPERATION NAME] for status. name: projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME
Pour vérifier l'état de l'opération, exécutez la commande suivante :
gcloud healthcare operations describe --dataset $SOURCE_DATASET_ID OPERATION_NAME
Si la requête aboutit, le serveur affiche une réponse semblable à celle présentée ci-dessous.
Une fois le processus d'anonymisation terminé, la réponse contient "done": true
.
done: true metadata: '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata apiMethodName: google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset "createTime": "2018-01-01T00:00:00Z", "endTime": "2018-01-01T00:00:00Z" name: "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME" response: '@type': type.googleapis.com/google.cloud.healthcare.v1.dataset.DeidentifySummary successResourceCount: 'SUCCESS_RESOURCE_COUNT' successStoreCount: 'SUCCESS_STORE_COUNT'
Cas d'utilisation II : modifier les métadonnées et masquer le texte incrusté sensible
Ce cas d'utilisation montre comment anonymiser un ensemble de données contenant des magasins DICOM et des données DICOM à l'aide de la méthode de filtrage de tags filterProfile
, pour supprimer certaines métadonnées, en modifier d'autres et masquer le texte incrusté sensible associé aux images. L'objectif est de masquer la valeur PERSON_NAME
, remplacer la valeur PHONE_NUMBER
par des astérisques, et remplacer DATE
et DATE_OF_BIRTH
par une valeur de date comprise dans une plage de 100 jours par rapport aux valeurs d'origine.
Dans ce cas d'utilisation, la clé cryptographique fournie, U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=
, est une clé 256 bits encodée en base64 et chiffrée par AES, générée à l'aide de la commande suivante. Lorsque l'invite correspondante s'affiche, un mot de passe vide est fourni à la commande :
echo -n "test" | openssl enc -e -aes-256-ofb -a -salt
Vous pouvez effectuer les opérations suivantes :
- Créez une requête
POST
et indiquez le nom de l'ensemble de données de destination ainsi qu'un jeton d'accès. - Supprimez certaines métadonnées et modifiez-en d'autres dans les tags DICOM en utilisant le profil de filtrage
DEIDENTIFY_TAG_CONTENT
avec les combinaisons appropriées de types d'informations et de transformations primitives. - Masquez le texte incrusté d'une image DICOM en définissant image.text_redaction_mode sur
REDACT_SENSITIVE_TEXT
.
Vous pouvez effectuer l'ensemble de ces opérations à l'aide d'une seule commande curl
comme suit :
curl -X POST \
-H "Authorization: Bearer "$(gcloud auth print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
--data "{
'destinationDataset': 'projects/$PROJECT_ID/locations/$REGION/datasets/$DESTINATION_DATASET_ID',
'config':{
'dicom':{'filterProfile':'DEIDENTIFY_TAG_CONTENTS'},
'text':{
'transformations':[
{'infoTypes':['PERSON_NAME'], 'redactConfig':{}},
{'infoTypes':['PHONE_NUMBER'], 'characterMaskConfig':{'maskingCharacter':''}},
{'infoTypes':['DATE', 'DATE_OF_BIRTH'], 'dateShiftConfig':{'cryptoKey':'U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU='}}]},
'image':{'textRedactionMode':'REDACT_SENSITIVE_TEXT'}}}" \
"https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID:deidentify"
Si la requête aboutit, le serveur affiche une réponse au format JSON comme suit :
{ "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/OPERATION_NAME" }
La réponse contient un nom d'opération. Vous pouvez suivre l'état de l'opération à l'aide de la méthode Operation get
:
curl -X GET \
-H "Authorization: Bearer "$(gcloud auth print-access-token) \
-H "Content-Type: application/json; charset=utf-8" \
"https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME"
Si la requête aboutit, le serveur affiche la réponse suivante au format JSON :
{ "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME", "metadata": { "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata", "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset", "createTime": "2018-01-01T00:00:00Z", "endTime": "2018-01-01T00:00:00Z" }, "done": true, "response": { "@type": "...", "successStoreCount": "SUCCESS_STORE_COUNT" } }
Nettoyer
Pour éviter que les ressources utilisées lors de ce tutoriel soient facturées sur votre compte Google Cloud, supprimez le projet contenant les ressources, ou conservez le projet et supprimez les ressources individuelles.
Supprimer le projet
- Dans la console Google Cloud, accédez à la page Gérer les ressources.
- Dans la liste des projets, sélectionnez le projet que vous souhaitez supprimer, puis cliquez sur Supprimer.
- Dans la boîte de dialogue, saisissez l'ID du projet, puis cliquez sur Arrêter pour supprimer le projet.
Supprimer les ressources individuelles
Supprimez les ensembles de données de destination. Si nécessaire, ajoutez le paramètre
--location
et spécifiez la région pour votre ensemble de données.gcloud healthcare datasets delete $DESTINATION_DATASET_ID
Étape suivante
- Supprimer l'identification des images médicales à l'aide de l'API Cloud Healthcare
- Supprimer l'identification des données DICOM
- Annonce concernant la version bêta de l'API Healthcare
- Exporter des métadonnées DICOM vers BigQuery
- Pour en savoir plus sur les fonctionnalités DICOM, consultez la déclaration de conformité DICOM.
Pour en savoir plus sur l'API Cloud Healthcare, y compris la compatibilité avec les spécifications FHIR et HL7v2, consultez la documentation de l'API Cloud Healthcare.
Découvrez des architectures de référence, des schémas et des bonnes pratiques concernant Google Cloud. Consultez notre Centre d'architecture cloud.