Desidentificar datos DICOM mediante DicomConfig

de esta API.

En esta página se explica cómo usar la configuración de la versión 1 DicomConfig para desidentificar los datos sensibles de las instancias DICOM en los siguientes niveles:

En esta página también se explica cómo aplicar filtros al desidentificar datos a nivel de almacén DICOM.

Descripción general de la desidentificación

Desidentificación a nivel de conjunto de datos

Para desidentificar datos DICOM a nivel del conjunto de datos, llama a la operación datasets.deidentify. La llamada a la API de anonimización tiene los siguientes componentes:

  • El conjunto de datos de origen: un conjunto de datos con almacenes DICOM que contienen una o más instancias, las cuales, a su vez, incluyen datos sensibles. Al llamar a la operación deidentify, se desidentifican todas las instancias de los almacenes DICOM del conjunto de datos.
  • El conjunto de datos de destino: la desidentificación no afecta al conjunto de datos original ni a sus datos. sino que las copias desidentificadas de los datos originales se escriben en un nuevo conjunto de datos, denominado conjunto de datos de destino.
  • Qué desidentificar: parámetros de configuración que especifican cómo procesar el conjunto de datos. Puedes configurar la desidentificación DICOM para desidentificar los metadatos de instancias DICOM (mediante palabras clave de etiquetas) o el texto insertado en imágenes DICOM especificando estos parámetros en un objeto DeidentifyConfig y haciendo lo siguiente:
    • Definir el campo config del cuerpo de la solicitud
    • Almacenándolo en Cloud Storage en formato JSON y especificando la ubicación del archivo en el segmento mediante el campo gcsConfigUri del cuerpo de la solicitud

La mayoría de los ejemplos de esta guía muestran cómo desidentificar datos DICOM a nivel de conjunto de datos.

Desidentificación a nivel de almacén DICOM

Desidentificar datos DICOM a nivel de almacén DICOM te permite tener más control sobre qué datos se desidentifican. Por ejemplo, si tienes un conjunto de datos con varios almacenes DICOM, puedes desidentificar cada almacén DICOM según el tipo de datos que contenga.

Para desidentificar datos DICOM en un almacén DICOM, llama al método dicomStores.deidentify. La llamada a la API de desidentificación consta de los siguientes componentes:

  • El almacén DICOM de origen: un almacén DICOM que contiene una o más instancias con datos sensibles. Al llamar a la operación deidentify, se desidentifican todas las instancias del almacén DICOM.
  • El almacén DICOM de destino: la desidentificación no afecta al almacén DICOM original ni a sus datos. sino que las copias desidentificadas de los datos originales se escriben en el almacén DICOM de destino. El almacén DICOM de destino ya debe existir.
  • Qué desidentificar: parámetros de configuración que especifican cómo procesar el almacén DICOM. Puedes configurar la desidentificación DICOM para desidentificar los metadatos de instancias DICOM (mediante palabras clave de etiquetas) o el texto insertado en imágenes DICOM. Para ello, especifica estos parámetros en un objeto DeidentifyConfig y pásalo de una de las siguientes formas:
    • Definir el campo config del cuerpo de la solicitud
    • Almacenándolo en Cloud Storage en formato JSON y especificando la ubicación del archivo en el segmento mediante el campo gcsConfigUri del cuerpo de la solicitud

Para ver un ejemplo de cómo desidentificar datos DICOM a nivel de almacén DICOM, consulta Desidentificar datos a nivel de almacén DICOM.

Filtros

Puedes desidentificar un subconjunto de datos de un almacén DICOM configurando un archivo de filtro y especificándolo en la solicitud dicomStores.deidentify. Para ver un ejemplo, consulta Desidentificar un subconjunto de un almacén DICOM.

Descripción general de las muestras

En los ejemplos de esta guía se utiliza una sola instancia DICOM, pero también puedes desidentificar varias instancias.

En cada una de las siguientes secciones se proporcionan ejemplos de cómo desidentificar datos DICOM mediante varios métodos. Con cada muestra se proporciona una salida de la imagen anonimizada. En cada ejemplo se usa la siguiente imagen original como entrada:

xray_original

Puedes comparar la imagen de salida de cada operación de anonimización con la imagen original para ver los efectos de la operación.

Desidentificar etiquetas DICOM

Puedes desidentificar instancias DICOM en función de las palabras clave de las etiquetas de los metadatos DICOM. Los siguientes métodos de filtrado de etiquetas están disponibles en el objeto DicomConfig:

  • keepList: lista de etiquetas que se conservarán. Elimina todas las demás etiquetas.
  • removeList: lista de etiquetas que se van a quitar. Se mantienen todas las demás etiquetas.
  • filterProfile: un perfil de filtrado de etiquetas que se usa para determinar qué etiquetas se deben conservar o eliminar.

En cada ejemplo de esta sección, se proporciona el resultado de los metadatos modificados de la instancia DICOM. A continuación, se muestran los metadatos originales de la instancia que se han usado como entrada para cada ejemplo:

[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
     "00020003":{"vr":"UI","Value":["1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695"]},
     "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
     "00020012":{"vr":"UI","Value":["1.2.276.0.7230010.3.0.3.6.1"]},
     "00020013":{"vr":"SH","Value":["OFFIS_DCMTK_361"]},
     "00080005":{"vr":"CS","Value":["ISO_IR 100"]},
     "00080016":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
     "00080018":{"vr":"UI","Value":["1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695"]},
     "00080020":{"vr":"DA","Value":["20110909"]},
     "00080030":{"vr":"TM","Value":["110032"]},
     "00080050":{"vr":"SH"},
     "00080064":{"vr":"CS","Value":["WSD"]},
     "00080070":{"vr":"LO","Value":["Manufacturer"]},
     "00080090":{"vr":"PN","Value":[{"Alphabetic":"John Doe"}]},
     "00081090":{"vr":"LO","Value":["ABC1"]},
     "00100010":{"vr":"PN","Value":[{"Alphabetic":"Ann Johnson"}]},
     "00100020":{"vr":"LO","Value":["S1214223-1"]},
     "00100030":{"vr":"DA","Value":["19880812"]},
     "00100040":{"vr":"CS","Value":["F"]},
     "0020000D":{"vr":"UI","Value":["2.25.70541616638819138568043293671559322355"]},
     "0020000E":{"vr":"UI","Value":["1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694"]},
     "00200010":{"vr":"SH"},
     "00200011":{"vr":"IS"},
     "00200013":{"vr":"IS"},
     "00200020":{"vr":"CS"},
     "00280002":{"vr":"US","Value":[3]},
     "00280004":{"vr":"CS","Value":["YBR_FULL_422"]},
     "00280006":{"vr":"US","Value":[0]},
     "00280010":{"vr":"US","Value":[1024]},
     "00280011":{"vr":"US","Value":[1024]},
     "00280100":{"vr":"US","Value":[8]},
     "00280101":{"vr":"US","Value":[8]},
     "00280102":{"vr":"US","Value":[7]},
     "00280103":{"vr":"US","Value":[0]},
     "00282110":{"vr":"CS","Value":["01"]},
     "00282114":{"vr":"CS","Value":["ISO_10918_1"]}
  }
]

Desidentificación mediante etiquetas de lista de elementos que se conservan

