Importar e exportar dados DICOM através do Cloud Storage

Esta página explica como exportar instâncias DICOM para o Cloud Storage e importar objetos DICOM do mesmo. Normalmente, uma instância DICOM é uma imagem, mas pode ser outro tipo de dados persistentes, como um relatório estruturado. Um objeto DICOM no Cloud Storage é uma instância DICOM residente no Cloud Storage. Para mais informações, consulte o artigo Cloud Storage.

Definir autorizações do Cloud Storage

Antes de exportar e importar dados DICOM para e a partir do Cloud Storage, tem de conceder autorizações adicionais à conta de serviço do agente do serviço Google Cloud Healthcare. Para mais informações, consulte o artigo Autorizações do Cloud Storage para a loja DICOM.

Importar objetos DICOM

Para importar vários ficheiros de instâncias DICOM para um arquivo DICOM, pode usar qualquer um dos seguintes métodos:

Os exemplos seguintes mostram como importar objetos DICOM de um contentor do Cloud Storage.

Consola

Para importar objetos DICOM de um contentor do Cloud Storage, conclua os seguintes passos:

  1. Na Google Cloud consola, aceda à página Conjuntos de dados.
    Aceder a conjuntos de dados
  2. Clique no conjunto de dados que contém o arquivo DICOM para o qual está a importar objetos DICOM.
  3. Na lista de arquivos de dados, escolha Importar na lista Ações para o arquivo DICOM.

    É apresentada a página Importar para o arquivo DICOM.
  4. Na lista Projeto, selecione um projeto do Cloud Storage.
  5. Na lista Localização, selecione um contentor do Cloud Storage.
  6. Para definir uma localização específica para importar ficheiros, faça o seguinte:
    1. Expanda Opções avançadas.
    2. Selecione Substituir caminho do Cloud Storage.
    3. Para definir uma origem específica para importar ficheiros, defina o caminho usando as seguintes variáveis na caixa de texto Localização:
      • *: corresponde a carateres que não são separadores.
      • **: corresponde a carateres, incluindo separadores. Pode ser usado com uma extensão de nome de ficheiro para corresponder a todos os ficheiros do mesmo tipo.
      • ?: corresponde a 1 caráter.
  7. Clique em Importar para importar objetos DICOM da origem definida.
  8. Para acompanhar o estado da operação, clique no separador Operações. Após a conclusão da operação, são apresentadas as seguintes indicações:
    • A secção Estado da operação de longa duração tem uma marca de verificação verde no cabeçalho OK.
    • A secção Vista geral tem uma marca de verificação verde e um indicador OK na mesma linha que o ID da operação.
    Se encontrar erros, clique em Ações e, de seguida, em Ver detalhes no Cloud Logging.

gcloud

Para importar objetos DICOM de um contentor do Cloud Storage, use o comando gcloud healthcare dicom-stores import gcs. Especifique o nome do conjunto de dados principal, o nome do arquivo DICOM e a localização do objeto num contentor do Cloud Storage.

  • A localização dos ficheiros no contentor é arbitrária e não tem de seguir exatamente o formato especificado no exemplo seguinte.
  • Quando especifica a localização dos objetos DICOM no Cloud Storage, pode usar carateres universais para importar vários ficheiros de um ou mais diretórios. Os seguintes carateres universais são suportados:
    • Use * para corresponder a 0 ou mais carateres não separadores. Por exemplo, gs://BUCKET/DIRECTORY/Example*.dcm corresponde a Example.dcm e Example22.dcm em DIRECTORY.
    • Use ** para representar 0 ou mais carateres (incluindo separadores). Tem de ser usado no final de um caminho e sem outros carateres universais no caminho. Também pode ser usado com uma extensão de nome de ficheiro (como .dcm), que importa todos os ficheiros com a extensão de nome de ficheiro no diretório especificado e respetivos subdiretórios. Por exemplo, gs://BUCKET/DIRECTORY/**.dcm importa todos os ficheiros com a extensão do nome de ficheiro .dcm em DIRECTORY e respetivas subdiretorias.
    • Use ? para corresponder a 1 caráter. Por exemplo, gs://BUCKET/DIRECTORY/Example?.dcm corresponde a Example1.dcm, mas não corresponde a Example.dcm nem a Example01.dcm.

O exemplo seguinte mostra como importar objetos DICOM de um contentor do Cloud Storage.

gcloud healthcare dicom-stores import gcs DICOM_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --gcs-uri=gs://BUCKET/DIRECTORY/DICOM_INSTANCE.dcm

A linha de comandos apresenta o ID da operação:

name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID

Para ver o estado da operação, execute o comando gcloud healthcare operations describe e indique OPERATION_ID da resposta:

gcloud healthcare operations describe OPERATION_ID \
  --location=LOCATION \
  --dataset=DATASET_ID

Após a conclusão do comando, a resposta inclui done: true.

