Usar la API de Cloud Healthcare para patología digital

En esta página, se explica cómo almacenar, analizar y administrar imágenes de diapositivas completas (WSI) con la API de Cloud Healthcare.

Descripción general

La patología digital permite almacenar, procesar y administrar diapositivas de vidrio convencionales mediante la digitalización de las mismas para generar imágenes de diapositivas completas (WSI).

Las WSI suelen ser archivos grandes que pueden tener varios GB. Vienen en varios formatos de archivo, lo que puede hacer difícil de administrar. La API de Cloud Healthcare simplifica el proceso de almacenamiento, análisis y administración de las WSI.

Almacena imágenes de diapositivas completas con DICOM

La API de Cloud Healthcare proporciona un servicio administrado para almacenar imágenes de DICOM. Este servicio también es admite el almacenamiento y la recuperación de las WSI. Para obtener más información sobre DICOM en la API de Cloud Healthcare, consulta DICOM.

Usar DICOM tiene los siguientes beneficios:

  • Admite varios proveedores y software.
  • DICOM es un formato de archivo y también un protocolo de red que define las API de DICOMweb y DIMSE. Estas API, que se usan para recuperar y almacenar instancias de DICOM, proporcionan una funcionalidad extensa y simplifican la interacción con las imágenes.

Convierte imágenes de diapositivas completas a DICOM

La mayoría de los analizadores de WSI no producen archivos de DICOM a partir de las WSI de forma nativa. Como resultado, debes convertir las WSI en archivos de DICOM de forma manual.

Las siguientes herramientas pueden convertir las WSI a DICOM:

En la siguiente sección, se muestra cómo usar la herramienta de línea de comandos de wsi2dcm para generar archivos de DICOM.

Genera archivos de DICOM con la herramienta de línea de comandos de wsi2dcm

Antes de completar los pasos siguientes, asegúrate de tener un archivo WSI válido. Los datos de muestra están disponibles en OpenSlide y en otros recursos enumerados en el sitio web de Digital Pathology Association (Asociación de Patología Digital).

Ejecuta la herramienta de línea de comandos de wsi2dcm:

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

Donde:

  • INPUT_WSI es la ruta de acceso y el nombre del archivo WSI.
  • PATH/TO/OUTPUT/FOLDER es la ruta de acceso donde la herramienta genera el archivo de DICOM convertido.
  • WSI_DESCRIPTION es una descripción de tu elección para el archivo de DICOM convertido.

La ejecución de la herramienta genera varios archivos de DICOM desde las WSI. Los archivos de DICOM tienen el sufijo .dcm.

Sube los archivos de DICOM a la API de Cloud Healthcare

Si todavía no creaste un almacén de DICOM, hazlo ahora.

Puedes subir los archivos de DICOM generados en un almacén de DICOM con uno de los siguientes métodos:

Recupera archivos de DICOM y sus metadatos

Después de subir los archivos dde DICOM en un almacén DICOM, puedes enumerar y ver los metadatos de las imágenes de DICOM.

Enumera las imágenes de diapositivas completas

Cada WSI es un estudio de DICOM. Para ver una lista de las WSI, puedes llamar al método dicomStores.searchForStudies:

curl

Para buscar estudios en un almacén de DICOM, realiza una solicitud GET y especifica la siguiente información:

  • El nombre del conjunto de datos superior
  • El nombre del almacén de DICOM
  • Un token de acceso

En el siguiente ejemplo, se muestra una solicitud GET mediante 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"

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

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

Para buscar estudios en un almacén de DICOM, realiza una solicitud GET y especifica la siguiente información:

  • El nombre del conjunto de datos superior
  • El nombre del almacén de DICOM
  • Un token de acceso

En el siguiente ejemplo, se muestra una solicitud GET mediante 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"

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

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

Visualiza los metadatos de imágenes de diapositivas completas

Cada estudio contiene varias instancias y cada una contiene un subconjunto de los mosaicos de una WSI. Para ver los metadatos de la instancia de una instancia en el estudio, llama al método dicomStores.searchForInstances:

curl

Para ver los metadatos de instancia de una instancia en el estudio, realiza una solicitud GET y especifica la siguiente información:

  • El nombre del conjunto de datos superior
  • El nombre del almacén de DICOM
  • El identificador único de la instancia del estudio (UID)
  • Un token de acceso

En el siguiente ejemplo, se muestra una solicitud GET mediante 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"

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

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

Para ver los metadatos de la instancia de todas las instancias en el estudio, realiza una solicitud GET y especifica la siguiente información:

  • El nombre del conjunto de datos superior
  • El nombre del almacén de DICOM
  • El UID de la instancia del estudio
  • Un token de acceso

En el siguiente ejemplo, se muestra una solicitud GET mediante 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"

Si la solicitud tiene éxito, se mostrará la respuesta en formato JSON en el servidor:

[
  {
    "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"
      ]
    }
  },
...
]

Visualiza los mosaicos de imágenes de diapositivas completas

Cada instancia suele contener varios marcos. Un marco representa un mosaico de la WSI a un nivel de zoom particular en la “pirámide” de la WSI. Para recuperar un solo marco en formato JPEG, llama al método frames.retrieveRendered:

curl

Para recuperar un solo marco en formato JPEG, realiza una solicitud GET y especifica la siguiente información

  • El nombre del conjunto de datos superior
  • El nombre del almacén de DICOM
  • El UID del estudio
  • El UID de la serie
  • UID de instancia
  • Un token de acceso