Cuando especificas una etiqueta de lista de elementos permitidos en el objeto DicomConfig, se añaden las siguientes etiquetas de forma predeterminada:

  • StudyInstanceUID
  • SeriesInstanceUID
  • SOPInstanceUID
  • TransferSyntaxUID
  • MediaStorageSOPInstanceUID
  • MediaStorageSOPClassUID
  • PixelData
  • Rows
  • Columns
  • SamplesPerPixel
  • BitsAllocated
  • BitsStored
  • Highbit
  • PhotometricInterpretation
  • PixelRepresentation
  • NumberOfFrames
  • PlanarConfiguration
  • PixelAspectRatio
  • SmallestImagePixelValue
  • LargestImagePixelValue
  • RedPaletteColorLookupTableDescriptor
  • GreenPaletteColorLookupTableDescriptor
  • BluePaletteColorLookupTableDescriptor
  • RedPaletteColorLookupTableData
  • GreenPaletteColorLookupTableData
  • BluePaletteColorLookupTableData
  • ICCProfile
  • ColorSpace
  • WindowCenter
  • WindowWidth
  • VOILUTFunction

La operación deidentify no oculta las etiquetas anteriores. Sin embargo, los valores de algunas de las etiquetas se regeneran, lo que significa que se sustituyen por un valor diferente mediante una transformación determinista. Para obtener más información, consulta la opción para conservar los UIDs de la norma DICOM. Para conservar los valores originales de las etiquetas anteriores, usa la opción SkipIdRedaction.

Si no se proporcionan etiquetas de lista de conservación, no se ocultarán las etiquetas DICOM del conjunto de datos.

En los siguientes ejemplos se muestra cómo desidentificar un conjunto de datos que contiene almacenes DICOM y datos DICOM, al mismo tiempo que se dejan algunas etiquetas sin modificar.

Después de enviar la imagen a la API Cloud Healthcare, la imagen aparece de la siguiente manera. Aunque se han ocultado los metadatos que aparecen en las esquinas superiores de la imagen, la información médica protegida (PHI) que aparece en la parte inferior de la imagen no se ha modificado. Para quitar el texto insertado, consulta Ocultar el texto insertado de las imágenes.