done: true
metadata:
'@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata
apiMethodName: google.cloud.healthcare.v1.dicom.DicomService.ImportDicomData
counter:
  success: SUCCESSFUL_INSTANCES
  failure: FAILED_INSTANCES
createTime: "CREATE_TIME"
endTime: "END_TIME"
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
response:
'@type': "..."

API

Para importar objetos DICOM de um contentor do Cloud Storage, use o método projects.locations.datasets.dicomStores.import.

  • A localização dos ficheiros no contentor pode variar e não tem de corresponder ao formato especificado nos exemplos seguintes.
  • Quando especificar a localização dos objetos DICOM no Cloud Storage, use carateres universais para importar vários ficheiros de um ou mais diretórios. Os seguintes carateres universais são suportados:
    • Use * para corresponder a 0 ou mais carateres não separadores. Por exemplo, gs://BUCKET/DIRECTORY/Example*.dcm corresponde a Example.dcm e Example22.dcm em DIRECTORY.
    • Use ** para representar 0 ou mais carateres (incluindo separadores). Tem de ser usado no final de um caminho e sem outros carateres universais no caminho. Também pode ser usado com uma extensão de nome de ficheiro (como .dcm), que importa todos os ficheiros com a extensão de nome de ficheiro no diretório especificado e respetivos subdiretórios. Por exemplo, gs://BUCKET/DIRECTORY/**.dcm importa todos os ficheiros com a extensão do nome de ficheiro .dcm em DIRECTORY e respetivas subdiretorias.
    • Use ? para corresponder a 1 caráter. Por exemplo, gs://BUCKET/DIRECTORY/Example?.dcm corresponde a Example1.dcm, mas não corresponde a Example.dcm nem a Example01.dcm.

