Usar a Cloud Healthcare API para patologia digital

Esta página explica como armazenar, aceder, visualizar e usar imagens digitais de lâminas inteiras (WSIs) de patologia através da Cloud Healthcare API.

Vista geral

A patologia digital está a transformar a imagiologia médica, permitindo que as lâminas de vidro convencionais sejam arquivadas, visualizadas e avaliadas em fluxos de trabalho digitais. Entre as suas muitas vantagens, a patologia digital permite uma consulta rápida, capacita os pacientes com maior acesso e compreensão, e melhora os fluxos de trabalho clínicos e de investigação, permitindo que as imagens de patologia sejam uma fonte de dados para a IA de vanguarda.

A patologia digital de lâminas inteiras é representada como uma coleção de imagens. Normalmente, os maiores têm vários gigabytes. O DICOM é a norma interoperável para a patologia digital e permite que a criação de imagens de lâminas inteiras e os respetivos metadados associados sejam armazenados de forma eficiente e referenciados a partir de registos de saúde eletrónicos (por exemplo, FHIR) e acedidos através de APIs neutras de fornecedores de elevado desempenho.

A representação DICOM para patologia digital foi concebida para suportar exemplos de utilização interativos de alto desempenho que requerem a capacidade de deslocar rapidamente a imagem e aumentar o zoom em imagens de gigapíxeis. O DICOM representa a patologia digital de lâminas inteiras como uma pirâmide de imagens. Os níveis da pirâmide correspondem a ampliações da imagem do diapositivo inteiro. As imagens representadas num nível da pirâmide são armazenadas como uma coleção de imagens mais pequenas, ou frames. A norma define APIs que permitem o armazenamento, a pesquisa (deteção de imagens disponíveis), a obtenção de metadados e a obtenção de imagens ao nível da pirâmide (ampliação) ou a seleção de sub-regiões (frames) num nível da pirâmide.

As APIs DICOM suportam respostas de metadados em JSON e XML, e a Cloud Healthcare API também suporta o acesso a metadados através do BigQuery para permitir consultas relacionais complexas que juntam os metadados DICOM a outras origens de dados. As imagens podem ser devolvidas como armazenadas ou convertidas (transcodificadas) para formatos alternativos.

Geração de imagens DICOM de lâminas inteiras

Um número crescente de scanners de lâminas de patologia digital suporta a geração de imagens DICOM diretamente a partir do scanner de lâminas. Em muitos casos, é possível carregar diretamente imagens DICOM produzidas por scanners de lâminas para a Cloud Healthcare API através das APIs DICOM DICOMweb ou DIMSE. Se os scanners de lâminas que produzem DICOM não estiverem ligados a um sistema de informações de laboratório (LIS), pode ser necessário aumentar os metadados não relacionados com píxeis no DICOM para adicionar (por exemplo, o paciente) ou modificar (por exemplo, Study Instance UID) metadados antes da sua utilização num PACS de imagens clínicas.

Historicamente, os scanners de diapositivos geraram imagens em formatos proprietários. O pipeline de transformação pode ser usado para transformar formatos suportados pelo OpenSlide em DICOM, unir metadados personalizados com o DICOM gerado e carregar o DICOM gerado diretamente para a Cloud Healthcare API. Esta solução foi usada para suportar a transformação de arquivos de vários petabytes em DICOM.

As ferramentas que podem ser usadas para converter imagens de patologia digital em DICOM incluem:

As instâncias DICOM podem ser importadas programaticamente para a Cloud Healthcare API através do: DICOMweb, DIMSE e do Cloud Storage.

Níveis de armazenamento de imagens

A API Cloud Healthcare suporta a divisão em camadas de armazenamento ao nível de uma instância DICOM. Para imagens de lâminas inteiras, isto significa que cada ampliação de uma pirâmide de imagens de patologia digital pode ser armazenada no nível que melhor se adequa à sua utilização esperada. O nível de armazenamento de uma instância DICOM afeta o custo do armazenamento, da obtenção e, em alguns casos, da eliminação de dados. A hierarquização do armazenamento não afeta o desempenho do acesso aos dados. Por predefinição, todas as instâncias DICOM são armazenadas no nível de armazenamento padrão. A API Cloud Healthcare fornece uma API para ver e alterar a classe de armazenamento de instâncias DICOM. Além disso, pode usar uma solução de gestão do ciclo de vida de imagens (ILM) para automatizar a movimentação de instâncias DICOM entre níveis de armazenamento com base em heurísticas. A solução pode automatizar a transição de uma instância DICOM através de níveis de armazenamento com base no respetivo tamanho, idade e padrões de acesso.

