Cloud Healthcare API zum De-Identifizieren medizinischer Bilder verwenden

Last reviewed 2023-03-28 UTC

In dieser Anleitung erfahren Sie, wie Sie mit dem DICOM-De-Identifikationsvorgang der Cloud Healthcare API personenidentifizierbare Informationen (PII) und geschützte Gesundheitsdaten (Protected Health Information – PHI) in DICOM (Digital Imaging and Communications in Medicine) entfernen oder ändern. Durch die De-Identifikation von DICOM-Daten können Datenschutzrichtlinien für Patienten eingehalten und Gesundheitsdaten für Forschung, Datenfreigabe und maschinelles Lernen vorbereitet werden.

Die Anleitung und das zugehörige konzeptionelle Dokument, Medizinische Bilder über die Cloud Healthcare API de-identifizieren, richten sich an Forscher, Data Scientists, IT-Teams sowie Organisationen in den Bereichen Gesundheitswesen und Biowissenschaften. In dieser Anleitung lernen Sie zwei gängige Anwendungsfälle kennen, bei denen medizinische Bilddaten mithilfe der Cloud Healthcare API de-identifiziert werden. Das konzeptionelle Dokument erläutert die Gründe für die De-Identifikation von DICOM-Daten und umreißt die wichtigsten Schritte.

In dieser Anleitung wird davon ausgegangen, dass Sie grundlegende Linux-Kenntnisse haben. Grundlegende Kenntnisse von Google Cloud und der DICOM-Standards sind ebenfalls hilfreich. Führen Sie alle Befehle in dieser Anleitung in einem Linux-Terminal aus.

Ziele

  • DICOM-De-Identifikationsvorgang der Cloud Healthcare API verwenden, um PII und PHI in DICOM-Instanzen in einem DICOM-Speicher zu entfernen oder zu ändern
  • PII- und PHI-Metadaten und eingebrannten Text in einem einzigen Cloud Healthcare API-Aufruf entfernen oder ändern
  • Verwenden Sie entweder das curl-Befehlszeilentool oder die Google Cloud CLI, um Cloud Healthcare API-Aufrufe zur DICOM-De-Identifikation durchzuführen.

Kosten

In diesem Dokument verwenden Sie die folgenden kostenpflichtigen Komponenten von Google Cloud:

Mit dem Preisrechner können Sie eine Kostenschätzung für Ihre voraussichtliche Nutzung vornehmen. Neuen Google Cloud-Nutzern steht möglicherweise eine kostenlose Testversion zur Verfügung.

Hinweis

In dieser Anleitung wird davon ausgegangen, dass Ihre DICOM-Bilder bereits in einen DICOM-Speicher importiert wurden. Informationen zum Erstellen von DICOM-Speichern in Google Cloud finden Sie unter DICOM-Speicher erstellen und verwalten. Informationen zum Importieren von DICOM-Daten in DICOM-Speicher finden Sie unter DICOM-Daten mit Cloud Storage importieren und exportieren.

Außerdem wird in dieser Anleitung Folgendes vorausgesetzt:

  • Sie arbeiten in einem Projekt mit dem Namen MyProj.
  • Sie haben ein Dataset mit dem Namen dataset1 in der Google Cloud-Region us-central1 in MyProj erstellt.
  • Sie haben einen DICOM-Speicher mit dem Namen dicomstore1 in dataset1 erstellt.

Wenn Ihre Ressourcen anders benannt sind, müssen Sie die in diesem Dokument aufgeführten Befehle entsprechend ändern.

  1. Rufen Sie in der Google Cloud Console die Seite für die Projektauswahl auf.
    Zur Projektauswahl
  2. Wählen Sie ein Google Cloud-Projekt mit dem Namen MyProj aus.
  3. Die Abrechnung für das Google Cloud-Projekt muss aktiviert sein.

  4. Cloud Healthcare API aktivieren.

    Aktivieren Sie die API

  5. Installieren Sie die Google Cloud CLI.
  6. Führen Sie folgenden Befehl aus, um die gcloud CLI zu initialisieren:

    gcloud init
  7. Prüfen Sie in einer Shell mit dem Befehl gcloud components update, ob Sie die neueste Version der gcloud CLI mit den Funktionen der Cloud Healthcare API haben.

IAM-Dienstkonto erstellen

Die Rolle "Healthcare-Dataset-Administrator" umfasst alle erforderlichen Rollen für diese Anleitung.

  1. Erstellen Sie ein Dienstkonto.

  2. Weisen Sie dem Dienstkonto die Rolle "Healthcare-Dataset-Administrator" zu.

  3. Erstellen Sie den JSON-Schlüssel des Dienstkontos und laden Sie ihn herunter.

  4. Aktivieren Sie den Dienstkontoschlüssel:

    gcloud auth activate-service-account --key-file=path-to-key-file
    

    Die Ausgabe sieht so aus:

    Activated service account credentials for: [key-name@project-name.iam.gserviceaccount.com]
    
    • key-name ist der Name, den Sie dem Dienstkontoschlüssel zugewiesen haben.
    • project-name ist der Name Ihres Google Cloud-Projekts.