REST

  1. Importe o objeto DICOM.

    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
    • BUCKET/PATH/TO/FILE: o caminho para o objeto DICOM no Cloud Storage

    Corpo JSON do pedido:

    {
      "gcsSource": {
        "uri": "gs://BUCKET/PATH/TO/FILE.dcm"
      }
    }
    

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

    curl

    Guarde o corpo do pedido num ficheiro denominado request.json. Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:

    cat > request.json << 'EOF'
    {
      "gcsSource": {
        "uri": "gs://BUCKET/PATH/TO/FILE.dcm"
      }
    }
    EOF

    Em seguida, execute o seguinte comando para enviar o seu pedido REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:import"

    PowerShell

    Guarde o corpo do pedido num ficheiro denominado request.json. Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:

    @'
    {
      "gcsSource": {
        "uri": "gs://BUCKET/PATH/TO/FILE.dcm"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Em seguida, execute o seguinte comando para enviar o seu pedido REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:import" | Select-Object -Expand Content
    O resultado é o seguinte. A resposta contém um identificador para uma operação de longa duração. As operações de longa duração são devolvidas quando as chamadas de métodos podem demorar um período considerável a serem concluídas. Repare no valor de OPERATION_ID. Precisa deste valor no passo seguinte.

  2. Obtenha o estado da operação de execução longa.

    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
    • OPERATION_ID: o ID devolvido pela operação de longa duração

    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/operations/OPERATION_ID"

    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/operations/OPERATION_ID" | Select-Object -Expand Content
    Se a operação de longa duração ainda estiver em execução, o servidor devolve uma resposta com o número de instâncias DICOM pendentes de importação. Quando a LRO termina com êxito, o servidor devolve uma resposta com o estado da operação no formato JSON:

Go

import (
	"context"
	"fmt"
	"io"

	healthcare "google.golang.org/api/healthcare/v1"
)

// importDICOMInstance imports DICOM objects from GCS.
func importDICOMInstance(w io.Writer, projectID, location, datasetID, dicomStoreID, contentURI string) error {
	ctx := context.Background()

	healthcareService, err := healthcare.NewService(ctx)
	if err != nil {
		return fmt.Errorf("healthcare.NewService: %w", err)
	}

	storesService := healthcareService.Projects.Locations.Datasets.DicomStores

	req := &healthcare.ImportDicomDataRequest{
		GcsSource: &healthcare.GoogleCloudHealthcareV1DicomGcsSource{
			Uri: contentURI,
		},
	}
	name := fmt.Sprintf("projects/%s/locations/%s/datasets/%s/dicomStores/%s", projectID, location, datasetID, dicomStoreID)

	lro, err := storesService.Import(name, req).Do()
	if err != nil {
		return fmt.Errorf("Import: %w", err)
	}

	fmt.Fprintf(w, "Import to DICOM store started. Operation: %q\n", lro.Name)
	return nil
}

Java

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.healthcare.v1.CloudHealthcare;
import com.google.api.services.healthcare.v1.CloudHealthcare.Projects.Locations.Datasets.DicomStores;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.GoogleCloudHealthcareV1DicomGcsSource;
import com.google.api.services.healthcare.v1.model.ImportDicomDataRequest;
import com.google.api.services.healthcare.v1.model.Operation;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Collections;

public class DicomStoreImport {
  private static final String DICOM_NAME = "projects/%s/locations/%s/datasets/%s/dicomStores/%s";
  private static final JsonFactory JSON_FACTORY = new GsonFactory();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void dicomStoreImport(String dicomStoreName, String gcsUri) throws IOException {
    // String dicomStoreName =
    //    String.format(
    //        DICOM_NAME, "your-project-id", "your-region-id", "your-dataset-id", "your-dicom-id");
    // String gcsUri = "gs://your-bucket-id/path/to/destination/dir"

    // Initialize the client, which will be used to interact with the service.
    CloudHealthcare client = createClient();

    // Configure where the store should be imported from.
    GoogleCloudHealthcareV1DicomGcsSource gcsSource =
        new GoogleCloudHealthcareV1DicomGcsSource().setUri(gcsUri);
    ImportDicomDataRequest importRequest = new ImportDicomDataRequest().setGcsSource(gcsSource);

    // Create request and configure any parameters.
    DicomStores.CloudHealthcareImport request =
        client
            .projects()
            .locations()
            .datasets()
            .dicomStores()
            .healthcareImport(dicomStoreName, importRequest);

    // Execute the request, wait for the operation to complete, and process the results.
    try {
      Operation operation = request.execute();
      while (operation.getDone() == null || !operation.getDone()) {
        // Update the status of the operation with another request.
        Thread.sleep(500); // Pause for 500ms between requests.
        operation =
            client
                .projects()
                .locations()
                .datasets()
                .operations()
                .get(operation.getName())
                .execute();
      }
      System.out.println("DICOM store import complete." + operation.getResponse());
    } catch (Exception ex) {
      System.out.printf("Error during request execution: %s", ex.toString());
      ex.printStackTrace(System.out);
    }
  }

  private static CloudHealthcare createClient() throws IOException {
    // Use Application Default Credentials (ADC) to authenticate the requests
    // For more information see https://cloud.google.com/docs/authentication/production
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(CloudHealthcareScopes.CLOUD_PLATFORM));

    // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests.
    HttpRequestInitializer requestInitializer =
        request -> {
          new HttpCredentialsAdapter(credential).initialize(request);
          request.setConnectTimeout(60000); // 1 minute connect timeout
          request.setReadTimeout(60000); // 1 minute read timeout
        };

    // Build the client for interacting with the service.
    return new CloudHealthcare.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName("your-application-name")
        .build();
  }
}

Node.js

const google = require('@googleapis/healthcare');
const healthcare = google.healthcare({
  version: 'v1',
  auth: new google.auth.GoogleAuth({
    scopes: ['https://www.googleapis.com/auth/cloud-platform'],
  }),
});
const sleep = ms => {
  return new Promise(resolve => setTimeout(resolve, ms));
};

const importDicomInstance = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const datasetId = 'my-dataset';
  // const dicomStoreId = 'my-dicom-store';
  // const gcsUri = 'my-bucket/my-directory/*.dcm'
  const name = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}/dicomStores/${dicomStoreId}`;
  const request = {
    name,
    resource: {
      // The location of the DICOM instances in Cloud Storage
      gcsSource: {
        uri: `gs://${gcsUri}`,
      },
    },
  };

  const operation =
    await healthcare.projects.locations.datasets.dicomStores.import(request);
  const operationName = operation.data.name;

  const operationRequest = {name: operationName};

  // Wait fifteen seconds for the LRO to finish.
  await sleep(15000);

  // Check the LRO's status
  const operationStatus =
    await healthcare.projects.locations.datasets.operations.get(
      operationRequest
    );

  const {data} = operationStatus;

  if (data.error === undefined) {
    console.log('Successfully imported DICOM instances');
  } else {
    console.log('Encountered errors. Sample error:');
    console.log(
      'Resource on which error occured:',
      data.error.details[0]['sampleErrors'][0]['resource']
    );
    console.log(
      'Error code:',
      data.error.details[0]['sampleErrors'][0]['error']['code']
    );
    console.log(
      'Error message:',
      data.error.details[0]['sampleErrors'][0]['error']['message']
    );
  }
};

importDicomInstance();

Python

def import_dicom_instance(
    project_id, location, dataset_id, dicom_store_id, content_uri
):
    """Imports data into the DICOM store by copying it from the specified
    source.

    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/dicom
    before running the sample."""
    # Imports the Google API Discovery Service.
    from googleapiclient import discovery

    api_version = "v1"
    service_name = "healthcare"
    # Returns an authorized API client by discovering the Healthcare API
    # and using GOOGLE_APPLICATION_CREDENTIALS environment variable.
    client = discovery.build(service_name, api_version)

    # TODO(developer): Uncomment these lines and replace with your values.
    # project_id = 'my-project'  # replace with your GCP project ID
    # location = 'us-central1'  # replace with the parent dataset's location
    # dataset_id = 'my-dataset'  # replace with the DICOM store's parent dataset ID
    # dicom_store_id = 'my-dicom-store'  # replace with the DICOM store's ID
    # content_uri = 'my-bucket/*.dcm'  # replace with a Cloud Storage bucket and DCM files
    dicom_store_parent = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    dicom_store_name = f"{dicom_store_parent}/dicomStores/{dicom_store_id}"

    body = {"gcsSource": {"uri": f"gs://{content_uri}"}}

    # Escape "import()" method keyword because "import"
    # is a reserved keyword in Python
    request = (
        client.projects()
        .locations()
        .datasets()
        .dicomStores()
        .import_(name=dicom_store_name, body=body)
    )

    response = request.execute()
    print(f"Imported DICOM instance: {content_uri}")

    return response