En el siguiente ejemplo, se muestra una solicitud GET mediante 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"

Si la solicitud se realiza correctamente, el archivo JPEG se escribe en tu máquina.

PowerShell

Para recuperar un solo marco en formato JPEG, realiza una solicitud GET y especifica la siguiente información

  • El nombre del conjunto de datos superior
  • El nombre del almacén de DICOM
  • El UID del estudio
  • El UID de la serie
  • UID de instancia
  • Un token de acceso

En el siguiente ejemplo, se muestra una solicitud GET mediante 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"

Si la solicitud se realiza correctamente, el archivo JPEG se escribe en tu máquina.

Recupera todas las imágenes de diapositivas completas

Para recuperar toda la instancia, que contiene las WSI, usa el método instances.retrieveInstance:

curl

Para recuperar una instancia completa, realiza una solicitud GET y especifica la siguiente información:

  • El nombre del conjunto de datos superior
  • El nombre del almacén de DICOM
  • El UID del estudio
  • El UID de la serie
  • UID de instancia
  • Un token de acceso

En el siguiente ejemplo, se muestra una solicitud GET mediante 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"

Si la solicitud se realiza correctamente, el archivo DICOM se escribe en su máquina.

PowerShell

Para recuperar una instancia completa, realiza una solicitud GET y especifica la siguiente información:

  • El nombre del conjunto de datos superior
  • El nombre del almacén de DICOM
  • El UID del estudio
  • El UID de la serie
  • UID de instancia
  • Un token de acceso

En el siguiente ejemplo, se muestra una solicitud GET mediante 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"

Si la solicitud se realiza correctamente, el archivo DICOM se escribe en su máquina.

Visualiza una diapositiva con un visualizador de imágenes de diapositivas completas

En las secciones anteriores, se mostraba cómo ver los metadatos de una WSI y recuperar mosaicos individuales. Para ver la WSI completa, debes usar un visualizador de WSI con la tecnología de DICOMweb.

Los siguientes visualizadores son compatibles con la API de Cloud Healthcare:

Ve archivos DICOM de WSI convertidos con el visualizador WSI de DICOMweb

Completa las siguientes secciones para usar el visualizador de WSI de DICOMweb para ver los archivos DICOM de WSI convertidos.

Descarga el visualizador

Descarga el visualizador WSI de DICOMweb:

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

Obtén el secreto del cliente

Un secreto de cliente autentica a un usuario cuando accede a una aplicación. Incorporas el secreto del cliente en el código fuente del visualizador WSI de DICOMweb. Para obtener un secreto del cliente, completa los siguientes pasos:

  1. Ve a la página Credenciales en Google Cloud Console.
    Ir a la página Credenciales

  2. Haz clic en Crear credenciales y, luego, selecciona ID de cliente OAuth.

  3. En Tipo de aplicación, selecciona Aplicación web.

  4. Agrega un nombre de tu elección.

  5. En Orígenes de JavaScript autorizado y URI de redireccionamiento autorizado, ingresa http://localhost:8000.

  6. Haz clic en Crear y, luego, en Aceptar en la ventana Cliente de OAuth que aparecerá. Copia el ID de cliente para usarlo en la próxima sección.

Configura el secreto del cliente en el visualizador

Completa los siguientes pasos con el ID de cliente que obtuviste en la sección anterior:

  1. En el directorio dicomweb-wsi-viewer, abre el archivo viewer.js.

  2. Reemplaza la siguiente línea para que contenga tu ID de cliente.

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

    La línea debería verse como el siguiente ejemplo:

    const CLIENT_ID = 'PROJECT_ID-VALUE.apps.googleusercontent.com';
    
  3. Guarde el archivo.

Si aún no configuraste la pantalla de consentimiento de OAuth de tu proyecto de Google Cloud, sigue estos pasos:

  1. Ve a la pantalla de consentimiento de OAuth.
    Ve a la pantalla de consentimiento de OAuth

  2. En Correo electrónico de asistencia, selecciona la dirección de correo electrónico que deseas mostrar como contacto público. Esta debe ser tu dirección de correo electrónico o un Grupo de Google de tu propiedad.

  3. Ingresa el Nombre de la aplicación que deseas mostrar.

  4. Haz clic en Agregar alcance. En el cuadro de diálogo que aparecerá, ingresa https://www.googleapis.com/auth/cloud-healthcare y, luego, haz clic en Agregar.

  5. Haga clic en Save.

Para cambiar la información en la pantalla de consentimiento de OAuth más tarde, como el nombre del producto o la dirección de correo electrónico, repite los pasos anteriores para configurarla.

Si ya configuraste la pantalla de consentimiento de OAuth de tu proyecto de Google Cloud, debes agregar https://www.googleapis.com/auth/cloud-healthcare en el cuadro de diálogo Agregar alcance.

Ejecuta el visualizador WSI de DICOMweb

  1. En el directorio dicomweb-wsi-viewer, ejecuta el siguiente comando:

    python -m SimpleHTTPServer 8000
    
  2. Navega a https://localhost:8000 en la máquina en la que ejecutaste el comando anterior.

  3. En la IU, haz clic en Acceder/Autorizar para acceder a la pantalla de consentimiento de OAuth y otorga permiso de visualizador a fin de acceder a tu proyecto de Google Cloud y a los recursos de la API de Cloud Healthcare.