Viewer für medizinische Bilder verwenden

In dieser Anleitung wird die Diagnoseansicht Mach7 als Anzeigegerät für medizinische Bilder verwendet. Auf der Mach7-Website können Sie eine Demoversion des Viewers anfordern.

Zur Verwendung dieses Viewers müssen Sie Ihrem Nutzerkonto die Rolle "Healthcare-DICOM-Betrachter" zuweisen. Gehen Sie dazu so vor:

  1. Rufen Sie als Administrator in der Google Cloud Console die IAM-Seite auf.

    Zur IAM-Seite

  2. Klicken Sie auf Hinzufügen .

  3. Geben Sie im Feld Neue Hauptkonten Ihr Nutzerkonto oder Ihre Gmail-Adresse ein.

  4. Wählen Sie in der Drop-down-Liste Rolle auswählen die Option Cloud Healthcare aus.

  5. Bewegen Sie den Mauszeiger auf Cloud Healthcare und wählen Sie dann die Rolle Healthcare-DICOM-Betrachter aus.

  6. Klicken Sie auf Speichern.

Wenn Sie den Viewer für Produktionszwecke verwenden möchten, benötigen Sie eine Vollversion.

OAuth 2.0-Zugriffstoken abrufen

Wenn Sie die Cloud Healthcare API zum Aufnehmen von Daten verwenden möchten, benötigen Sie ein OAuth 2.0-Zugriffstoken, das von den Befehlen in dieser Anleitung für Sie abgerufen wird. In dieser Anleitung wird für einige der Cloud Healthcare API-Beispielanfragen das curl-Befehlszeilentool verwendet. In diesen Beispielen wird mithilfe des Befehls gcloud auth print-access-token ein OAuth 2.0-Inhabertoken abgerufen und das Token in den Autorisierungsheader der Anfrage aufgenommen. Weitere Informationen zu diesem Befehl finden Sie unter gcloud auth application-default print-access-token.

In dieser Anleitung werden zwei der häufigsten Anwendungsfälle zum Entfernen von identifizierenden Informationen aus DICOM-Daten behandelt. In beiden Fällen wird die Lösung entweder über das curl-Befehlszeilentool oder die Google Cloud CLI bereitgestellt. Weitere Informationen zum De-Identifizieren von DICOM-Daten mithilfe der Cloud Healthcare API, zu Konfigurationsoptionen und zu curl- und Windows PowerShell-Beispielbefehlen finden Sie unter DICOM-Daten de-identifizieren.

Umgebungsvariablen einrichten

Dieser Schritt gilt für beide Anwendungsfälle.

  • Exportieren Sie die Umgebungsvariablen unter Verwendung des Speicherorts und der Attribute des DICOM-Speichers, in dem Ihre Bilder gespeichert sind.

    export PROJECT_ID=MyProj
    export REGION=us-central1
    export SOURCE_DATASET_ID=dataset1
    export DICOM_STORE_ID=dicomstore1
    export DESTINATION_DATASET_ID=deid-dataset1
    

Anwendungsfall I: Alle Metadaten und den gesamten eingebrannten Text entfernen

In diesem Anwendungsfall wird gezeigt, wie Sie ein Dataset mit DICOM-Speichern und DICOM-Daten de-identifizieren. Dazu entfernen Sie alle Metadaten (mit Ausnahme der für eine gültige DICOM-Ressource erforderlichen Mindestdaten) und den gesamten eingebrannten Text aus DICOM-Bildern. Sie können so vorgehen:

  • Erstellen Sie eine POST-Anfrage und geben Sie den Namen des Ziel-Datasets sowie ein Zugriffstoken an.
  • Entfernen Sie alle Metadaten und erstellen Sie eine Gruppe von keepList-Mindest-Tags, um eine gültige DICOM-Ressource zu erhalten.
  • Entfernen Sie sämtlichen vertraulichen eingebrannten Text aus dem DICOM-Bild. Erstellen Sie dazu ein DeidentifyConfig-Objekt, bei dem image.text_redaction_mode auf REDACT_ALL_TEXT festgelegt ist.

Diese Funktionen lassen sich alle in einem einzigen curl-Befehl ausführen:

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"

Alternativ können Sie denselben De-Identifikationsvorgang ausführen, ohne dass Sie den Tag-Namen kennen oder angeben. Dazu verwenden Sie das Tag-Filterprofil MINIMAL_KEEP_LIST_PROFILE. Sehen Sie sich folgendes Beispiel an:

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"

Bei allen vorherigen Befehlen gibt der Server eine Antwort im JSON-Format zurück, wenn die Anfrage erfolgreich ist:

{
  "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/OPERATION_NAME"
}