Para obter uma única instância ou estudo de um arquivo DICOM, obtenha dados DICOM usando o serviço Web RESTful de transação de obtenção conforme implementado na Cloud Healthcare API.

Especifique uma classe de armazenamento para importar objetos DICOM (pré-visualização)

Por predefinição, o método projects.locations.datasets.dicomStores.import importa um objeto DICOM para um arquivo DICOM com uma classe de armazenamento padrão. Pode definir a classe de armazenamento quando importa objetos DICOM do Cloud Storage. Para mais informações, consulte o artigo Altere a classe de armazenamento DICOM.

Os exemplos seguintes mostram como especificar a classe de armazenamento quando importa objetos DICOM do Cloud Storage.

REST

Use o método projects.locations.datasets.dicomStores.import.

  1. Importe o objeto DICOM.

    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
    • BUCKET/PATH/TO/FILE: o caminho para o objeto DICOM no Cloud Storage
    • STORAGE_CLASS: a classe de armazenamento do objeto DICOM no arquivo DICOM de STANDARD,NEARLINE, COLDLINE e ARCHIVE

    Corpo JSON do pedido:

    {
      "gcsSource": {
        "uri": "gs://BUCKET/PATH/TO/FILE.dcm"
      },
      "blob_storage_settings": {
        "blob_storage_class": "STORAGE_CLASS"
      }
    }
    

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

    curl

    Guarde o corpo do pedido num ficheiro denominado request.json. Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:

    cat > request.json << 'EOF'
    {
      "gcsSource": {
        "uri": "gs://BUCKET/PATH/TO/FILE.dcm"
      },
      "blob_storage_settings": {
        "blob_storage_class": "STORAGE_CLASS"
      }
    }
    EOF

    Em seguida, execute o seguinte comando para enviar o seu pedido REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:import"

    PowerShell

    Guarde o corpo do pedido num ficheiro denominado request.json. Execute o seguinte comando no terminal para criar ou substituir este ficheiro no diretório atual:

    @'
    {
      "gcsSource": {
        "uri": "gs://BUCKET/PATH/TO/FILE.dcm"
      },
      "blob_storage_settings": {
        "blob_storage_class": "STORAGE_CLASS"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    Em seguida, execute o seguinte comando para enviar o seu pedido REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:import" | Select-Object -Expand Content
    O resultado é o seguinte. A resposta contém um identificador para uma operação de longa duração. As operações de longa duração são devolvidas quando as chamadas de métodos podem demorar um período considerável a serem concluídas. Repare no valor de OPERATION_ID. Precisa deste valor no passo seguinte.

  2. Obtenha o estado da operação de execução longa.

    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
    • OPERATION_ID: o ID devolvido pela operação de longa duração

    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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content
    Se a operação de longa duração ainda estiver em execução, o servidor devolve uma resposta com o número de instâncias DICOM pendentes de importação. Quando a LRO termina, o servidor devolve uma resposta com o estado da operação no formato JSON:

Resolução de problemas de pedidos de importação de DICOM

Se ocorrerem erros durante um pedido de importação DICOM, os erros são registados no Cloud Logging. Para mais informações, consulte o artigo Ver registos de erros nos Registos na nuvem.

Exportar instâncias DICOM

Os exemplos seguintes mostram como exportar instâncias DICOM para um contentor do Cloud Storage. Quando exporta instâncias DICOM de um arquivo DICOM, todas as instâncias no arquivo são exportadas.

Consola

Para exportar instâncias DICOM para o Cloud Storage, conclua os seguintes passos:

  1. Na Google Cloud consola, aceda à página Conjuntos de dados.
    Aceder a conjuntos de dados
  2. Clique no conjunto de dados que contém o arquivo DICOM a partir do qual está a exportar instâncias DICOM.
  3. Na lista de arquivos de dados, escolha Exportar na lista Ações para o arquivo DICOM.
  4. Na página Exportar DICOM Store apresentada, selecione Contentor do Google Cloud Storage.
  5. Na lista Projeto, selecione um projeto do Cloud Storage.
  6. Na lista Localização, selecione um contentor do Cloud Storage.
  7. Em Definições de exportação DICOM, selecione o tipo de ficheiro usado para exportar as instâncias DICOM. Estão disponíveis os seguintes tipos:
    • Ficheiro DICOM (.dcm)
    • octet-stream
    • Imagem (.jpg, .png)
  8. Para definir uma sintaxe de transferência adicional, escolha a sintaxe na lista Sintaxe de transferência.
  9. Clique em Exportar para exportar instâncias DICOM para a localização definida no Cloud Storage.
  10. Para acompanhar o estado da operação, clique no separador Operações. Após a conclusão da operação, são apresentadas as seguintes indicações:
    • A secção Estado da operação de longa duração tem uma marca de verificação verde no cabeçalho OK.
    • A secção Vista geral tem uma marca de verificação verde e um indicador OK na mesma linha que o ID da operação.
    Se encontrar erros, clique em Ações e, de seguida, em Ver detalhes no Cloud Logging.

gcloud

Para exportar instâncias DICOM para um contentor do Cloud Storage, use o comando gcloud healthcare dicom-stores export gcs.

  • Indique o nome do conjunto de dados principal, o nome do arquivo DICOM e o contentor do Cloud Storage de destino.
  • Escreva num diretório ou num contentor do Cloud Storage, em vez de num objeto, porque a Cloud Healthcare API cria um ficheiro .dcm para cada objeto.
  • Se o comando especificar um diretório que não existe, o diretório é criado.

O exemplo seguinte mostra o comando gcloud healthcare dicom-stores export gcs.

gcloud healthcare dicom-stores export gcs DICOM_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --gcs-uri-prefix=gs://BUCKET/DIRECTORY

A linha de comandos apresenta o ID da operação:

name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID

Para ver o estado da operação, execute o comando gcloud healthcare operations describe e indique OPERATION_ID da resposta:

gcloud healthcare operations describe OPERATION_ID \
  --location=LOCATION \
  --dataset=DATASET_ID

Após a conclusão do comando, a resposta inclui done: true.

done: true
metadata:
'@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata
apiMethodName: google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData
counter:
  success: SUCCESSFUL_INSTANCES
  failure: FAILED_INSTANCES
createTime: "CREATE_TIME"
endTime: "END_TIME"
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
response:
'@type': "..."

API

Para exportar instâncias DICOM para um contentor do Cloud Storage, use o método projects.locations.datasets.dicomStores.export.

  • Escreva num diretório ou num contentor do Cloud Storage, em vez de num objeto, porque a Cloud Healthcare API cria um ficheiro .dcm para cada objeto DICOM.
  • Se o comando especificar um diretório que não existe, o diretório é criado.

curl

Para exportar instâncias DICOM, faça um pedido POST e faculte as seguintes informações:

  • O nome e a localização do conjunto de dados principal
  • O nome do arquivo DICOM
  • O contentor de destino do Cloud Storage

O exemplo seguinte mostra um pedido POST através de curl.

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'gcsDestination': {
        'uriPrefix': 'gs://BUCKET/DIRECTORY'
      }
    }" "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"

Se o pedido for bem-sucedido, o servidor devolve a resposta no formato JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

A resposta contém um nome de operação. Para acompanhar o estado da operação, use o método Operation get:

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/operations/OPERATION_ID"

Se o pedido for bem-sucedido, o servidor devolve uma resposta com o estado da operação no formato JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL",
    "counter":{
       "success": SUCCESSFUL_INSTANCES
       "failure": FAILED_INSTANCES
    }
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

Para exportar instâncias DICOM, faça um pedido POST e faculte as seguintes informações:

  • O nome e a localização do conjunto de dados principal
  • O nome do arquivo DICOM
  • O contentor de destino do Cloud Storage

O exemplo seguinte mostra um pedido POST através do Windows PowerShell.

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'gcsDestination': {
      'uriPrefix': 'gs://BUCKET/DIRECTORY'
    }
  }" `
  -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content