NOTA: o armazenamento de arquivo aumenta o custo da obtenção de dados do Pixel. As taxas de obtenção de dados são pagas em função do tamanho dos dados obtidos e não do tamanho dos dados armazenados. Para a criação de imagens de lâminas inteiras, esta é uma distinção importante, uma vez que os dados de píxeis podem ser obtidos através de APIs ao nível da moldura e da instância. A obtenção de imagens de arquivo através de APIs de frames pode ser particularmente vantajosa, do ponto de vista do custo, quando é necessário um subconjunto dos frames de uma instância, uma vez que as cobranças de obtenção de dados são feitas com base no tamanho dos dados devolvidos e não no tamanho da instância armazenada.

Visualização interativa

A Cloud Healthcare API pode ser usada para suportar a visualização interativa de imagens de lâminas inteiras para aplicações que variam entre visualizadores Web sem pegada (JavaScript) e aplicações cliente autónomas. Os seguintes visualizadores de código aberto foram testados para serem compatíveis com a Cloud Healthcare API:

Melhorar o desempenho da visualização interativa

O proxy DICOM de patologia digital é uma solução da Google Research que pode usar para melhorar o desempenho da publicação de frames para aplicações de imagens de lâminas inteiras interativas. Quando implementado, o proxy DICOM de patologia digital envolve a Cloud Healthcare API e realiza a colocação em cache de frames just-in-time para fornecer preferencialmente imagens de frames a partir de uma cache do Memorystore for Redis na memória.

Normalização de cores de imagens de lâminas inteiras

A norma DICOM requer que as WSIs contenham um perfil de cores ICC que defina o espaço da cor do scanner de lâminas que adquiriu as imagens. Este espaço de cores pode diferir significativamente do espaço de cores usado por ecrãs ou outros scanners de diapositivos. Se forem visualizadas sem o perfil ICC incorporado, as cores das imagens aparecem frequentemente substancialmente mais ou menos saturadas do que o esperado. A Cloud Healthcare API fornece APIs para obter o perfil ICC incorporado numa instância DICOM e para transformar as imagens obtidas num espaço de cores de referência.

  • Pode obter o perfil ICC incorporado numa instância DICOM através da API de dados em massa ou da API de obtenção de instâncias. Em seguida, pode transformar as imagens obtidas no espaço de cores do scanner de diapositivos através de bibliotecas como Little-CMS(escrito em C++) e Pillow (escrito em Python).

  • A biblioteca Python EZ-WSI DICOMweb suporta a transformação do perfil ICC como parte das respetivas APIs de obtenção de imagens e geração de incorporações de aprendizagem automática.

Aprendizagem automática

A Path Foundation é um modelo de base desenvolvido pela Google Research para acelerar o desenvolvimento da aprendizagem automática (ML) na patologia digital.

O modelo converte um fragmento (uma sub-região) de imagens de patologia numa incorporação, que é uma lista de números de vírgula flutuante. Esta incorporação serve como uma representação da imagem aprendida pela máquina. A utilização de incorporações de imagens como dados de entrada pode ajudar a reduzir a quantidade total de dados e os recursos de computação necessários para desenvolver modelos de ML eficazes.

Pode implementar a Path Foundation a partir do Model Garden para Google Cloud . Também está disponível como código aberto com pesos abertos no Hugging Face.

Para ajudar na geração de incorporações, a biblioteca Python de código aberto EZ-WSI DICOMweb inclui interfaces (consulte o guia de introdução para gerar incorporações de patologia no bloco de notas do Colab) que simplificam a transformação de imagens armazenadas na Cloud Healthcare API em incorporações. Consulte o notebook do Colab para preparar um classificador linear de patologia digital a partir de imagens armazenadas no DICOM para obter informações sobre como usar o EZ-WSI DICOMweb e as Pathology Foundations para preparar um classificador linear a partir de imagens DICOM de lâminas inteiras.

Obtenção programática de metadados e imagens de píxeis

Esta secção descreve os métodos para obter metadados e imagens de patologia digital da Cloud Healthcare API.

Modelo de informações DICOM

O DICOM usa três identificadores exclusivos (UIDs) para identificar de forma exclusiva as imagens:

  • UID da instância do estudo: identifica todas as imagens adquiridas ou geradas a partir de um único exame do paciente.
  • UID da instância da série: identifica cada aquisição de imagem médica nesse exame (por exemplo, uma análise única de uma lâmina de patologia).
  • UID da instância SOP: identifica cada imagem adquirida ou gerada como parte dessa aquisição.

Por exemplo, os scanners de lâminas geram frequentemente várias imagens para captar uma lâmina de vidro completa. Estas imagens podem incluir:

  • A área de tecido com imagem a várias ampliações.
  • A etiqueta do diapositivo.
  • Uma imagem do slide completo.
  • Dados que descrevem a operação de digitalização de diapositivos.

Apresentar séries DICOM de patologia digital

