Cloud Healthcare API für digitale Pathologie verwenden

Auf dieser Seite wird erläutert, wie Sie virtuelle Schnitte (Whole Slide Images, WSIs) mit der Cloud Healthcare API speichern, analysieren und verwalten.

Übersicht

Die digitale Pathologie ermöglicht das Speichern, Verarbeiten und Verwalten von konventionellen Objektträgern. Dazu werden diese digitalisiert, um virtuelle Schnitte (Whole Slide Images, WSIs) zu erstellen.

WSIs sind normalerweise große Dateien, die bis zu mehreren GB groß sein können. Sie können verschiedene Dateiformate verwenden, was die Verwaltung erschwert. Die Cloud Healthcare API vereinfacht den Speichern, Analysieren und Verwalten von WSIs.

Virtuelle Schnitte mit DICOM speichern

Die Cloud Healthcare API bietet einen verwalteten Dienst zum Speichern von DICOM-Images. Dieser Dienst unterstützt auch das Speichern und Abrufen von WSIs. Weitere Informationen zu DICOM in der Cloud Healthcare API finden Sie unter DICOM.

Die Verwendung von DICOM hat folgende Vorteile:

  • Unterstützt mehrere Anbieter und Softwareversionen.
  • DICOM ist ein Dateiformat und ein Netzwerkprotokoll, das die DICOMweb- und DIMSE-APIs definiert. Diese APIs werden zum Abrufen und Speichern von DICOM-Instanzen verwendet, bieten umfangreiche Funktionen und vereinfachen die Interaktion mit Images.

Virtuelle Schnitte in DICOM konvertieren

Die meisten WSI-Scanner erzeugen keine DICOM-Dateien nativ von WSIs. Daher müssen Sie die WCI-Werte in DICOM-Dateien manuell konvertieren.

WSIs kann mit den folgenden Tools in DICOM konvertiert werden:

Im folgenden Abschnitt wird gezeigt, wie Sie mit dem wsi2dcm-Befehlszeilentool DICOM-Dateien generieren.

DICOM-Dateien mit dem wsi2dcm-Befehlszeilentool generieren

Prüfen Sie vor dem Ausführen der folgenden Schritte, ob Sie eine gültige WSI-Datei haben. Die Beispieldaten sind von OpenSlide und anderen Ressourcen auf der Website der Digital Pathology Association verfügbar.

Führen Sie das wsi2dcm-Befehlszeilentool aus:

wsi2dcm \
    --input=INPUT_WSI \
    --outFolder=PATH/TO/OUTPUT/FOLDER \
    --seriesDescription=WSI_DESCRIPTION

Dabei gilt:

  • INPUT_WSI ist der Pfad und der Name der WSI-Datei.
  • PATH/TO/OUTPUT/FOLDER ist der Pfad, in dem das Tool die konvertierte DICOM-Datei ausgibt.
  • WSI_DESCRIPTION ist eine Beschreibung Ihrer Wahl für die konvertierte DICOM-Datei.

Durch die Ausführung des Tools werden mehrere DICOM-Dateien aus dem WSI generiert. Die DICOM-Dateien haben das Suffix .dcm.

DICOM-Dateien in die Cloud Healthcare API hochladen

Wenn Sie noch keinen DICOM-Speicher erstellt haben, tun Sie dies jetzt.

Sie können die generierten DICOM-Dateien mit einer der folgenden Methoden in einen DICOM-Speicher hochladen:

DICOM-Dateien und zugehörige Metadaten abrufen

Nach dem Hochladen der DICOM-Dateien in einen DICOM-Speicher können Sie Metadaten zu den DICOM-Bildern auflisten und anzeigen.

Alle WSIs auflisten

Jeder WSI ist eine DICOM-Studie. Rufen Sie zum Auflisten der WSIs die Methode dicomStores.searchForStudies auf:

curl

Wenn Sie in einem DICOM-Speicher nach Studien suchen möchten, senden Sie eine GET-Anfrage und geben Sie die folgenden Informationen an:

  • Der Name des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Ein Zugriffstoken