Se o pedido for bem-sucedido, o servidor devolve a resposta no formato JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"
}

A resposta contém um nome de operação. Para acompanhar o estado da operação, use o método Operation get:

$cred = gcloud auth application-default 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/operations/OPERATION_ID" | Select-Object -Expand Content

Se o pedido for bem-sucedido, o servidor devolve uma resposta com o estado da operação no formato JSON:

{
  "name": "projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME",
    "logsUrl": "https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL",
    "counter":{
       "success": SUCCESSFUL_INSTANCES
       "failure": FAILED_INSTANCES
    },
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

Go

import (
	"context"
	"fmt"
	"io"

	healthcare "google.golang.org/api/healthcare/v1"
)

// exportDICOMInstance exports DICOM objects to GCS.
func exportDICOMInstance(w io.Writer, projectID, location, datasetID, dicomStoreID, destination string) error {
	ctx := context.Background()

	healthcareService, err := healthcare.NewService(ctx)
	if err != nil {
		return fmt.Errorf("healthcare.NewService: %w", err)
	}

	storesService := healthcareService.Projects.Locations.Datasets.DicomStores

	req := &healthcare.ExportDicomDataRequest{
		GcsDestination: &healthcare.GoogleCloudHealthcareV1DicomGcsDestination{
			UriPrefix: destination, // "gs://my-bucket/path/to/prefix/"
		},
	}
	name := fmt.Sprintf("projects/%s/locations/%s/datasets/%s/dicomStores/%s", projectID, location, datasetID, dicomStoreID)

	lro, err := storesService.Export(name, req).Do()
	if err != nil {
		return fmt.Errorf("Export: %w", err)
	}

	fmt.Fprintf(w, "Export to DICOM store started. Operation: %q\n", lro.Name)
	return nil
}

Java

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.healthcare.v1.CloudHealthcare;
import com.google.api.services.healthcare.v1.CloudHealthcare.Projects.Locations.Datasets.DicomStores;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.ExportDicomDataRequest;
import com.google.api.services.healthcare.v1.model.GoogleCloudHealthcareV1DicomGcsDestination;
import com.google.api.services.healthcare.v1.model.Operation;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Collections;

public class DicomStoreExport {
  private static final String DICOM_NAME = "projects/%s/locations/%s/datasets/%s/dicomStores/%s";
  private static final JsonFactory JSON_FACTORY = new GsonFactory();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void dicomStoreExport(String dicomStoreName, String gcsUri) throws IOException {
    // String dicomStoreName =
    //    String.format(
    //        DICOM_NAME, "your-project-id", "your-region-id", "your-dataset-id", "your-dicom-id");
    // String gcsUri = "gs://your-bucket-id/path/to/destination/dir"

    // Initialize the client, which will be used to interact with the service.
    CloudHealthcare client = createClient();

    // Configure where the store will be exported too.
    GoogleCloudHealthcareV1DicomGcsDestination gcsDestination =
        new GoogleCloudHealthcareV1DicomGcsDestination().setUriPrefix(gcsUri);
    ExportDicomDataRequest exportRequest =
        new ExportDicomDataRequest().setGcsDestination(gcsDestination);

    // Create request and configure any parameters.
    DicomStores.Export request =
        client
            .projects()
            .locations()
            .datasets()
            .dicomStores()
            .export(dicomStoreName, exportRequest);

    // Execute the request, wait for the operation to complete, and process the results.
    try {
      Operation operation = request.execute();
      while (operation.getDone() == null || !operation.getDone()) {
        // Update the status of the operation with another request.
        Thread.sleep(500); // Pause for 500ms between requests.
        operation =
            client
                .projects()
                .locations()
                .datasets()
                .operations()
                .get(operation.getName())
                .execute();
      }
      System.out.println("DICOM store export complete." + operation.getResponse());
    } catch (Exception ex) {
      System.out.printf("Error during request execution: %s", ex.toString());
      ex.printStackTrace(System.out);
    }
  }

  private static CloudHealthcare createClient() throws IOException {
    // Use Application Default Credentials (ADC) to authenticate the requests
    // For more information see https://cloud.google.com/docs/authentication/production
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(CloudHealthcareScopes.CLOUD_PLATFORM));

    // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests.
    HttpRequestInitializer requestInitializer =
        request -> {
          new HttpCredentialsAdapter(credential).initialize(request);
          request.setConnectTimeout(60000); // 1 minute connect timeout
          request.setReadTimeout(60000); // 1 minute read timeout
        };

    // Build the client for interacting with the service.
    return new CloudHealthcare.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName("your-application-name")
        .build();
  }
}