Para identificar imagens de microscopia de lâminas, pesquise séries DICOM em que a etiqueta Modality (0008,0060) seja SM. Pode usar o método dicomStores.searchForSeries para esta pesquisa.

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o ID do seu Google Cloud projeto
  • LOCATION: a localização do conjunto de dados
  • DATASET_ID: o conjunto de dados principal do arquivo DICOM
  • DICOM_STORE_ID: o ID da loja DICOM

Para enviar o seu pedido, escolha uma destas opções:

curl

Execute o seguinte comando:

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

PowerShell

Execute o seguinte comando:

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

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/series?Modality=SM" | Select-Object -Expand Content

Explorador de APIs

Abra a página de referência do método. O painel APIs Explorer é aberto no lado direito da página. Pode interagir com esta ferramenta para enviar pedidos. Preencha todos os campos obrigatórios e clique em Executar.

Deve receber uma resposta JSON semelhante à seguinte:

Obter metadados DICOM de patologia digital

Uma série DICOM para imagens de lâminas inteiras contém normalmente várias instâncias. Estas instâncias DICOM podem representar diferentes níveis da pirâmide de imagens ou regiões adicionais da lâmina com imagem.

Para ver os metadados da instância de uma instância no estudo, chame o método dicomStores.searchForInstances:

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o ID do seu Google Cloud projeto
  • LOCATION: a localização do conjunto de dados
  • DATASET_ID: o conjunto de dados principal do arquivo DICOM
  • DICOM_STORE_ID: o ID da loja DICOM
  • STUDY_INSTANCE_UID: o identificador exclusivo (UID) da instância do estudo

Para enviar o seu pedido, escolha uma destas opções:

curl

Execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth 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"

PowerShell

Execute o seguinte comando:

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

Invoke-WebRequest `
-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" | Select-Object -Expand Content

Explorador de APIs

Abra a página de referência do método. O painel APIs Explorer é aberto no lado direito da página. Pode interagir com esta ferramenta para enviar pedidos. Preencha todos os campos obrigatórios e clique em Executar.

Deve receber uma resposta JSON semelhante à seguinte:

Obter dados de píxeis de imagens de lâminas inteiras

Pode obter dados de píxeis de imagens de lâminas inteiras de forma programática através do DICOMweb. A Cloud Healthcare API também suporta a obtenção através de um adaptador DICOM com protocolos DIMSE.

A maioria das imagens de lâminas inteiras são imagens multiframe. Para estes, a Cloud Healthcare API oferece acesso direto aos dados de píxeis através das APIs de frames DICOM e frames renderizados.

Em alternativa, pode obter dados de píxeis indiretamente ao obter uma instância DICOM completa e, em seguida, descodificar programaticamente as frames codificadas dessa instância.

Considerações sobre o desempenho para obter frames:

  • Geralmente, a obtenção de uma instância completa é mais rápida por frame do que a obtenção de frames em lote.
  • A obtenção de frames em lote é geralmente mais rápida do que a obtenção de frames individuais.

EZ-WSI DICOMweb

O EZ-WSI DICOMweb é uma biblioteca Python de código aberto. Simplifica a obtenção de dados de píxeis de patologia digital da Cloud Healthcare API ao abstrair as chamadas DICOMweb subjacentes. A biblioteca pode ajudar a acelerar a obtenção de frames em muitos exemplos de utilização, convertendo pedidos de imagens em série em pedidos em lote. A obtenção em lote de dados de frames reduz frequentemente o tempo total e a quota de armazenamento DICOM necessários.

Está disponível um bloco de notas do Colab que demonstra a biblioteca.

API DICOMweb instance retrieval

A API DICOMweb Instance Retrieval devolve uma instância DICOM binária. Esta instância contém todos os metadados e dados de píxeis armazenados na mesma.

Pode descodificar os dados binários devolvidos através de várias bibliotecas, como:

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o ID do seu Google Cloud projeto
  • LOCATION: a localização do conjunto de dados
  • DATASET_ID: o conjunto de dados principal do arquivo DICOM
  • DICOM_STORE_ID: o ID da loja DICOM
  • STUDY_INSTANCE_UID: o identificador exclusivo da instância do estudo
  • SERIES_INSTANCE_UID: o identificador exclusivo da instância da série
  • INSTANCE_UID: o identificador exclusivo da instância
  • OUTPUT_FILE: ficheiro no qual escrever a instância DICOM.

Para enviar o seu pedido, escolha uma destas opções:

curl

Execute o seguinte comando:

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

PowerShell

Execute o seguinte comando:

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

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-OutFile OUTPUT_FILE `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID"

Explorador de APIs

Abra a página de referência do método. O painel APIs Explorer é aberto no lado direito da página. Pode interagir com esta ferramenta para enviar pedidos. Preencha todos os campos obrigatórios e clique em Executar.