Das folgende Beispiel zeigt eine GET-Anfrage mit curl.

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies"

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

[
  {
    "0020000D": {
      "vr": "UI",
      "Value": [
        "STUDY_INSTANCE_UID"
      ]
    }
  },
  {
    "00080005": {
      "vr": "CS",
      "Value": [
        "SPECIFIC_CHARACTER_SET"
      ]
    },
    "00080020": {
      "vr": "DA",
      "Value": [
        "STUDY_DATE"
      ]
    },
    "00080030": {
      "vr": "TM"
    },
    "00080050": {
      "vr": "SH",
      "Value": [
        "ACCESSION_NUMBER"
      ]
    },
    "00080090": {
      "vr": "PN"
    },
    "00100010": {
      "vr": "PN"
    },
    "00100020": {
      "vr": "LO",
      "Value": [
        "PATIENT_ID"
      ]
    },
    "00100030": {
      "vr": "DA"
    },
    "00100040": {
      "vr": "CS"
    },
    "0020000D": {
      "vr": "UI",
      "Value": [
        "STUDY_INSTANCE_UID"
      ]
    },
    "00200010": {
      "vr": "SH"
    }
  }
]

PowerShell

Wenn Sie in einem DICOM-Speicher nach Studien suchen möchten, senden Sie eine GET-Anfrage und geben Sie die folgenden Informationen an:

  • Der Name des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Ein Zugriffstoken

Das folgende Beispiel zeigt eine GET-Anfrage mit Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-RestMethod `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies"

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

[
  {
    "0020000D": {
      "vr": "UI",
      "Value": [
        "STUDY_INSTANCE_UID"
      ]
    }
  },
  {
    "00080005": {
      "vr": "CS",
      "Value": [
        "SPECIFIC_CHARACTER_SET"
      ]
    },
    "00080020": {
      "vr": "DA",
      "Value": [
        "STUDY_DATE"
      ]
    },
    "00080030": {
      "vr": "TM"
    },
    "00080050": {
      "vr": "SH",
      "Value": [
        "ACCESSION_NUMBER"
      ]
    },
    "00080090": {
      "vr": "PN"
    },
    "00100010": {
      "vr": "PN"
    },
    "00100020": {
      "vr": "LO",
      "Value": [
        "PATIENT_ID"
      ]
    },
    "00100030": {
      "vr": "DA"
    },
    "00100040": {
      "vr": "CS"
    },
    "0020000D": {
      "vr": "UI",
      "Value": [
        "STUDY_INSTANCE_UID"
      ]
    },
    "00200010": {
      "vr": "SH"
    }
  }
]

WSI-Metadaten ansehen

Jede Studie enthält mehrere Instanzen und jede Instanz enthält einen Teil der Kacheln eines WSI. Rufen Sie die Methode dicomStores.searchForInstances auf, um die Instanzmetadaten für eine Instanz in der Studie aufzurufen:

curl

Um die Instanzmetadaten für eine Instanz in der Studie anzuzeigen, senden Sie eine GET-Anfrage und geben Sie die folgenden Informationen an:

  • Der Name des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Eindeutige Kennung (Unique Identifier, UID) der Studieninstanz
  • Ein Zugriffstoken

Das folgende Beispiel zeigt eine GET-Anfrage mit curl.

curl -X GET \
     -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
     "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances?StudyInstanceUID=STUDY_INSTANCE_UID"

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

[
  {
    "00080005": {
      "vr": "CS",
      "Value": [
        "SPECIFIC_CHARACTER_SET"
      ]
    },
    "00080016": {
      "vr": "UI",
      "Value": [
        "SOP_CLASS_UID"
      ]
    },
    "00080018": {
      "vr": "UI",
      "Value": [
        "SOP_INSTANCE_UID"
      ]
    },
    "00080020": {
      "vr": "DA",
      "Value": [
        "STUDY_DATE"
      ]
    },
    "00080030": {
      "vr": "TM"
    },
    "00080050": {
      "vr": "SH",
      "Value": [
        "ACCESSION_NUMBER"
      ]
    },
    "00080060": {
      "vr": "CS",
      "Value": [
        "MODALITY"
      ]
    },
    "00080090": {
      "vr": "PN"
    },
    "00100010": {
      "vr": "PN"
    },
    "00100020": {
      "vr": "LO",
      "Value": [
        "PATIENT_ID"
      ]
    },
    "00100030": {
      "vr": "DA"
    },
    "00100040": {
      "vr": "CS"
    },
    "0020000D": {
      "vr": "UI",
      "Value": [
        "STUDY_INSTANCE_UID"
      ]
    },
    "0020000E": {
      "vr": "UI",
      "Value": [
        "SERIES_INSTANCE_UID"
      ]
    },
    "00200010": {
      "vr": "SH"
    },
    "00200013": {
      "vr": "IS",
      "Value": [
        INSTANCE_NUMBER
      ]
    },
    "00280010": {
      "vr": "US",
      "Value": [
        ROWS
      ]
    },
    "00280011": {
      "vr": "US",
      "Value": [
        COLUMNS
      ]
    },
    "00280100": {
      "vr": "US",
      "Value": [
        BITS_ALLOCATED
      ]
    },
    "00400244": {
      "vr": "DA",
      "Value": [
        "PERFORMED_PROCEDURE_STEP_START_DATE"
      ]
    }
  },
...
]

PowerShell

Um die Instanzmetadaten für alle Instanzen der Studie aufzurufen, führen Sie eine GET-Anfrage aus und geben Sie die folgenden Informationen an:

  • Der Name des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Studieninstanz-UID
  • Ein Zugriffstoken

Das folgende Beispiel zeigt eine GET-Anfrage mit Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred" }

Invoke-RestMethod `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/instances?StudyInstanceUID=STUDY_INSTANCE_UID"

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