dicom_keeplist

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.

    Cuerpo JSON de la solicitud:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "keepList": {
            "tags": [
              "PatientID"
            ]
          }
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "keepList": {
            "tags": [
              "PatientID"
            ]
          }
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "keepList": {
            "tags": [
              "PatientID"
            ]
          }
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.
  3. Una vez que se haya anonimizado correctamente, puede recuperar los metadatos de la instancia anonimizada para ver cómo ha cambiado. La instancia desidentificada tiene un nuevo UID de estudios, un nuevo UID de series y un nuevo UID de instancias, por lo que primero debe buscar la instancia desidentificada en el nuevo conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • SOURCE_DATASET_LOCATION: la ubicación del conjunto de datos de origen
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    Ejecuta el comando siguiente:

    $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/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    Deberías recibir una respuesta JSON similar a la siguiente:

    En la siguiente tabla se muestra cómo han cambiado los UIDs de los estudios, las series y las instancias:
      Metadatos de instancia originales Metadatos de instancias desidentificados
    UID de estudios (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    UID de serie (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    UID de instancias (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. Con los nuevos valores, recupera los metadatos de la instancia.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    Ejecuta el comando siguiente:

    $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/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    La salida contiene los nuevos metadatos. Puedes comparar los nuevos metadatos con los metadatos originales para ver el efecto de la transformación.

Go

import (
	"context"
	"fmt"
	"io"
	"time"

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

// deidentifyDataset creates a new dataset containing de-identified data from the source dataset.
func deidentifyDataset(w io.Writer, projectID, location, sourceDatasetID, destinationDatasetID string) error {
	ctx := context.Background()

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

	datasetsService := healthcareService.Projects.Locations.Datasets

	parent := fmt.Sprintf("projects/%s/locations/%s", projectID, location)

	req := &healthcare.DeidentifyDatasetRequest{
		DestinationDataset: fmt.Sprintf("%s/datasets/%s", parent, destinationDatasetID),
		Config: &healthcare.DeidentifyConfig{
			Dicom: &healthcare.DicomConfig{
				KeepList: &healthcare.TagFilterList{
					Tags: []string{
						"PatientID",
					},
				},
			},
		},
	}

	sourceName := fmt.Sprintf("%s/datasets/%s", parent, sourceDatasetID)
	resp, err := datasetsService.Deidentify(sourceName, req).Do()
	if err != nil {
		return fmt.Errorf("Deidentify: %w", err)
	}

	// Wait for the deidentification operation to finish.
	operationService := healthcareService.Projects.Locations.Datasets.Operations
	for {
		op, err := operationService.Get(resp.Name).Do()
		if err != nil {
			return fmt.Errorf("operationService.Get: %w", err)
		}
		if !op.Done {
			time.Sleep(1 * time.Second)
			continue
		}
		if op.Error != nil {
			return fmt.Errorf("deidentify operation error: %v", *op.Error)
		}
		fmt.Fprintf(w, "Created de-identified dataset %s from %s\n", resp.Name, sourceName)
		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;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.DeidentifyConfig;
import com.google.api.services.healthcare.v1.model.DeidentifyDatasetRequest;
import com.google.api.services.healthcare.v1.model.DicomConfig;
import com.google.api.services.healthcare.v1.model.Operation;
import com.google.api.services.healthcare.v1.model.TagFilterList;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;

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

  public static void datasetDeIdentify(String srcDatasetName, String destDatasetName)
      throws IOException {
    // String srcDatasetName =
    //     String.format(DATASET_NAME, "your-project-id", "your-region-id", "your-src-dataset-id");
    // String destDatasetName =
    //    String.format(DATASET_NAME, "your-project-id", "your-region-id", "your-dest-dataset-id");

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

    // Configure what information needs to be De-Identified.
    // For more information on de-identifying using tags, please see the following:
    // https://cloud.google.com/healthcare/docs/how-tos/dicom-deidentify#de-identification_using_tags
    TagFilterList tags = new TagFilterList().setTags(Arrays.asList("PatientID"));
    DicomConfig dicomConfig = new DicomConfig().setKeepList(tags);
    DeidentifyConfig config = new DeidentifyConfig().setDicom(dicomConfig);

    // Create the de-identify request and configure any parameters.
    DeidentifyDatasetRequest deidentifyRequest =
        new DeidentifyDatasetRequest().setDestinationDataset(destDatasetName).setConfig(config);
    Datasets.Deidentify request =
        client.projects().locations().datasets().deidentify(srcDatasetName, deidentifyRequest);

    // 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(
          "De-identified Dataset created. Response content: " + 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 deidentifyDataset = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const sourceDatasetId = 'my-source-dataset';
  // const destinationDatasetId = 'my-destination-dataset';
  // const keeplistTags = 'PatientID'
  const sourceDataset = `projects/${projectId}/locations/${cloudRegion}/datasets/${sourceDatasetId}`;
  const destinationDataset = `projects/${projectId}/locations/${cloudRegion}/datasets/${destinationDatasetId}`;
  const request = {
    sourceDataset: sourceDataset,
    destinationDataset: destinationDataset,
    resource: {
      config: {
        dicom: {
          keepList: {
            tags: [keeplistTags],
          },
        },
      },
    },
  };

  await healthcare.projects.locations.datasets.deidentify(request);
  console.log(
    `De-identified data written from dataset ${sourceDatasetId} to dataset ${destinationDatasetId}`
  );
};

deidentifyDataset();

Python

# Imports the Dict type for runtime type hints.
from typing import Dict


def deidentify_dataset(
    project_id: str,
    location: str,
    dataset_id: str,
    destination_dataset_id: str,
) -> Dict[str, str]:
    """Uses a DICOM tag keeplist to create a new dataset containing de-identified DICOM data from the source dataset.

    See
    https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/datasets
    before running the sample.
    See https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.html#deidentify
    for the Python API reference.

    Args:
      project_id: The project ID or project number of the Google Cloud project you want
          to use.
      location: The name of the dataset's location.
      dataset_id: The ID of the source dataset containing the DICOM store to de-identify.
      destination_dataset_id: The ID of the dataset where de-identified DICOM data
        is written.

    Returns:
      A dictionary representing a long-running operation that results from
      calling the 'DeidentifyDataset' method. Use the
      'google.longrunning.Operation'
      API to poll the operation status.
    """
    # Imports the Python built-in time module.
    import time

    # Imports the Google API Discovery Service.
    from googleapiclient import discovery

    # Imports HttpError from the Google Python API client errors module.
    from googleapiclient.errors import HttpError

    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'
    # location = 'us-central1'
    # dataset_id = 'my-source-dataset'
    # destination_dataset_id = 'my-destination-dataset'
    source_dataset = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    destination_dataset = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, destination_dataset_id
    )

    body = {
        "destinationDataset": destination_dataset,
        "config": {
            "dicom": {
                "keepList": {
                    "tags": [
                        "Columns",
                        "NumberOfFrames",
                        "PixelRepresentation",
                        "MediaStorageSOPClassUID",
                        "MediaStorageSOPInstanceUID",
                        "Rows",
                        "SamplesPerPixel",
                        "BitsAllocated",
                        "HighBit",
                        "PhotometricInterpretation",
                        "BitsStored",
                        "PatientID",
                        "TransferSyntaxUID",
                        "SOPInstanceUID",
                        "StudyInstanceUID",
                        "SeriesInstanceUID",
                        "PixelData",
                    ]
                }
            }
        },
    }

    request = (
        client.projects()
        .locations()
        .datasets()
        .deidentify(sourceDataset=source_dataset, body=body)
    )

    # Set a start time for operation completion.
    start_time = time.time()
    # TODO(developer): Increase the max_time if de-identifying many resources.
    max_time = 600

    try:
        operation = request.execute()
        while not operation.get("done", False):
            # Poll until the operation finishes.
            print("Waiting for operation to finish...")
            if time.time() - start_time > max_time:
                raise RuntimeError("Timed out waiting for operation to finish.")
            operation = (
                client.projects()
                .locations()
                .datasets()
                .operations()
                .get(name=operation["name"])
                .execute()
            )
            # Wait 5 seconds between each poll to the operation.
            time.sleep(5)

        if operation.get("error"):
            raise TimeoutError(f"De-identify operation failed: {operation['error']}")
        else:
            print(f"De-identified data to dataset: {destination_dataset_id}")
            print(
                f"Resources succeeded: {operation.get('metadata').get('counter').get('success')}"
            )
            print(
                f"Resources failed: {operation.get('metadata').get('counter').get('failure')}"
            )
            return operation

    except HttpError as err:
        # A common error is when the destination dataset already exists.
        if err.resp.status == 409:
            raise RuntimeError(
                f"Destination dataset with ID {destination_dataset_id} already exists."
            )
        else:
            raise err

Desidentificación mediante etiquetas de lista de elementos que se deben eliminar

Puedes especificar una lista de elementos que se van a eliminar en el objeto DicomConfig. La operación deidentify solo ocultará las etiquetas especificadas en la lista. Si no se proporcionan etiquetas de lista de elementos que se van a quitar, la operación de desidentificación se lleva a cabo con normalidad, pero no se ocultan las etiquetas DICOM del conjunto de datos de destino.

Cuando especifica una lista de elementos que se deben eliminar, la etiqueta OverlayData se añade de forma predeterminada porque los datos de superposición pueden contener información personal sensible.

Las etiquetas que se añaden de forma predeterminada a una lista de conservación no se pueden añadir a una lista de eliminación.

En los siguientes ejemplos se muestra cómo desidentificar un conjunto de datos que contiene almacenes DICOM y datos DICOM eliminando todas las etiquetas de la lista de elementos que se van a eliminar. Las etiquetas que no están en la lista de elementos que se van a quitar no cambian.

Después de enviar la imagen a la API Cloud Healthcare, la imagen aparece de la siguiente manera. De las etiquetas proporcionadas en removelist, solo se elimina PatientBirthDate de la imagen, ya que es la única etiqueta de removelist que corresponde a metadatos visibles en la imagen.

Aunque el PatientBirthDate de la esquina superior de la imagen se ha ocultado de acuerdo con la configuración de la lista de elementos que se deben eliminar, la información sanitaria personal (ISP) grabada en la parte inferior de la imagen permanece. Para quitar el texto insertado, consulta Ocultar el texto insertado de las imágenes.

dicom_removelist

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.

    Cuerpo JSON de la solicitud:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "removeList": {
            "tags": [
              "PatientBirthName",
              "PatientBirthDate",
              "PatientAge",
              "PatientSize",
              "PatientWeight",
              "PatientAddress",
              "PatientMotherBirthName"
            ]
          }
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "removeList": {
            "tags": [
              "PatientBirthName",
              "PatientBirthDate",
              "PatientAge",
              "PatientSize",
              "PatientWeight",
              "PatientAddress",
              "PatientMotherBirthName"
            ]
          }
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "removeList": {
            "tags": [
              "PatientBirthName",
              "PatientBirthDate",
              "PatientAge",
              "PatientSize",
              "PatientWeight",
              "PatientAddress",
              "PatientMotherBirthName"
            ]
          }
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.
  3. Una vez que se haya anonimizado correctamente, puede recuperar los metadatos de la instancia anonimizada para ver cómo ha cambiado. La instancia desidentificada tiene un nuevo UID de estudios, un nuevo UID de series y un nuevo UID de instancias, por lo que primero debe buscar la instancia desidentificada en el nuevo conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • SOURCE_DATASET_LOCATION: la ubicación del conjunto de datos de origen
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    Ejecuta el comando siguiente:

    $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/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    Deberías recibir una respuesta JSON similar a la siguiente:

    En la siguiente tabla se muestra cómo han cambiado los UIDs de los estudios, las series y las instancias:
      Metadatos de instancia originales Metadatos de instancias desidentificados
    UID de estudios (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    UID de serie (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    UID de instancias (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. Con los nuevos valores, recupera los metadatos de la instancia.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    Ejecuta el comando siguiente:

    $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/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    La salida contiene los nuevos metadatos. Puedes comparar los nuevos metadatos con los metadatos originales para ver el efecto de la transformación.

Desidentificación mediante un perfil de filtro de etiquetas

En lugar de especificar qué etiquetas quieres conservar o quitar, puedes configurar un TagFilterProfile en el objeto DicomConfig. Un perfil de filtro de etiquetas es un perfil predefinido que determina qué etiquetas se deben conservar, eliminar o transformar. Consulta la TagFilterProfiledocumentación para ver los perfiles disponibles.

En los siguientes ejemplos se muestra cómo desidentificar un conjunto de datos que contiene almacenes DICOM y datos DICOM mediante el perfil de filtro de etiquetas ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE. Este perfil de filtro de etiquetas elimina las etiquetas basadas en el perfil básico de confidencialidad en los atributos del estándar DICOM. La API Cloud Healthcare no cumple por completo el perfil básico de confidencialidad de los atributos. Por ejemplo, la API Cloud Healthcare no comprueba las restricciones de Information Object Definition (IOD) al seleccionar una acción para una etiqueta.

Después de enviar la imagen a la API Cloud Healthcare mediante el perfil de filtro de etiquetas ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE, la imagen aparece de la siguiente manera. Aunque los metadatos que se muestran en las esquinas superiores de la imagen se han ocultado, la información personal protegida que aparece en la parte inferior de la imagen sigue ahí. Para eliminar también el texto insertado, consulta el artículo Ocultar el texto insertado de las imágenes.

dicom_attribute_confidentiality_basic_profile

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.

    Cuerpo JSON de la solicitud:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE"
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE"
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE"
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.
  3. Una vez que se haya anonimizado correctamente, puede recuperar los metadatos de la instancia anonimizada para ver cómo ha cambiado. La instancia desidentificada tiene un nuevo UID de estudios, un nuevo UID de series y un nuevo UID de instancias, por lo que primero debe buscar la instancia desidentificada en el nuevo conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • SOURCE_DATASET_LOCATION: la ubicación del conjunto de datos de origen
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    Ejecuta el comando siguiente:

    $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/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    Deberías recibir una respuesta JSON similar a la siguiente:

    En la siguiente tabla se muestra cómo han cambiado los UIDs de los estudios, las series y las instancias:
      Metadatos de instancia originales Metadatos de instancias desidentificados
    UID de estudios (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    UID de serie (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    UID de instancias (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. Con los nuevos valores, recupera los metadatos de la instancia.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    Ejecuta el comando siguiente:

    $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/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    La salida contiene los nuevos metadatos. Puedes comparar los nuevos metadatos con los metadatos originales para ver el efecto de la transformación.

Desidentificar datos en la Google Cloud consola

Para anonimizar los datos en la consola de Google Cloud , sigue estos pasos:

  1. En la Google Cloud consola, ve a la página Conjuntos de datos.

    Ve a la página Conjuntos de datos.

  2. En la lista Acciones del conjunto de datos que quieres anonimizar, selecciona Anonimizar.

    Se mostrará la página Desidentificar conjunto de datos.

  3. Selecciona Definir conjunto de datos de destino e introduce un nombre para el nuevo conjunto de datos en el que se almacenarán los datos desidentificados.

  4. Selecciona Desidentificación de etiquetas DICOM para elegir el perfil de los datos que se van a desidentificar. Los datos se pueden desidentificar de la siguiente manera:

  5. Seleccione Ocultamiento de texto DICOM insertado para configurar cómo se realiza el ocultamiento de imágenes durante la desidentificación. Puedes configurar la ocultación de imágenes de la siguiente manera:

  6. Haz clic en Desidentificar para desidentificar los datos del conjunto de datos.

Ocultar el texto insertado de las imágenes

La API Cloud Healthcare puede ocultar texto insertado sensible de las imágenes. La API detecta los datos sensibles, como la información médica protegida, y los oculta con un rectángulo opaco. La API devuelve las mismas imágenes DICOM que le proporcionaste en el mismo formato, pero se oculta el texto que se haya identificado como información sensible según tus criterios.

Para ocultar el texto insertado de las imágenes, especifica la opción TextRedactionMode dentro de un objeto ImageConfig. Consulta los posibles valores en la TextRedactionModedocumentación.

Ocultar todo el texto insertado de una imagen

En los siguientes ejemplos se muestra cómo ocultar todo el texto insertado de las imágenes DICOM en un conjunto de datos. Para ello, especifica REDACT_ALL_TEXT en el campo TextRedactionMode.

Después de enviar la imagen a la API Cloud Healthcare mediante la opción REDACT_ALL_TEXT, la imagen se muestra de la siguiente manera. Aunque se ha eliminado el texto quemado en la parte inferior de la imagen, los metadatos de las esquinas superiores de la imagen permanecen. Para eliminar también los metadatos, consulta Desidentificar etiquetas DICOM.

xray_redact_all_text

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.

    Cuerpo JSON de la solicitud:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {},
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {},
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {},
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.
  3. Una vez que se haya anonimizado correctamente, puede recuperar los metadatos de la instancia anonimizada para ver cómo ha cambiado. La instancia desidentificada tiene un nuevo UID de estudios, un nuevo UID de series y un nuevo UID de instancias, por lo que primero debe buscar la instancia desidentificada en el nuevo conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • SOURCE_DATASET_LOCATION: la ubicación del conjunto de datos de origen
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    Ejecuta el comando siguiente:

    $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/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    Deberías recibir una respuesta JSON similar a la siguiente:

    En la siguiente tabla se muestra cómo han cambiado los UIDs de los estudios, las series y las instancias:
      Metadatos de instancia originales Metadatos de instancias desidentificados
    UID de estudios (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    UID de serie (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    UID de instancias (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029

Ocultar solo el texto insertado sensible de una imagen

En los siguientes ejemplos se muestra cómo ocultar texto insertado sensible de imágenes DICOM en un conjunto de datos. Para ello, especifica REDACT_SENSITIVE_TEXT en el campo TextRedactionMode.

Los infoTypes especificados en los infoTypes DICOM predeterminados se ocultan cuando se especifica REDACT_SENSITIVE_TEXT. También se aplica un customInfoType adicional para los identificadores de pacientes, como los números de historial médico, y se ocultan los identificadores de pacientes.

En la siguiente imagen se muestra una radiografía de un paciente sin censurar:

xray2_unredacted

Después de enviar la imagen a la API Cloud Healthcare mediante la opción REDACT_SENSITIVE_TEXT, la imagen se muestra de la siguiente manera:

xray2_redact_sensitive_text

Puedes ver que ha ocurrido lo siguiente:

  • El PERSON_NAME de la parte inferior izquierda de la imagen se ha ocultado
  • El DATE de la parte inferior izquierda de la imagen se ha ocultado

El sexo del paciente no se ha ocultado porque no se considera texto sensible según los infoTipos DICOM predeterminados.

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.

    Cuerpo JSON de la solicitud:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {},
        "image": {
          "textRedactionMode": "REDACT_SENSITIVE_TEXT"
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {},
        "image": {
          "textRedactionMode": "REDACT_SENSITIVE_TEXT"
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {},
        "image": {
          "textRedactionMode": "REDACT_SENSITIVE_TEXT"
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.
  3. Una vez que se haya anonimizado correctamente, puede recuperar los metadatos de la instancia anonimizada para ver cómo ha cambiado. La instancia desidentificada tiene un nuevo UID de estudios, un nuevo UID de series y un nuevo UID de instancias, por lo que primero debe buscar la instancia desidentificada en el nuevo conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • SOURCE_DATASET_LOCATION: la ubicación del conjunto de datos de origen
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    Ejecuta el comando siguiente:

    $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/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    Deberías recibir una respuesta JSON similar a la siguiente:

    En la siguiente tabla se muestra cómo han cambiado los UIDs de los estudios, las series y las instancias:
      Metadatos de instancia originales Metadatos de instancias desidentificados
    UID de estudios (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    UID de serie (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    UID de instancias (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029

Combinar la desidentificación de etiquetas y el ocultamiento de texto insertado

Puedes combinar la desidentificación mediante etiquetas con la redacción del texto insertado en las imágenes para desidentificar las instancias DICOM con un nivel de detalle mayor. Por ejemplo, si combinas REDACT_ALL_TEXT en el campo TextRedactionMode con DEIDENTIFY_TAG_CONTENTS en el campo TagFilterProfile, puedes hacer lo siguiente:

  • REDACT_ALL_TEXT: oculta todo el texto insertado de la imagen.
  • DEIDENTIFY_TAG_CONTENTS: inspecciona el contenido de las etiquetas y transforma el texto sensible. Para obtener más información sobre el comportamiento de DEIDENTIFY_TAG_CONTENTS, consulta Configuración predeterminada.

Después de enviar la imagen a la API Cloud Healthcare mediante las opciones REDACT_ALL_TEXT y DEIDENTIFY_TAG_CONTENTS, la imagen aparece de la siguiente manera. Observa los siguientes cambios:

  • Los nombres de las esquinas superior izquierda y superior derecha de la imagen se han transformado con una CryptoHashConfig.
  • Las fechas de las esquinas superior izquierda y superior derecha de la imagen se han transformado con una DateShiftConfig.
  • El texto insertado en la parte inferior de la imagen se oculta

xray_redact_all_text_deidentify_tag_contents

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.

    Cuerpo JSON de la solicitud:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.
  3. Una vez que se haya anonimizado correctamente, puede recuperar los metadatos de la instancia anonimizada para ver cómo ha cambiado. La instancia desidentificada tiene un nuevo UID de estudios, un nuevo UID de series y un nuevo UID de instancias, por lo que primero debe buscar la instancia desidentificada en el nuevo conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • SOURCE_DATASET_LOCATION: la ubicación del conjunto de datos de origen
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    Ejecuta el comando siguiente:

    $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/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    Deberías recibir una respuesta JSON similar a la siguiente:

  4. Con los nuevos valores, recupera los metadatos de la instancia.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    Ejecuta el comando siguiente:

    $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/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    La salida contiene los nuevos metadatos. Puedes comparar los nuevos metadatos con los metadatos originales para ver el efecto de la transformación.

Usar infoTypes y transformaciones primitivas con etiquetas DICOM

La API Cloud Healthcare puede usar tipos de información (infoTypes) para definir qué datos busca al desidentificar etiquetas. Un infoType es un tipo de dato sensible, como el nombre de un paciente, una dirección de correo electrónico, un número de teléfono, un número de identificación o un número de tarjeta de crédito.

Las transformaciones primitivas son reglas que se usan para transformar un valor de entrada. Puede personalizar la forma en que se desidentifican las etiquetas DICOM aplicando una transformación primitiva al infoType de cada etiqueta. Por ejemplo, puede desidentificar el apellido de un paciente y sustituirlo por una serie de asteriscos especificando el infoType LAST_NAME con la transformación primitiva CharacterMaskConfig.

infoTypes DICOM predeterminados

Los infoTypes DICOM predeterminados que se usan al desidentificar metadatos son los siguientes:

  • AGE
  • CREDIT_CARD_NUMBER
  • DATE
  • EMAIL_ADDRESS
  • IP_ADDRESS
  • LOCATION
  • MAC_ADDRESS
  • PASSPORT
  • PERSON_NAME
  • PHONE_NUMBER
  • SWIFT_CODE
  • US_DRIVERS_LICENSE_NUMBER
  • US_SOCIAL_SECURITY_NUMBER
  • US_VEHICLE_IDENTIFICATION_NUMBER
  • US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER

Cuando desidentificas texto sensible en imágenes con REDACT_SENSITIVE_TEXT, la API Cloud Healthcare usa los infoTypes anteriores, pero también se aplica un infoType personalizado adicional para los identificadores de pacientes, como los números de historial médico, al texto sensible de la imagen.

Opciones de transformación primitiva

Las opciones de transformación primitivas de la API Cloud Healthcare incluyen las siguientes:

  • RedactConfig: oculta un valor eliminándolo.
  • CharacterMaskConfig: enmascara una cadena total o parcialmente sustituyendo los caracteres de entrada por un carácter fijo especificado.
  • DateShiftConfig: cambia las fechas en un número aleatorio de días, con la opción de mantener la coherencia en el mismo contexto.
  • CryptoHashConfig: usa SHA-256 para sustituir los valores de entrada por una representación codificada en base64 de una cadena de salida cifrada con hash generada mediante una clave de cifrado de datos determinada.
  • ReplaceWithInfoTypeConfig: sustituye un valor de entrada por el nombre de su infoType.

Especificar configuraciones en TextConfig

Los infoTypes y las transformaciones primitivas se especifican en un InfoTypeTransformation, que es un objeto dentro de TextConfig. Los InfoTypes se introducen en la matriz infoTypes como valores separados por comas.

Especificar un infoType es opcional. Si no especificas al menos un infoType, la transformación se aplicará a los infoTypes de DICOM predeterminados que se encuentran en la API Cloud Healthcare.

Si especifica algún infoType en InfoTypeTransformation, debe especificar al menos una transformación primitiva.

Solo puedes aplicar un InfoTypeTransformation al perfil DEIDENTIFY_TAG_CONTENTS. No se puede aplicar un InfoTypeTransformation a los otros perfiles que se indican en TagFilterProfile.

En las siguientes secciones se muestra cómo usar las transformaciones primitivas disponibles en InfoTypeTransformation junto con los infoTypes para personalizar la forma en que se desidentifican las etiquetas DICOM. En los ejemplos se usa la imagen de muestra proporcionada en Descripción general de los ejemplos y los metadatos de muestra proporcionados en Desidentificar etiquetas DICOM.

Configuración predeterminada

De forma predeterminada, cuando se define el perfil DEIDENTIFY_TAG_CONTENTS sin proporcionar ninguna configuración en el objeto TextConfig, la API Cloud Healthcare sustituye los datos sensibles con los infoTypes de DICOM predeterminados. Sin embargo, el comportamiento de los DATE y PERSON_NAME infoTypes es diferente, como se muestra a continuación:

  • Se aplica un DateShiftConfig al texto que se clasifica como un infoType DATE. El DateShiftConfig usa una técnica de desplazamiento de fechas con una diferencia de 100 días.
  • Se aplica un CryptoHashConfig al texto que se clasifica como un infoType PERSON_NAME. El CryptoHashConfig realiza la tokenización generando un valor sustituto mediante un cifrado hash criptográfico.

También se aplica lo siguiente:

  • Las edades de los pacientes que tengan un valor igual o superior a 90 se convertirán en 90.
  • Si no se puede aplicar una transformación debido a las restricciones del formato DICOM, se proporciona un valor de marcador de posición que corresponde a la representación del valor (VR) de la etiqueta.
  • Cualquier otro valor que corresponda a uno de los infoTypes de DICOM predeterminados de la API Cloud Healthcare se sustituye por su infoType. Por ejemplo, si la etiqueta PatientComments contenía la cadena "Ann Johnson went to Anytown Hospital,", "Anytown" se sustituiría por el LOCATION infoType.

En los siguientes ejemplos se muestra el resultado de usar el DEIDENTIFY_TAG_CONTENTSperfil predeterminado en un conjunto de datos que contiene almacenes DICOM y datos DICOM. Puedes comparar esta salida predeterminada con las salidas al usar las distintas transformaciones primitivas con combinaciones de infoType. En los ejemplos se utiliza una sola instancia DICOM, pero puedes desidentificar varias instancias.

Después de enviar la imagen a la API Cloud Healthcare mediante el perfil DEIDENTIFY_TAG_CONTENTS, la imagen se muestra de la siguiente manera. Observa los siguientes cambios:

  • Los nombres de las esquinas superior izquierda y superior derecha de la imagen se han transformado con una CryptoHashConfig.
  • Las fechas de las esquinas superior izquierda y superior derecha de la imagen se han transformado con una DateShiftConfig.

dicom_infotype_default

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.

    Cuerpo JSON de la solicitud:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.
  3. Una vez que se haya anonimizado correctamente, puede recuperar los metadatos de la instancia anonimizada para ver cómo ha cambiado. La instancia desidentificada tiene un nuevo UID de estudios, un nuevo UID de series y un nuevo UID de instancias, por lo que primero debe buscar la instancia desidentificada en el nuevo conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • SOURCE_DATASET_LOCATION: la ubicación del conjunto de datos de origen
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    Ejecuta el comando siguiente:

    $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/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    Deberías recibir una respuesta JSON similar a la siguiente:

  4. Con los nuevos valores, recupera los metadatos de la instancia.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    Ejecuta el comando siguiente:

    $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/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    La salida contiene los nuevos metadatos. Puedes comparar los nuevos metadatos con los metadatos originales para ver el efecto de la transformación.

RedactConfig

Si se especifica redactConfig, se oculta un valor determinado eliminándolo por completo. El mensaje redactConfig no tiene argumentos. Si lo especificas, se habilita la transformación.

Los siguientes ejemplos amplían la configuración predeterminada, pero ahora incluyen la definición del PERSON_NAME infoType con la transformación redactConfig. Al enviar esta solicitud, se ocultan todos los nombres de la instancia DICOM.

Después de enviar la imagen a la API Cloud Healthcare mediante la transformación redactConfig, la imagen se muestra de la siguiente manera:

dicom_redactconfig

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.

    Cuerpo JSON de la solicitud:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "redactConfig": {}
            }
          ]
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "redactConfig": {}
            }
          ]
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "redactConfig": {}
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.
  3. Una vez que se haya anonimizado correctamente, puede recuperar los metadatos de la instancia anonimizada para ver cómo ha cambiado. La instancia desidentificada tiene un nuevo UID de estudios, un nuevo UID de series y un nuevo UID de instancias, por lo que primero debe buscar la instancia desidentificada en el nuevo conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • SOURCE_DATASET_LOCATION: la ubicación del conjunto de datos de origen
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    Ejecuta el comando siguiente:

    $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/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    Deberías recibir una respuesta JSON similar a la siguiente:

  4. Con los nuevos valores, recupera los metadatos de la instancia.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    Ejecuta el comando siguiente:

    $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/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    La salida contiene los nuevos metadatos. Puedes comparar los nuevos metadatos con los metadatos originales para ver el efecto de la transformación.

En el resultado se muestra que se han quitado los valores de ReferringPhysicianName (00080090) y PatientName (00100010). Esto contrasta con el ejemplo de la configuración predeterminada, donde estos valores se transformaron mediante un cifrado hash criptográfico.

CharacterMaskConfig

Si se especifica characterMaskConfig, se sustituyen las cadenas que corresponden a los infoTypes indicados por un carácter fijo especificado. Por ejemplo, en lugar de ocultar el nombre de un paciente o transformarlo mediante un cifrado hash, puedes sustituirlo por una serie de asteriscos (*). Puedes especificar el carácter fijo como valor del campo maskingCharacter.

Los siguientes ejemplos amplían la configuración predeterminada, pero ahora incluyen la definición del LAST_NAME infoType con la transformación characterMaskConfig. No se proporciona ningún carácter fijo, por lo que la máscara usa asteriscos de forma predeterminada.

En los ejemplos se utiliza una sola instancia DICOM, pero puedes desidentificar varias instancias.

Después de enviar la imagen a la API Cloud Healthcare mediante la transformación characterMaskConfig, la imagen se muestra de la siguiente manera:

dicom_charactermaskconfig

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.

    Cuerpo JSON de la solicitud:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "characterMaskConfig": {
                "maskingCharacter": ""
              }
            }
          ]
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "characterMaskConfig": {
                "maskingCharacter": ""
              }
            }
          ]
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "characterMaskConfig": {
                "maskingCharacter": ""
              }
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.
  3. Una vez que se haya anonimizado correctamente, puede recuperar los metadatos de la instancia anonimizada para ver cómo ha cambiado. La instancia desidentificada tiene un nuevo UID de estudios, un nuevo UID de series y un nuevo UID de instancias, por lo que primero debe buscar la instancia desidentificada en el nuevo conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • SOURCE_DATASET_LOCATION: la ubicación del conjunto de datos de origen
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    Ejecuta el comando siguiente:

    $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/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    Deberías recibir una respuesta JSON similar a la siguiente:

  4. Con los nuevos valores, recupera los metadatos de la instancia.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    Ejecuta el comando siguiente:

    $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/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    La salida contiene los nuevos metadatos. Puedes comparar los nuevos metadatos con los metadatos originales para ver el efecto de la transformación.

En la salida se muestra que los apellidos de ReferringPhysicianName (00080090) y PatientName (00100010) se han sustituido por asteriscos. Esto contrasta con el ejemplo de la configuración predeterminada, donde estos valores se transformaron mediante el cifrado hash criptográfico.

DateShiftConfig

La API de Cloud Healthcare puede transformar las fechas desplazándolas dentro de un intervalo predefinido. Para que las transformaciones de fechas sean coherentes en todas las ejecuciones de anonimización, usa DateShiftConfig con una de las siguientes opciones:

Debes asignar un rol con el permiso cloudkms.cryptoKeyVersions.useToDecrypt a la cuenta de servicio del agente de servicio de Cloud Healthcare para descifrar la clave envuelta de Cloud KMS. Te recomendamos que uses el rol Encargado de desencriptar claves de CryptoKey de Cloud KMS (roles/cloudkms.cryptoKeyDecrypter). Cuando usas Cloud KMS para operaciones criptográficas, se aplican cargos. Consulta la página de precios de Cloud Key Management Service para obtener más información.

La API Cloud Healthcare usa esta clave para calcular la cantidad en la que se desplazan las fechas, como la fecha de nacimiento de un paciente, en un diferencial de 100 días.

Si no proporcionas ninguna clave, la API Cloud Healthcare generará una cada vez que se ejecute la operación de desidentificación en los valores de fecha. Esto puede provocar que las fechas de salida sean incoherentes entre ejecuciones.

En los siguientes ejemplos se muestra cómo definir los infoTipos DATE y DATE_OF_BIRTH con la transformación DateShiftConfig en una instancia DICOM. Después de enviar la solicitud de desidentificación a la API Cloud Healthcare, los valores de fecha de la instancia se desplazarán entre más o menos 100 días de sus valores originales.

La clave criptográfica proporcionada, U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=, es una clave sin formato de 256 bits cifrada con AES y codificada en base64 que se ha generado con el siguiente comando. Cuando se te pida, se proporcionará una contraseña vacía al comando:

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

Después de enviar la imagen a la API Cloud Healthcare mediante la transformación dateShiftConfig, la imagen se muestra de la siguiente manera:

dicom_dateshiftconfig

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.

    Cuerpo JSON de la solicitud:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "DATE",
                "DATE_OF_BIRTH"
              ],
              "dateShiftConfig": {
                "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU="
              }
            }
          ]
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "DATE",
                "DATE_OF_BIRTH"
              ],
              "dateShiftConfig": {
                "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU="
              }
            }
          ]
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "DATE",
                "DATE_OF_BIRTH"
              ],
              "dateShiftConfig": {
                "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU="
              }
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.
  3. Una vez que se haya anonimizado correctamente, puede recuperar los metadatos de la instancia anonimizada para ver cómo ha cambiado. La instancia desidentificada tiene un nuevo UID de estudios, un nuevo UID de series y un nuevo UID de instancias, por lo que primero debe buscar la instancia desidentificada en el nuevo conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • SOURCE_DATASET_LOCATION: la ubicación del conjunto de datos de origen
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    Ejecuta el comando siguiente:

    $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/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    Deberías recibir una respuesta JSON similar a la siguiente:

  4. Con los nuevos valores, recupera los metadatos de la instancia.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    Ejecuta el comando siguiente:

    $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/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    La salida contiene los nuevos metadatos. Puedes comparar los nuevos metadatos con los metadatos originales para ver el efecto de la transformación.

En el resultado se muestra que StudyDate (00080020) y PatientBirthDate (00100030) tienen nuevos valores. Estas transformaciones se han producido como resultado de combinar la diferencia de 100 días con el valor cryptoKey proporcionado. Los nuevos valores de fecha de esta instancia son coherentes entre las ejecuciones de anonimización siempre que se proporcione el mismo cryptoKey.

CryptoHashConfig

Puedes dejar el campo cryptoHashConfig vacío o proporcionar uno de los siguientes elementos:

Debes asignar un rol con el permiso cloudkms.cryptoKeyVersions.useToDecrypt a la cuenta de servicio del agente de servicio de Cloud Healthcare para descifrar la clave envuelta de Cloud KMS. Te recomendamos que uses el rol Encargado de desencriptar claves de CryptoKey de Cloud KMS (roles/cloudkms.cryptoKeyDecrypter). Cuando usas Cloud KMS para operaciones criptográficas, se aplican cargos. Consulta la página de precios de Cloud Key Management Service para obtener más información.

La API Cloud Healthcare puede transformar datos sustituyendo valores por hashes criptográficos (también denominados valores sustitutos). Para ello, especifica un mensaje cryptoHashConfig.

Si no proporcionas una clave, la API Cloud Healthcare generará una. La API Cloud Healthcare usa esta clave para generar valores sustitutos. Si proporcionas la misma clave en cada ejecución, la API Cloud Healthcare generará valores subrogados coherentes. Si no proporcionas una clave, la API Cloud Healthcare generará una nueva cada vez que se ejecute la operación. Si se usa otra clave, se obtienen valores subrogados diferentes.

En los siguientes ejemplos se muestra cómo aplicar una transformación cryptoHashConfig a todos los infoTipos DICOM predeterminados admitidos en la API Cloud Healthcare. Después de enviar la solicitud de anonimización, los valores con un infoType de DICOM correspondiente en la API Cloud Healthcare se sustituyen por valores sustitutos.

En el ejemplo también se muestra cómo proporcionar una clave criptográfica para generar valores sustitutos coherentes entre las ejecuciones de desidentificación.

La clave criptográfica proporcionada, U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=, es una clave sin formato de 256 bits cifrada con AES y codificada en base64 que se ha generado con el siguiente comando. Cuando se te pida, se proporcionará una contraseña vacía al comando:

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

Después de enviar la imagen a la API Cloud Healthcare mediante la transformación cryptoHashConfig, la imagen se muestra de la siguiente manera:

dicom_cryptohashconfig

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.

    Cuerpo JSON de la solicitud:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [],
              "cryptoHashConfig": {
                "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU="
              }
            }
          ]
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [],
              "cryptoHashConfig": {
                "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU="
              }
            }
          ]
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [],
              "cryptoHashConfig": {
                "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU="
              }
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.
  3. Una vez que se haya anonimizado correctamente, puede recuperar los metadatos de la instancia anonimizada para ver cómo ha cambiado. La instancia desidentificada tiene un nuevo UID de estudios, un nuevo UID de series y un nuevo UID de instancias, por lo que primero debe buscar la instancia desidentificada en el nuevo conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • SOURCE_DATASET_LOCATION: la ubicación del conjunto de datos de origen
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    Ejecuta el comando siguiente:

    $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/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    Deberías recibir una respuesta JSON similar a la siguiente:

  4. Con los nuevos valores, recupera los metadatos de la instancia.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    Ejecuta el comando siguiente:

    $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/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    La salida contiene los nuevos metadatos. Puedes comparar los nuevos metadatos con los metadatos originales para ver el efecto de la transformación.

Las transformaciones de la salida son coherentes en esta instancia entre las ejecuciones de desidentificación siempre que se proporcione el mismo cryptoKey.

ReplaceWithInfoTypeConfig

Si se especifica replaceWithInfoTypeConfig, los valores de entrada se sustituyen por el nombre del infoType del valor.

En los siguientes ejemplos se muestra cómo aplicar una replaceWithInfoTypeConfig transformación a todos los infoTipos DICOM predeterminados admitidos en la API Cloud Healthcare. El mensaje replaceWithInfoTypeConfig no tiene argumentos. Si lo especificas, se habilita la transformación.

Después de enviar la imagen a la API Cloud Healthcare mediante la transformación replaceWithInfoTypeConfig, la imagen se muestra de la siguiente manera:

dicom_replacewithinfotypeconfig

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.

    Cuerpo JSON de la solicitud:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [],
              "replaceWithInfoTypeConfig": {}
            }
          ]
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [],
              "replaceWithInfoTypeConfig": {}
            }
          ]
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [],
              "replaceWithInfoTypeConfig": {}
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.
  3. Una vez que se haya anonimizado correctamente, puede recuperar los metadatos de la instancia anonimizada para ver cómo ha cambiado. La instancia desidentificada tiene un nuevo UID de estudios, un nuevo UID de series y un nuevo UID de instancias, por lo que primero debe buscar la instancia desidentificada en el nuevo conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • SOURCE_DATASET_LOCATION: la ubicación del conjunto de datos de origen
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances"

    PowerShell

    Ejecuta el comando siguiente:

    $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/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    Deberías recibir una respuesta JSON similar a la siguiente:

  4. Con los nuevos valores, recupera los metadatos de la instancia.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino. Es el mismo que el ID del almacén DICOM del conjunto de datos de origen.

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    Ejecuta el comando siguiente:

    $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/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    La salida contiene los nuevos metadatos. Puedes comparar los nuevos metadatos con los metadatos originales para ver el efecto de la transformación.