Node.js

const google = require('@googleapis/healthcare');
const healthcare = google.healthcare({
  version: 'v1',
  auth: new google.auth.GoogleAuth({
    scopes: ['https://www.googleapis.com/auth/cloud-platform'],
  }),
});

const exportDicomInstanceGcs = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const datasetId = 'my-dataset';
  // const dicomStoreId = 'my-dicom-store';
  // const gcsUri = 'my-bucket/my-directory'
  const name = `projects/${projectId}/locations/${cloudRegion}/datasets/${datasetId}/dicomStores/${dicomStoreId}`;
  const request = {
    name,
    resource: {
      gcsDestination: {
        // The destination location of the DICOM instances in Cloud Storage
        uriPrefix: `gs://${gcsUri}`,
        // The format to use for the output files, per the MIME types supported in the DICOM spec
        mimeType: 'application/dicom',
      },
    },
  };

  await healthcare.projects.locations.datasets.dicomStores.export(request);
  console.log(`Exported DICOM instances to ${gcsUri}`);
};

exportDicomInstanceGcs();

Python

def export_dicom_instance(project_id, location, dataset_id, dicom_store_id, uri_prefix):
    """Export data to a Google Cloud Storage bucket by copying
    it from the DICOM store.

    See https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/dicom
    before running the sample."""
    # Imports the Google API Discovery Service.
    from googleapiclient import discovery

    api_version = "v1"
    service_name = "healthcare"
    # Returns an authorized API client by discovering the Healthcare API
    # and using GOOGLE_APPLICATION_CREDENTIALS environment variable.
    client = discovery.build(service_name, api_version)

    # TODO(developer): Uncomment these lines and replace with your values.
    # project_id = 'my-project'  # replace with your GCP project ID
    # location = 'us-central1'  # replace with the parent dataset's location
    # dataset_id = 'my-dataset'  # replace with the DICOM store's parent dataset ID
    # dicom_store_id = 'my-dicom-store'  # replace with the DICOM store's ID
    # uri_prefix = 'my-bucket'  # replace with a Cloud Storage bucket
    dicom_store_parent = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    dicom_store_name = f"{dicom_store_parent}/dicomStores/{dicom_store_id}"

    body = {"gcsDestination": {"uriPrefix": f"gs://{uri_prefix}"}}

    request = (
        client.projects()
        .locations()
        .datasets()
        .dicomStores()
        .export(name=dicom_store_name, body=body)
    )

    response = request.execute()
    print(f"Exported DICOM instances to bucket: gs://{uri_prefix}")

    return response