[
  {
    "00080005": {
      "vr": "CS",
      "Value": [
        "SPECIFIC_CHARACTER_SET"
      ]
    },
    "00080016": {
      "vr": "UI",
      "Value": [
        "SOP_CLASS_UID"
      ]
    },
    "00080018": {
      "vr": "UI",
      "Value": [
        "SOP_INSTANCE_UID"
      ]
    },
    "00080020": {
      "vr": "DA",
      "Value": [
        "STUDY_DATE"
      ]
    },
    "00080030": {
      "vr": "TM"
    },
    "00080050": {
      "vr": "SH",
      "Value": [
        "ACCESSION_NUMBER"
      ]
    },
    "00080060": {
      "vr": "CS",
      "Value": [
        "MODALITY"
      ]
    },
    "00080090": {
      "vr": "PN"
    },
    "00100010": {
      "vr": "PN"
    },
    "00100020": {
      "vr": "LO",
      "Value": [
        "PATIENT_ID"
      ]
    },
    "00100030": {
      "vr": "DA"
    },
    "00100040": {
      "vr": "CS"
    },
    "0020000D": {
      "vr": "UI",
      "Value": [
        "STUDY_INSTANCE_UID"
      ]
    },
    "0020000E": {
      "vr": "UI",
      "Value": [
        "SERIES_INSTANCE_UID"
      ]
    },
    "00200010": {
      "vr": "SH"
    },
    "00200013": {
      "vr": "IS",
      "Value": [
        INSTANCE_NUMBER
      ]
    },
    "00280010": {
      "vr": "US",
      "Value": [
        ROWS
      ]
    },
    "00280011": {
      "vr": "US",
      "Value": [
        COLUMNS
      ]
    },
    "00280100": {
      "vr": "US",
      "Value": [
        BITS_ALLOCATED
      ]
    },
    "00400244": {
      "vr": "DA",
      "Value": [
        "PERFORMED_PROCEDURE_STEP_START_DATE"
      ]
    }
  },
...
]

WSI-Kacheln ansehen