Desidentificar datos a nivel de almacén DICOM

En los ejemplos anteriores se muestra cómo desidentificar datos DICOM a nivel de conjunto de datos. En esta sección se describe cómo desidentificar datos a nivel de almacén DICOM.

Para cambiar una solicitud de desidentificación de un conjunto de datos a una solicitud de desidentificación de un almacén DICOM, haz los siguientes cambios:

  • Modifica el destinationDataset en el cuerpo de la solicitud a destinationStore.
  • Añade dicomStores/DESTINATION_DICOM_STORE_ID al final del valor de destinationStore cuando especifiques el destino.
  • Añade dicomStores/SOURCE_DICOM_STORE_ID al especificar la ubicación de los datos de origen

Por ejemplo:

Desidentificación a nivel de conjunto de datos:

"destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID"
...
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

Desidentificación a nivel de almacén DICOM:

"destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID"
...
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"

En los siguientes ejemplos se amplía la información de la sección Combinar la desidentificación de etiquetas y la ocultación de texto insertado, pero la desidentificación se produce en un solo almacén DICOM y los datos desidentificados se copian en un nuevo almacén DICOM. Antes de ejecutar las muestras, debe existir el almacén DICOM al que hace referencia DESTINATION_DICOM_STORE_ID.

Consola