O ficheiro OUTPUT_FILE deve ser preenchido com conteúdo

DICOMweb frame API

A DICOMweb frame API permite a obtenção de um ou mais frames de uma instância DICOM. Os dados de píxeis obtidos através da API podem ser pedidos transcodificados para formatos diferentes dos armazenados nativamente no arquivo DICOM.

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o ID do seu Google Cloud projeto
  • LOCATION: a localização do conjunto de dados
  • DATASET_ID: o conjunto de dados principal do arquivo DICOM
  • DICOM_STORE_ID: o ID da loja DICOM
  • STUDY_INSTANCE_UID: o identificador exclusivo da instância do estudo
  • SERIES_INSTANCE_UID: o identificador exclusivo da instância da série
  • INSTANCE_UID: o identificador exclusivo da instância
  • FRAMES: os números de frames para obter dados de píxeis

Para enviar o seu pedido, escolha uma destas opções:

curl

Execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: multipart/related; type="image/jpeg"; transfer-syntax=1.2.840.10008.1.2.4.50" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/FRAMES"

PowerShell

Execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "Accept" = "multipart/related; type="image/jpeg"; transfer-syntax=1.2.840.10008.1.2.4.50" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/FRAMES" | Select-Object -Expand Content

Explorador de APIs

Abra a página de referência do método. O painel APIs Explorer é aberto no lado direito da página. Pode interagir com esta ferramenta para enviar pedidos. Preencha todos os campos obrigatórios e clique em Executar.

Deve receber uma resposta multipart que codifica as imagens pedidas.

DICOMweb rendered frame API

A API DICOMweb rendered frame permite a conversão do lado do servidor de frames num formato de imagem padrão (por exemplo, JPEG e PNG).

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o ID do seu Google Cloud projeto
  • LOCATION: a localização do conjunto de dados
  • DATASET_ID: o conjunto de dados principal do arquivo DICOM
  • DICOM_STORE_ID: o ID da loja DICOM
  • STUDY_INSTANCE_UID: o identificador exclusivo da instância do estudo
  • SERIES_INSTANCE_UID: o identificador exclusivo da instância da série
  • INSTANCE_UID: o identificador exclusivo da instância
  • FRAME: o número de frames para obter dados de píxeis

Para enviar o seu pedido, escolha uma destas opções:

curl

Execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: image/png" \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/FRAME/rendered"

PowerShell

Execute o seguinte comando:

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

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/frames/FRAME/rendered" | Select-Object -Expand Content

Explorador de APIs

Abra a página de referência do método. O painel APIs Explorer é aberto no lado direito da página. Pode interagir com esta ferramenta para enviar pedidos. Preencha todos os campos obrigatórios e clique em Executar.

Deve receber uma resposta binária que codifica as imagens pedidas.

Usar a opção de obtenção de dados em massa para obter um perfil ICC incorporado numa instância DICOM

Pode usar o DICOMweb retrieve bulkdata para obter diretamente bytes do perfil ICC (International Color Consortium) incorporados numa instância DICOM.

REST

Antes de usar qualquer um dos dados do pedido, faça as seguintes substituições:

  • PROJECT_ID: o ID do seu Google Cloud projeto
  • LOCATION: a localização do conjunto de dados
  • DATASET_ID: o conjunto de dados principal do arquivo DICOM
  • DICOM_STORE_ID: o ID da loja DICOM
  • STUDY_INSTANCE_UID: o identificador exclusivo da instância do estudo
  • SERIES_INSTANCE_UID: o identificador exclusivo da instância da série
  • INSTANCE_UID: o identificador exclusivo da instância
  • OUTPUT_FILE: ficheiro no qual escrever a instância do perfil ICC.

Para enviar o seu pedido, escolha uma destas opções:

curl

Execute o seguinte comando:

curl -X GET \
-H "Authorization: Bearer $(gcloud auth print-access-token)" \
-H "Accept: application/octet-stream; transfer-syntax=*" \
--output OUTPUT_FILE \
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/bulkdata/00480105/0/00282000"

PowerShell

Execute o seguinte comando:

$cred = gcloud auth print-access-token
$headers = @{ "Authorization" = "Bearer $cred"; "Accept" = "application/octet-stream; transfer-syntax=*" }

Invoke-WebRequest `
-Method GET `
-Headers $headers `
-OutFile OUTPUT_FILE `
-Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID/dicomWeb/studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID/bulkdata/00480105/0/00282000"

Explorador de APIs

Abra a página de referência do método. O painel APIs Explorer é aberto no lado direito da página. Pode interagir com esta ferramenta para enviar pedidos. Preencha todos os campos obrigatórios e clique em Executar.

O ficheiro OUTPUT_FILE deve ser preenchido com conteúdo