Exportar instâncias DICOM através de filtros

Por predefinição, quando exporta ficheiros DICOM para o Cloud Storage, todos os ficheiros DICOM na loja DICOM são exportados. Da mesma forma, quando exporta metadados DICOM para o BigQuery, os metadados de todos os dados DICOM no arquivo DICOM são exportados.

Pode exportar um subconjunto de dados ou metadados DICOM através de um ficheiro de filtro.

Configure um ficheiro de filtro

  • Cada linha no ficheiro de filtros define o estudo, a série ou a instância e usa o formato /studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID/instances/INSTANCE_UID.
  • Pode truncar uma linha para especificar o nível em que o filtro funciona. Por exemplo, pode selecionar um estudo completo especificando /studies/STUDY_INSTANCE_UID ou pode selecionar uma série completa especificando /studies/STUDY_INSTANCE_UID/series/SERIES_INSTANCE_UID.

Considere o seguinte ficheiro de filtro:

/studies/1.123.456.789
/studies/1.666.333.111/series/123.456
/studies/1.666.333.111/series/567.890
/studies/1.888.999.222/series/123.456/instances/111
/studies/1.888.999.222/series/123.456/instances/222
/studies/1.888.999.222/series/123.456/instances/333

Este ficheiro de filtro de exemplo aplica-se ao seguinte:

  • Todo o estudo com o UID da instância do estudo como 1.123.456.789
  • Duas séries separadas com UIDs de instância de série como 123.456 e 567.890 no estudo 1.666.333.111
  • Três instâncias individuais com IDs de instância como 111, 222 e 333 no estudo 1.888.999.222 e na série 123.456

Crie um ficheiro de filtro com o BigQuery

Para criar um ficheiro de filtros com o BigQuery, tem de exportar primeiro os metadados do seu arquivo DICOM para o BigQuery. Os metadados exportados mostram os UIDs de estudo, série e instância dos dados DICOM no seu arquivo DICOM.