Para desidentificar datos en un almacén DICOM mediante la consola de Google Cloud , sigue estos pasos.

  1. En la Google Cloud consola, ve a la página Conjuntos de datos.

    Ve a Conjuntos de datos.

  2. Haga clic en el conjunto de datos que contenga los datos que quiera desidentificar.

  3. En la lista de almacenes DICOM, elige Desidentificar en la lista Acciones del almacén DICOM que quieras desidentificar.

    Se muestra la página Desidentificar almacén DICOM.

  4. Seleccione Definir almacén de datos de destino y elija el conjunto de datos y el almacén DICOM en los que se guardarán los datos anonimizados.

  5. Seleccione Desidentificación de etiquetas DICOM para configurar cómo se desidentifican los datos. Los datos se pueden anonimizar de la siguiente manera:

  6. Seleccione Ocultamiento de texto DICOM insertado para configurar cómo se realiza el ocultamiento de imágenes durante la desidentificación. Puedes configurar la ocultación de imágenes de la siguiente manera:

  7. Haz clic en Desidentificar para desidentificar los datos del almacén DICOM.

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • SOURCE_DICOM_STORE_ID: el ID del almacén DICOM que contiene los datos que se van a desidentificar
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino

    Cuerpo JSON de la solicitud:

    {
      "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.

Desidentificar un subconjunto de un almacén DICOM

Puedes desidentificar un subconjunto de los datos de un almacén DICOM especificando un filtro.

El filtro tiene la forma de un archivo de filtro que se especifica como valor del campo resourcePathsGcsUri del objeto DicomFilterConfig. El archivo de filtro debe estar en un segmento de Cloud Storage. No puedes especificar un archivo de filtro que esté en tu máquina local ni en ninguna otra fuente. La ubicación del archivo debe tener el formato gs://BUCKET/PATH/TO/FILE.

Crear un archivo de filtro

Un archivo de filtro define qué archivos DICOM se deben desidentificar. Puede filtrar archivos en los siguientes niveles:

  • A nivel de estudio
  • A nivel de serie
  • A nivel de instancia

El archivo de filtro consta de una línea por cada estudio, serie o instancia que quieras anonimizar. Cada línea usa el formato /studies/STUDY_UID[/series/SERIES_UID[/instances/INSTANCE_UID]]. Al final de cada línea hay un carácter de salto de línea: \n o \r\n.

Si no se especifica un estudio, una serie o una instancia en el archivo de filtro que has enviado al llamar a la operación de desidentificación, ese estudio, serie o instancia no se desidentificará y no estará presente en el almacén DICOM de destino.

Solo es obligatoria la parte /studies/STUDY_UID de la ruta. Esto significa que puedes anonimizar un estudio especificando /studies/STUDY_UID o una serie especificando /studies/STUDY_UID/series/SERIES_UID.

Veamos el siguiente archivo de filtro. El archivo de filtro provoca que se anonimicen un estudio, dos series y tres instancias individuales:

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

Crear un archivo de filtro con BigQuery

Normalmente, se crea un archivo de filtro exportando los metadatos de un almacén DICOM a BigQuery. De esta forma, puedes usar BigQuery para ver los UIDs de los estudios, las series y las instancias de los datos DICOM de tu almacén DICOM. A continuación, puedes hacer lo siguiente:

  1. Consulta los UIDs de los estudios, las series y las instancias que te interesen. Por ejemplo, después de exportar los metadatos a BigQuery, puede ejecutar la siguiente consulta para concatenar los UIDs de estudio, serie e instancia en un formato compatible con los requisitos del archivo de filtro:

    SELECT CONCAT
      ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
      [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
  2. Si la consulta devuelve un conjunto de resultados grande, puedes materializar una nueva tabla guardando los resultados de la consulta en una tabla de destino de BigQuery.

  3. Después de guardar los resultados de la consulta en la tabla de destino, puede guardar el contenido de la tabla de destino en un archivo y exportarlo a Cloud Storage. Para saber cómo hacerlo, consulta el artículo Exportar datos de una tabla. El archivo exportado es el archivo de filtro. Usarás la ubicación del archivo de filtro en Cloud Storage al especificar el filtro en la operación de exportación.

Crear un archivo de filtro manualmente

Puedes crear un archivo de filtro con contenido personalizado y subirlo a un segmento de Cloud Storage. Usarás la ubicación del archivo de filtro en Cloud Storage al especificar el filtro en la operación de desidentificación. En el siguiente ejemplo se muestra cómo subir un archivo de filtro a un segmento de Cloud Storage mediante el comando gcloud storage cp:

gcloud storage cp PATH/TO/FILTER_FILE gs://BUCKET/DIRECTORY

Por ejemplo:

gcloud storage cp /home/user/Desktop/filters.txt gs://my-bucket/my-directory

Usar un filtro

Una vez que hayas configurado el archivo de filtro, puedes pasarlo como valor al campo resourcePathsGcsUri del objeto filterConfig.

En el siguiente ejemplo se amplía la información de la sección Desidentificar datos a nivel de almacén DICOM, pero se proporciona un archivo de filtro en Cloud Storage que determina qué recursos DICOM se desidentifican.

REST

  1. Desidentifica el conjunto de datos.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • LOCATION: la ubicación del conjunto de datos
    • SOURCE_DATASET_ID: el ID del conjunto de datos que contiene los datos que se van a desidentificar
    • DESTINATION_DATASET_ID: ID del conjunto de datos de destino en el que se escriben los datos desidentificados.
    • SOURCE_DICOM_STORE_ID: el ID del almacén DICOM que contiene los datos que se van a desidentificar
    • DESTINATION_DICOM_STORE_ID: el ID del almacén DICOM del conjunto de datos de destino
    • BUCKET/PATH/TO/FILE: la ubicación del archivo de filtro en un segmento de Cloud Storage

    Cuerpo JSON de la solicitud:

    {
      "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      },
      "filterConfig": {
        "resourcePathGcsUri": "gs://BUCKET/PATH/TO/FILE"
      }
    }
    

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    cat > request.json << 'EOF'
    {
      "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      },
      "filterConfig": {
        "resourcePathGcsUri": "gs://BUCKET/PATH/TO/FILE"
      }
    }
    EOF

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"

    PowerShell

    Guarda el cuerpo de la solicitud en un archivo llamado request.json. Ejecuta el siguiente comando en el terminal para crear o sobrescribir este archivo en el directorio actual:

    @'
    {
      "destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "image": {
          "textRedactionMode": "REDACT_ALL_TEXT"
        }
      },
      "filterConfig": {
        "resourcePathGcsUri": "gs://BUCKET/PATH/TO/FILE"
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    A continuación, ejecuta el siguiente comando para enviar tu solicitud REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify" | Select-Object -Expand Content
    El resultado es el siguiente. La respuesta contiene un identificador de una operación de larga duración. Las operaciones de larga duración se devuelven cuando las llamadas a métodos pueden tardar mucho tiempo en completarse. Anota el valor de OPERATION_ID. Necesitarás este valor en el siguiente paso.

  2. Usa el método projects.locations.datasets.operations.get para obtener el estado de la operación de larga duración.

    Antes de usar los datos de la solicitud, haz las siguientes sustituciones:

    • PROJECT_ID: el ID de tu Google Cloud proyecto
    • DATASET_ID: el ID del conjunto de datos
    • LOCATION: la ubicación del conjunto de datos
    • OPERATION_ID: el ID devuelto por la operación de larga duración

    Para enviar tu solicitud, elige una de estas opciones:

    curl

    Ejecuta el comando siguiente:

    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

    Ejecuta el comando siguiente:

    $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

    Explorador de APIs

    Abre la página de referencia del método. El panel Explorador de APIs se abre en la parte derecha de la página. Puedes interactuar con esta herramienta para enviar solicitudes. Rellena los campos obligatorios y haz clic en Ejecutar.

    El resultado es el siguiente. Cuando la respuesta contiene "done": true, la operación de larga duración ha finalizado.

Solucionar problemas con las operaciones de desidentificación de DICOM

Si se producen errores durante una operación de desidentificación de DICOM, se registran en Cloud Logging. Para obtener más información, consulta Ver registros de errores en Cloud Logging.

Si toda la operación devuelve un error, consulta Solucionar problemas de operaciones de larga duración.