Die Antwort enthält einen Vorgangsnamen. Sie können den Vorgangsnamen mit der Vorgangsmethode get verwenden, um den Status des Vorgangs zu verfolgen.

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"

Wenn die Anfrage erfolgreich ist, gibt der Server eine Antwort im JSON-Format zurück. Nach Abschluss des De-Identifikationsprozesses enthält die Antwort "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"
  }
}

Sie können die Google Cloud CLI auch für Google Cloud verwenden, um alle Versionen der Cloud Healthcare API auszuführen, einschließlich der De-Identifizierungs-API. Eine vollständige Liste der verfügbaren Befehle finden Sie in der gcloud-Dokumentation zur Cloud Healthcare API. Alternativ können Sie folgenden Befehl ausführen:

gcloud healthcare --help

Im folgenden Beispiel wird gezeigt, wie Sie mit der gcloud CLI ein Dataset mit DICOM-Speichern und DICOM-Daten de-identifizieren, um alle Metadaten und den gesamten eingebrannten Text aus DICOM-Bildern zu entfernen.

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

Wenn die Anfrage erfolgreich ist, gibt der Server eine Antwort wie diese zurück:

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

Führen Sie den folgenden Befehl aus, um den Vorgangsstatus zu prüfen:

gcloud healthcare operations describe --dataset $SOURCE_DATASET_ID OPERATION_NAME

Wenn die Anfrage erfolgreich ist, gibt der Server eine Antwort wie die folgende zurück. Nach Abschluss des De-Identifikationsprozesses enthält die Antwort "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'

Anwendungsfall II: Metadaten ändern und vertraulichen eingebrannten Text entfernen

Dieser Anwendungsfall zeigt, wie ein Dataset mit DICOM-Speichern und DICOM-Daten mithilfe der Tag-Filtermethode filterProfile de-identifiziert wird, um bestimmte Metadaten zu entfernen, andere Metadaten zu ändern und vertraulichen eingebrannten Text aus Bildern zu entfernen. Zu diesem Zweck entfernen Sie den Wert PERSON_NAME, ersetzen den Wert PHONE_NUMBER durch Sternchen und ändern DATE und DATE_OF_BIRTH in einen Datumswert im Bereich von 100 Tagen der ursprünglichen Werte.

In diesem Anwendungsfall ist der bereitgestellte kryptografische Schlüssel U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU= ein AES-verschlüsselter base64-codierter 256-Bit-Schlüssel, der mit folgendem Befehl generiert wird. Bei entsprechender Aufforderung wird dem Befehl ein leeres Passwort bereitgestellt:

 echo -n "test" | openssl enc -e -aes-256-ofb -a -salt

Sie können so vorgehen:

  • Erstellen Sie eine POST-Anfrage und geben Sie den Namen des Ziel-Datasets sowie ein Zugriffstoken an.
  • Entfernen Sie einige Metadaten und ändern Sie andere Metadaten in DICOM-Tags mithilfe des Filterprofils DEIDENTIFY_TAG_CONTENT mit den entsprechenden Kombinationen aus infoTypes und einfachen Transformationen.
  • Entfernen Sie eingebrannten Text aus einem DICOM-Bild. Legen Sie dazu "image.text_redaction_mode" auf REDACT_SENSITIVE_TEXT fest.

Diese Funktionen lassen sich alle in einem einzigen curl-Befehl ausführen:

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"

Wenn die Anfrage erfolgreich ist, gibt der Server eine Antwort im JSON-Format wie die folgende zurück:

{
  "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/OPERATION_NAME"
}

Die Antwort enthält einen Vorgangsnamen. Sie können die Vorgangsmethode get verwenden, um den Status des Vorgangs zu verfolgen:

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"

Wenn die Anfrage erfolgreich ist, gibt der Server die folgende Antwort im JSON-Format zurück:

{
  "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"
  }
}

Bereinigen

Damit Ihrem Google Cloud-Konto die in dieser Anleitung verwendeten Ressourcen nicht in Rechnung gestellt werden, löschen Sie entweder das Projekt, das die Ressourcen enthält, oder Sie behalten das Projekt und löschen die einzelnen Ressourcen.

Projekt löschen

  1. Wechseln Sie in der Google Cloud Console zur Seite Ressourcen verwalten.

    Zur Seite „Ressourcen verwalten“

  2. Wählen Sie in der Projektliste das Projekt aus, das Sie löschen möchten, und klicken Sie dann auf Löschen.
  3. Geben Sie im Dialogfeld die Projekt-ID ein und klicken Sie auf Shut down (Beenden), um das Projekt zu löschen.

Einzelne Ressourcen löschen

  • Löschen Sie die Ziel-Datasets. Fügen Sie bei Bedarf den Parameter --location hinzu und geben Sie die Region für das Dataset an.

    gcloud healthcare datasets delete $DESTINATION_DATASET_ID
    

Nächste Schritte