Jede Instanz enthält in der Regel mehrere Frames. Ein Frame stellt eine Kachel des WSI auf einer bestimmten Zoomstufe im WSI "pyramid" dar. Rufen Sie die Methode frames.retrieveRendered auf, um einen einzelnen Frame im JPEG-Format abzurufen:

curl

Wenn Sie einen einzelnen Frame im JPEG-Format abrufen möchten, senden Sie eine GET-Anfrage und geben Sie die folgenden Informationen an:

  • Der Name des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Die UID der Studie
  • Die Serien-UID
  • Die Instanz-UID
  • Ein Zugriffstoken

Das folgende Beispiel zeigt eine GET-Anfrage mit curl.

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Accept: image/jpeg" \
    --output FILENAME \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_UID/series/SERIES_UID/instances/INSTANCE_UID/frames/0/rendered"

Wenn die Anfrage erfolgreich ist, wird die JPEG-Datei auf Ihren Rechner geschrieben.

PowerShell

Wenn Sie einen einzelnen Frame im JPEG-Format abrufen möchten, senden Sie eine GET-Anfrage und geben Sie die folgenden Informationen an:

  • Der Name des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Die UID der Studie
  • Die Serien-UID
  • Die Instanz-UID
  • Ein Zugriffstoken

Das folgende Beispiel zeigt eine GET-Anfrage mit Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred"; "Accept" = "image/jpeg" }

Invoke-RestMethod `
  -Method Get `
  -Headers $headers `
  -OutFile FILENAME `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_UID/series/SERIES_UID/instances/INSTANCE_UID/frames/0/rendered"

Wenn die Anfrage erfolgreich ist, wird die JPEG-Datei auf Ihren Rechner geschrieben.

Alle virtuellen Schnitte abrufen

Mit der Methode instances.retrieveInstance können Sie die gesamte Instanz abrufen, in der die WSIs enthalten sind:

curl

Um eine gesamte Instanz abzurufen, senden Sie eine GET-Anfrage und geben Sie die folgenden Informationen an:

  • Der Name des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Die UID der Studie
  • Die Serien-UID
  • Die Instanz-UID
  • Ein Zugriffstoken

Das folgende Beispiel zeigt eine GET-Anfrage mit curl.

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Accept: application/dicom" \
    --output FILENAME \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_UID/series/SERIES_UID/instances/INSTANCE_UID"

Wenn die Anfrage erfolgreich ist, wird die DICOM-Datei auf Ihren Rechner geschrieben.

PowerShell

Um eine gesamte Instanz abzurufen, senden Sie eine GET-Anfrage und geben Sie die folgenden Informationen an:

  • Der Name des übergeordneten Datasets
  • Der Name des DICOM-Speichers
  • Die UID der Studie
  • Die Serien-UID
  • Die Instanz-UID
  • Ein Zugriffstoken

Das folgende Beispiel zeigt eine GET-Anfrage mit Windows PowerShell.

$cred = gcloud auth application-default print-access-token
$headers = @{ Authorization = "Bearer $cred"; "Accept" = "application/dicom" }

Invoke-RestMethod `
  -Method Get `
  -Headers $headers `
  -OutFile FILENAME `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_UID/series/SERIES_UID/instances/INSTANCE_UID"

Wenn die Anfrage erfolgreich ist, wird die DICOM-Datei auf Ihren Rechner geschrieben.

Virtuelle Schnitte mit einem WSI-Betrachter ansehen

In den vorherigen Abschnitten wurde gezeigt, wie Sie die Metadaten eines WSIs anzeigen und einzelne Kacheln abrufen. Um den gesamten WSI anzusehen, müssen Sie einen WSI-Betrachter verwenden, der von DICOMweb unterstützt wird.

Die folgenden Betrachter sind mit der Cloud Healthcare API kompatibel:

Konvertierte WSI-DICOM-Dateien mit dem DICOMweb-WSI-Betrachter ansehen

Lesen Sie die folgenden Abschnitte, um die konvertierten WSCI-DICOM-Dateien mithilfe des DICOMweb-WSI-Betrachters darzustellen.

Betrachter herunterladen

Laden Sie den DICOMweb-WSI-Betrachter herunter:

git clone https://github.com/GoogleCloudPlatform/dicomweb-wsi-viewer.git

Clientschlüssel abrufen

Mit einem Clientschlüssel wird ein Nutzer authentifiziert, wenn er auf eine Anwendung zugreift. Sie betten den Clientschlüssel in den Quellcode des DICOM-Web-WSI-Betrachters ein. Führen Sie die folgenden Schritte aus, um einen Clientschlüssel abzurufen:

  1. Gehen Sie zur Seite Anmeldedaten in der Google Cloud Console.
    Zur Seite "Anmeldedaten"

  2. Klicken Sie auf Anmeldedaten erstellen und wählen Sie OAuth-Client-ID aus.

  3. Wählen Sie unter Anwendungstyp die Option Webanwendung aus.

  4. Geben Sie einen Namen Ihrer Wahl ein.

  5. Geben Sie unter Autorisierte JavaScript-Quellen und Autorisierte Weiterleitungs-URIs http://localhost:8000 ein.

  6. Klicken Sie auf Erstellen und dann im angezeigten Fenster OAuth-Client auf OK. Kopieren Sie die Client-ID zur Verwendung im nächsten Abschnitt.

Clientschlüssel im Betrachter konfigurieren

Führen Sie die folgenden Schritte unter Verwendung der Client-ID aus, die Sie im vorherigen Abschnitt abgerufen haben:

  1. Öffnen Sie die Datei viewer.js im Verzeichnis dicomweb-wsi-viewer.

  2. Ersetzen Sie die folgende Zeile, damit sie Ihre Client-ID enthält:

    const CLIENT_ID = 'INSERT-YOUR-CLIENT-ID-HERE'
    

    Die Zeile sollte in etwa so aussehen:

    const CLIENT_ID = 'PROJECT_ID-VALUE.apps.googleusercontent.com';
    
  3. Speichern Sie die Datei.

Wenn Sie den OAuth-Zustimmungsbildschirm Ihres Google Cloud-Projekts noch nicht konfiguriert haben, führen Sie die folgenden Schritte aus:

  1. Öffnen Sie den OAuth-Zustimmungsbildschirm.
    Zum OAuth-Zustimmungsbildschirm

  2. Wählen Sie unter Support-E-Mail-Adresse die E-Mail-Adresse aus, die als öffentlicher Kontakt angezeigt werden soll. Dies muss Ihre E-Mail-Adresse oder die einer Google-Gruppe sein, deren Inhaber Sie sind.

  3. Geben Sie den Namen der Anwendung ein, der angezeigt werden soll.

  4. Klicken Sie auf Bereich hinzufügen. Geben Sie im angezeigten Dialogfeld https://www.googleapis.com/auth/cloud-healthcare ein und klicken Sie dann auf Hinzufügen.

  5. Klicken Sie auf Speichern.

Zum Ändern von Informationen im OAuth-Zustimmungsbildschirm wie Produktname oder E-Mail-Adresse müssen Sie die vorherigen Schritte zur Konfiguration des Zustimmungsbildschirms wiederholen.

Wenn Sie bereits den OAuth-Zustimmungsbildschirm Ihres Google Cloud-Projekts konfiguriert haben, müssen Sie https://www.googleapis.com/auth/cloud-healthcare im Dialogfeld Bereich hinzufügen hinzufügen.

DICOMweb-WSI-Betrachter ausführen

  1. Führen Sie im Verzeichnis dicomweb-wsi-viewer den folgenden Befehl aus:

    python -m SimpleHTTPServer 8000
    
  2. Wechseln Sie auf dem Computer, auf dem Sie den vorherigen Befehl ausgeführt haben, zu https://localhost:8000.

  3. Klicken Sie in der Benutzeroberfläche auf Anmelden/Autorisieren, um den OAuth-Zustimmungsbildschirm aufzurufen. Erteilen Sie dem Betrachter die Berechtigung, auf Ihr Google Cloud-Projekt und die Cloud Healthcare API-Ressourcen zuzugreifen.