Depois de exportar os metadados, conclua os seguintes passos:

  1. Execute uma consulta para devolver os UIDs do estudo, da série e das instâncias que quer adicionar ao ficheiro de filtros.

    Por exemplo, a consulta seguinte mostra como concatenar os UIDs do estudo, da série e da instância para corresponder aos requisitos do formato de ficheiro de filtro:

    SELECT CONCAT
        ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
        [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
  2. Opcional: se a consulta devolver um conjunto de resultados grande que exceda o tamanho máximo da resposta, guarde os resultados da consulta numa nova tabela de destino no BigQuery.

  3. Guarde os resultados da consulta num ficheiro e exporte-o para o Cloud Storage. Se guardou os resultados da consulta numa nova tabela de destino no passo 2, consulte Exportar dados da tabela para exportar o conteúdo da tabela para o Cloud Storage.

  4. Edite o ficheiro exportado conforme necessário e inclua-o no seu pedido para alterar a classe de armazenamento de vários objetos DICOM.

Crie um ficheiro de filtro manualmente

Para criar um ficheiro de filtro manualmente, faça o seguinte:

  1. Crie um ficheiro de filtro que contenha os objetos DICOM nos quais está a aplicar o filtro.
  2. Carregue o ficheiro de filtro para o Cloud Storage. Para ver instruções, consulte o artigo Carregue objetos a partir de um sistema de ficheiros.

Aprovado no ficheiro de filtro

Depois de criar um ficheiro de filtro, chame a operação de exportação DICOM e transmita o ficheiro de filtro através da API REST. Os exemplos seguintes mostram como exportar dados DICOM através de um filtro.

gcloud

Para exportar metadados DICOM para o Cloud Storage através de um filtro, use o comando gcloud beta healthcare dicom-stores export gcs:

gcloud beta healthcare dicom-stores export gcs DICOM_STORE_ID \
  --dataset=DATASET_ID \
  --location=LOCATION \
  --gcs-uri-prefix=gs://DESTINATION_BUCKET/DIRECTORY \
  --filter-config-gcs-uri=gs://BUCKET/DIRECTORY/FILTER_FILE

Substitua o seguinte:

  • DICOM_STORE_ID: o identificador da loja DICOM
  • DATASET_ID: o nome do conjunto de dados principal do arquivo DICOM
  • LOCATION: a localização do conjunto de dados principal do arquivo DICOM
  • DESTINATION_BUCKET/DIRECTORY: o contentor de destino do Cloud Storage
  • BUCKET/DIRECTORY/FILTER_FILE: a localização do ficheiro de filtro num contentor do Cloud Storage

O resultado é o seguinte:

Request issued for: [DICOM_STORE_ID]
Waiting for operation [projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID] to complete...done.
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID

Para ver o estado da operação, execute o comando gcloud healthcare operations describe e indique OPERATION_ID da resposta:

gcloud healthcare operations describe OPERATION_ID \
  --location=LOCATION \
  --dataset=DATASET_ID

Substitua o seguinte:

  • OPERATION_ID: o número de ID devolvido pela resposta anterior
  • DATASET_ID: o nome do conjunto de dados principal do arquivo DICOM
  • LOCATION: a localização do conjunto de dados principal do arquivo DICOM

O resultado é o seguinte:

done: true
metadata:
'@type': type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata
apiMethodName: google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData
counter:
  success: SUCCESSFUL_INSTANCES
  failure: FAILED_INSTANCES
createTime: 'CREATE_TIME'
endTime: 'END_TIME'
logsUrl: 'https://console.cloud.google.com/logs/query/CLOUD_LOGGING_URL'
name: projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID
response:
'@type': '...'

API

Para exportar dados DICOM através de um filtro, use o método projects.locations.datasets.dicomStores.export.

curl

Para exportar dados DICOM através de um ficheiro de filtro, faça um pedido POST e faculte as seguintes informações:

  • O nome e a localização do conjunto de dados principal
  • O nome do arquivo DICOM
  • O contentor de destino do Cloud Storage
  • A localização do ficheiro de filtro num contentor do Cloud Storage

O exemplo seguinte mostra um pedido POST através de curl.

curl -X POST \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'gcsDestination': {
        'uriPrefix': 'gs://BUCKET/DIRECTORY'
      },
      'filterConfig': {
        'resourcePathsGcsUri': 'gs://BUCKET/DIRECTORY/FILTER_FILE'
      }
    }" "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export"

Se o pedido for bem-sucedido, o servidor devolve a seguinte resposta no formato JSON:

{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/DATASET_ID/operations/OPERATION_ID"
}

A resposta contém um nome de operação. Use o método get Operation para acompanhar o estado da operação:

curl -X GET \
    -H "Authorization: Bearer $(gcloud auth application-default print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/datasets/DATASET_ID/operations/OPERATION_NAME"

Se o pedido for bem-sucedido, o servidor devolve a seguinte resposta no formato JSON:

{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

PowerShell

Para exportar dados DICOM através de um ficheiro de filtro, faça um pedido POST e faculte as seguintes informações:

  • O nome e a localização do conjunto de dados principal
  • O nome do arquivo DICOM
  • O contentor de destino do Cloud Storage
  • A localização do ficheiro de filtro num contentor do Cloud Storage

O exemplo seguinte mostra um pedido POST através do Windows PowerShell.

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

Invoke-WebRequest `
  -Method Post `
  -Headers $headers `
  -ContentType: "application/json; charset=utf-8" `
  -Body "{
    'gcsDestination': {
      'uriPrefix': 'gs://BUCKET/DIRECTORY'
    },
    'filterConfig': {
      'resourcePathsGcsUri': 'gs://BUCKET/DIRECTORY/FILTER_FILE'
  }" `
  -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/datasets/DATASET_ID/dicomStores/DICOM_STORE_ID:export" | Select-Object -Expand Content

Se o pedido for bem-sucedido, o servidor devolve a seguinte resposta no formato JSON:

{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/DATASET_ID/operations/OPERATION_ID"
}

A resposta contém um nome de operação. Use o método get Operation para acompanhar o estado da operação:

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

Invoke-WebRequest `
  -Method Get `
  -Headers $headers `
  -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/REGION/datasets/DATASET_ID/operations/OPERATION_NAME" | Select-Object -Expand Content

Se o pedido for bem-sucedido, o servidor devolve a seguinte resposta com o estado da operação no formato JSON:

{
  "name": "projects/PROJECT_ID/locations/REGION/datasets/DATASET_ID/operations/OPERATION_ID",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1beta1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1beta1.dicom.DicomService.ExportDicomData",
    "createTime": "CREATE_TIME",
    "endTime": "END_TIME"
  },
  "done": true,
  "response": {
    "@type": "..."
  }
}

Resolução de problemas de pedidos de exportação de DICOM

Se ocorrerem erros durante um pedido de exportação DICOM, os erros são registados no Cloud Logging. Para mais informações, consulte o artigo Ver registos de erros nos Registos na nuvem.

Se toda a operação devolver um erro, consulte o artigo Resolução de problemas de operações de longa duração.