Anonimizzazione dei dati DICOM utilizzando DicomConfig

Questa pagina spiega come utilizzare la configurazione v1 DicomConfig per anonimizzare i dati sensibili nelle istanze DICOM ai seguenti livelli:

Questa pagina spiega anche come applicare i filtri durante l'anonimizzazione dei dati a livello di archivio DICOM.

Panoramica dell'anonimizzazione

Anonimizzazione a livello di set di dati

Per anonimizzare i dati DICOM a livello di set di dati, chiama l'operazione datasets.deidentify. La chiamata API di anonimizzazione ha i seguenti componenti:

  • Il set di dati di origine: un set di dati contenente archivi DICOM con una o più istanze che includono dati sensibili. Quando chiami l'operazione deidentify, tutte le istanze in tutti gli archivi DICOM nel set di dati sono anonimizzate.
  • Il set di dati di destinazione: l'anonimizzazione non interessa il set di dati originale o i suoi dati. Le copie anonimizzate dei dati originali vengono invece scritte in un nuovo set di dati, chiamato set di dati di destinazione.
  • Che cosa anonimizzare: i parametri di configurazione che specificano come elaborare il set di dati. Puoi configurare l'anonimizzazione DICOM per anonimizzare i metadati dell'istanza DICOM (utilizzando parole chiave dei tag) o il testo integrato nelle immagini DICOM specificando questi parametri in un oggetto DeidentifyConfig e seguendo questi passaggi:
    • Impostazione del campo config del corpo della richiesta
    • Archiviandolo in Cloud Storage in formato JSON e specificando la posizione del file nel bucket tramite il campo gcsConfigUri del corpo della richiesta

La maggior parte degli esempi in questa guida mostra come anonimizzare i dati DICOM a livello del set di dati.

Anonimizzazione a livello di archivio DICOM

Anonimizzando i dati DICOM a livello di archivio DICOM, puoi avere un maggiore controllo su quali dati vengono anonimizzati. Ad esempio, se disponi di un set di dati con più archivi DICOM, puoi anonimizzare ciascun archivio DICOM in base al tipo di dati presenti nell'archivio.

Per anonimizzare i dati DICOM in un archivio DICOM, chiama il metodo dicomStores.deidentify. La chiamata all'API di anonimizzazione ha i seguenti componenti:

  • L'archivio DICOM di origine: un archivio DICOM contenente una o più istanze con dati sensibili. Quando chiami l'operazione deidentify, tutte le istanze nell'archivio DICOM vengono anonimizzate.
  • L'archivio DICOM di destinazione: l'anonimizzazione non influisce sull'archivio DICOM originale o sui suoi dati. Vengono invece scritte nell'archivio DICOM di destinazione le copie anonimizzate dei dati originali. L'archivio DICOM di destinazione deve già esistere.
  • Che cosa anonimizzare: i parametri di configurazione che specificano come elaborare l'archivio DICOM. Puoi configurare l'anonimizzazione DICOM per anonimizzare i metadati dell'istanza DICOM (utilizzando le parole chiave dei tag) o il testo integrato nelle immagini DICOM specificando questi parametri in un oggetto DeidentifyConfig e passandoli in uno dei seguenti modi:
    • Impostazione del campo config del corpo della richiesta
    • Archiviandolo in Cloud Storage in formato JSON e specificando la posizione del file nel bucket tramite il campo gcsConfigUri del corpo della richiesta

Per un esempio di come anonimizzare i dati DICOM a livello di archivio DICOM, consulta Anonimizzazione dei dati a livello di archivio DICOM.

Filtri

Puoi anonimizzare un sottoinsieme di dati in un archivio DICOM configurando un file di filtro e specificando il file nella richiesta dicomStores.deidentify. Per un esempio, consulta Anonimizzazione di un sottoinsieme di un archivio DICOM.

Panoramica degli esempi

Gli esempi in questa guida utilizzano una singola istanza DICOM, ma puoi anche anonimizzare più istanze.

Ognuna delle sezioni seguenti fornisce esempi di come anonimizzare i dati DICOM utilizzando vari metodi. Per ogni campione viene fornito un output dell'immagine anonimizzata. Ogni esempio utilizza la seguente immagine originale come input:

xray_original

Puoi confrontare l'immagine di output di ogni operazione di anonimizzazione con questa immagine originale per visualizzare gli effetti dell'operazione.

Anonimizzazione dei tag DICOM

Puoi anonimizzare le istanze DICOM in base alle parole chiave dei tag nei metadati DICOM. I seguenti metodi di filtro dei tag sono disponibili nell'oggetto DicomConfig:

  • keepList: elenco di tag da conservare. Rimuovi tutti gli altri tag.
  • removeList: elenco dei tag da rimuovere. Conserva tutti gli altri tag.
  • filterProfile: un profilo di filtro dei tag utilizzato per determinare quali tag mantenere o rimuovere.

Per ogni esempio in questa sezione, viene fornito l'output dei metadati modificati dell'istanza DICOM. Di seguito sono riportati i metadati originali dell'istanza utilizzati come input per ogni campione:

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

Anonimizzazione mediante tag di elenco Keep

Quando specifichi un tag Keeplist nell'oggetto DicomConfig, per impostazione predefinita vengono aggiunti i seguenti tag:

  • 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

L'operazione deidentify non oscura i tag precedenti. Tuttavia, i valori di alcuni tag vengono rigenerati, il che significa che i valori vengono sostituiti con un valore diverso attraverso una trasformazione deterministica. Per maggiori informazioni, consulta la sezione Conserva l'opzione UID nello standard DICOM. Per mantenere i valori originali dei tag precedenti, utilizza l'opzione SkipIdRedaction.

Se non vengono forniti tag Keeplist, nessun tag DICOM nel set di dati viene oscurato.

Gli esempi riportati di seguito mostrano come anonimizzare un set di dati contenente archivi e dati DICOM, lasciando invariati alcuni tag.

Dopo aver inviato l'immagine all'API Cloud Healthcare, l'immagine apparirà come segue. Mentre i metadati visualizzati negli angoli superiori dell'immagine sono stati oscurati, le informazioni sanitarie protette (PHI) in burn-in nella parte inferiore dell'immagine rimangono. Per rimuovere il testo con burn-in, vedi Oscuramento del testo integrato nelle immagini.

dicom_keeplist

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.
  3. Una volta completata l'anonimizzazione, puoi recuperare i metadati per l'istanza anonimizzata per vedere come sono cambiati. L'istanza anonimizzata ha un UID nuovo di studi, un UID di serie e un UID delle istanze, quindi devi prima cercare l'istanza anonimizzata nel nuovo set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • SOURCE_DATASET_LOCATION: la posizione del set di dati di origine
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

    La tabella seguente mostra come sono cambiati l'UID degli studi, l'UID della serie e l'UID delle istanze:
      Metadati dell'istanza originali Metadati dell'istanza anonimizzati
    UID studi (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    UID 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 istanze (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. Utilizzando i nuovi valori, recupera i metadati per l'istanza.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/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

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output contiene i nuovi metadati. Puoi confrontare i nuovi metadati con i metadati originali per vedere l'effetto della trasformazione.

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

Anonimizzazione con i tag delle liste di rimozione

Puoi specificare una lista di rimozioni nell'oggetto DicomConfig. L'operazione deidentify oscurerà solo i tag specificati nell'elenco. Se non vengono forniti tag di rimozione, l'operazione di anonimizzazione procede normalmente, ma nessun tag DICOM nel set di dati di destinazione viene oscurato.

Quando specifichi una lista di rimozione, il tag OverlayData viene aggiunto per impostazione predefinita perché i dati degli overlay potrebbero contenere dati di tipo PHI.

I tag aggiunti per impostazione predefinita a un elenco di Keep non possono essere aggiunti a una lista di rimozione.

Gli esempi riportati di seguito mostrano come anonimizzare un set di dati contenente archivi e dati DICOM rimuovendo tutti i tag nella lista di rimozione. I tag che non sono inclusi nell'elenco di rimozione rimangono invariati.

Dopo aver inviato l'immagine all'API Cloud Healthcare, l'immagine apparirà come segue. Tra i tag forniti nella lista di rimozione, solo PatientBirthDate viene rimosso dall'immagine, in quanto è l'unico tag della lista di rimozione corrispondente ai metadati visibili nell'immagine.

Mentre il PatientBirthDate nell'angolo superiore dell'immagine è stato oscurato in base alla configurazione nella lista di rimozione, il PHI burn-in nella parte inferiore dell'immagine rimane. Per rimuovere il testo con burn-in, vedi Oscuramento del testo integrato nelle immagini.

dicom_removelist

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    @'
    {
      "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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.
  3. Una volta completata l'anonimizzazione, puoi recuperare i metadati per l'istanza anonimizzata per vedere come sono cambiati. L'istanza anonimizzata ha un UID nuovo di studi, un UID di serie e un UID delle istanze, quindi devi prima cercare l'istanza anonimizzata nel nuovo set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • SOURCE_DATASET_LOCATION: la posizione del set di dati di origine
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

    La tabella seguente mostra come sono cambiati l'UID degli studi, l'UID della serie e l'UID delle istanze:
      Metadati dell'istanza originali Metadati dell'istanza anonimizzati
    UID studi (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    UID 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 istanze (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. Utilizzando i nuovi valori, recupera i metadati per l'istanza.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/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

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output contiene i nuovi metadati. Puoi confrontare i nuovi metadati con i metadati originali per vedere l'effetto della trasformazione.

Anonimizzazione mediante un profilo filtro tag

Anziché specificare quali tag conservare o rimuovere, puoi configurare un elemento TagFilterProfile nell'oggetto DicomConfig. Un profilo di filtro dei tag è un profilo predefinito che determina quali tag conservare, rimuovere o trasformare. Consulta la documentazione di TagFilterProfile per i profili disponibili.

Gli esempi riportati di seguito mostrano come anonimizzare un set di dati contenente archivi e dati DICOM utilizzando il profilo di filtro dei tag ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE. Questo profilo di filtro dei tag rimuove i tag basati sul profilo di base della riservatezza degli attributi dello standard DICOM. L'API Cloud Healthcare non è completamente conforme al profilo di base di Attribute Confidentiality. Ad esempio, l'API Cloud Healthcare non verifica le limitazioni di Information Object Definition (IOD) quando si seleziona un'azione per un tag.

Dopo aver inviato l'immagine all'API Cloud Healthcare utilizzando il profilo di filtro dei tag ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE, l'immagine apparirà come segue. Mentre i metadati visualizzati negli angoli superiori dell'immagine sono stati oscurati, il PHI burn-in nella parte inferiore dell'immagine rimane. Per rimuovere anche il testo con burn-in, vedi Oscuramento del testo con burn-in nelle immagini.

dicom_attribute_confidentiality_basic_profile

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.
  3. Una volta completata l'anonimizzazione, puoi recuperare i metadati per l'istanza anonimizzata per vedere come sono cambiati. L'istanza anonimizzata ha un UID nuovo di studi, un UID di serie e un UID delle istanze, quindi devi prima cercare l'istanza anonimizzata nel nuovo set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • SOURCE_DATASET_LOCATION: la posizione del set di dati di origine
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

    La tabella seguente mostra come sono cambiati l'UID degli studi, l'UID della serie e l'UID delle istanze:
      Metadati dell'istanza originali Metadati dell'istanza anonimizzati
    UID studi (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    UID 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 istanze (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. Utilizzando i nuovi valori, recupera i metadati per l'istanza.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/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

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output contiene i nuovi metadati. Puoi confrontare i nuovi metadati con i metadati originali per vedere l'effetto della trasformazione.

Anonimizzazione dei dati nella console Google Cloud

Per anonimizzare i dati nella console Google Cloud, completa i seguenti passaggi:

  1. Nella console Google Cloud, vai alla pagina Set di dati.

    Vai alla pagina Set di dati

  2. Scegli Anonimizza dall'elenco Azioni per il set di dati che stai anonimizzando.

    Viene visualizzata la pagina Anonimizza il set di dati.

  3. Seleziona Imposta set di dati di destinazione e inserisci un nome per il nuovo set di dati in cui archiviare i dati anonimizzati.

  4. Seleziona Anonimizzazione dei tag DICOM per selezionare il profilo per il quale i dati vengono anonimizzati. I dati possono essere anonimizzati come segue:

  5. Seleziona Oscuramento del testo integrato DICOM per configurare la modalità di esecuzione dell'oscuramento dell'immagine durante l'anonimizzazione. Puoi configurare l'oscuramento delle immagini come segue:

  6. Fai clic su Anonimizza per anonimizzare i dati nel set di dati.

Oscuramento del testo integrato nelle immagini

L'API Cloud Healthcare può oscurare il testo con burn-in sensibile delle immagini. I dati sensibili come i dati di tipo PHI vengono rilevati dall'API, che li oscura quindi utilizzando un rettangolo opaco. L'API restituisce le stesse immagini DICOM che gli hai fornito, nello stesso formato, ma qualsiasi testo identificato come contenente informazioni sensibili in base ai tuoi criteri viene oscurato.

Puoi oscurare il testo integrato nelle immagini specificando un'opzione TextRedactionMode all'interno di un oggetto ImageConfig. Consulta la documentazione di TextRedactionMode per i possibili valori.

Oscuramento di tutto il testo integrato in un'immagine

Gli esempi riportati di seguito mostrano come oscurare tutto il testo integrato nelle immagini DICOM in un set di dati. Per farlo, specifica REDACT_ALL_TEXT nel campo TextRedactionMode.

Dopo aver inviato l'immagine all'API Cloud Healthcare utilizzando l'opzione REDACT_ALL_TEXT, l'immagine viene visualizzata come segue. Mentre il testo integrato nella parte inferiore dell'immagine è stato rimosso, i metadati negli angoli superiori dell'immagine rimangono. Per rimuovere anche i metadati, consulta Anonimizzazione dei tag DICOM.

xray_redact_all_text

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.
  3. Una volta completata l'anonimizzazione, puoi recuperare i metadati per l'istanza anonimizzata per vedere come sono cambiati. L'istanza anonimizzata ha un UID nuovo di studi, un UID di serie e un UID delle istanze, quindi devi prima cercare l'istanza anonimizzata nel nuovo set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • SOURCE_DATASET_LOCATION: la posizione del set di dati di origine
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

    La tabella seguente mostra come sono cambiati l'UID degli studi, l'UID della serie e l'UID delle istanze:
      Metadati dell'istanza originali Metadati dell'istanza anonimizzati
    UID studi (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    UID 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 istanze (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029

Oscuramento in un'immagine solo del testo con burn-in sensibile

Gli esempi riportati di seguito mostrano come oscurare il testo con burn-in sensibile dalle immagini DICOM in un set di dati. Per farlo, specifica REDACT_SENSITIVE_TEXT nel campo TextRedactionMode.

Gli infoType specificati negli infoType DICOM predefiniti vengono oscurati quando viene specificato REDACT_SENSITIVE_TEXT. Viene applicato anche un infoType personalizzato per gli identificatori dei pazienti, come i numeri delle cartelle cliniche (MRN) e gli identificatori dei pazienti vengono oscurati.

La seguente immagine mostra una radiografia non oscurata di un paziente:

xray2_unredacted

Dopo aver inviato l'immagine all'API Cloud Healthcare utilizzando l'opzione REDACT_SENSITIVE_TEXT, l'immagine viene visualizzata come segue:

xray2_redact_sensitive_text

Puoi notare che si è verificato quanto segue:

  • L'elemento PERSON_NAME nell'angolo in basso a sinistra dell'immagine è stato oscurato
  • L'elemento DATE nell'angolo in basso a sinistra dell'immagine è stato oscurato

Il sesso del paziente non è stato oscurato perché non è considerato testo sensibile in base agli infoType DICOM predefiniti.

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.
  3. Una volta completata l'anonimizzazione, puoi recuperare i metadati per l'istanza anonimizzata per vedere come sono cambiati. L'istanza anonimizzata ha un UID nuovo di studi, un UID di serie e un UID delle istanze, quindi devi prima cercare l'istanza anonimizzata nel nuovo set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • SOURCE_DATASET_LOCATION: la posizione del set di dati di origine
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

    La tabella seguente mostra come sono cambiati l'UID degli studi, l'UID della serie e l'UID delle istanze:
      Metadati dell'istanza originali Metadati dell'istanza anonimizzati
    UID studi (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    UID 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 istanze (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029

Combinazione di anonimizzazione dei tag e oscuramento del testo con burn-in

Puoi combinare l'anonimizzazione utilizzando i tag con l'oscuramento del testo integrato dalle immagini per anonimizzare le istanze DICOM a un livello più granulare. Ad esempio, combinando REDACT_ALL_TEXT nel campo TextRedactionMode con DEIDENTIFY_TAG_CONTENTS nel campo TagFilterProfile, puoi fare quanto segue:

  • REDACT_ALL_TEXT: oscura tutto il testo bruciato nell'immagine.
  • DEIDENTIFY_TAG_CONTENTS: esamina i contenuti dei tag e trasforma il testo sensibile. Per maggiori informazioni sul comportamento di DEIDENTIFY_TAG_CONTENTS, consulta Configurazione predefinita.

Dopo aver inviato l'immagine all'API Cloud Healthcare utilizzando le opzioni REDACT_ALL_TEXT e DEIDENTIFY_TAG_CONTENTS, l'immagine viene visualizzata come segue. Osserva i seguenti cambiamenti:

  • I nomi negli angoli in alto a sinistra e in alto a destra dell'immagine sono stati trasformati utilizzando un elemento CryptoHashConfig
  • Le date negli angoli in alto a sinistra e in alto a destra dell'immagine sono state trasformate utilizzando un elemento DateShiftConfig
  • Il testo integrato nella parte inferiore dell'immagine è oscurato

xray_redact_all_text_deidentify_tag_contents

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    @'
    {
      "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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.
  3. Una volta completata l'anonimizzazione, puoi recuperare i metadati per l'istanza anonimizzata per vedere come sono cambiati. L'istanza anonimizzata ha un UID nuovo di studi, un UID di serie e un UID delle istanze, quindi devi prima cercare l'istanza anonimizzata nel nuovo set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • SOURCE_DATASET_LOCATION: la posizione del set di dati di origine
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

  4. Utilizzando i nuovi valori, recupera i metadati per l'istanza.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/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

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output contiene i nuovi metadati. Puoi confrontare i nuovi metadati con i metadati originali per vedere l'effetto della trasformazione.

Utilizzo di infoType e trasformazioni primitive con i tag DICOM

L'API Cloud Healthcare può utilizzare i tipi di informazioni (infoType) per definire i dati che analizza quando esegue l'anonimizzazione sui tag. Un infoType è un tipo di dati sensibili, come il nome, l'indirizzo email, il numero di telefono, il numero di identificazione o il numero della carta di credito di un paziente.

Le trasformazioni primitive sono regole che utilizzi per trasformare un valore di input. Puoi personalizzare il modo in cui i tag DICOM vengono anonimizzati applicando una trasformazione primitiva all'infoType di ogni tag. Ad esempio, puoi anonimizzare il cognome di un paziente e sostituirlo con una serie di asterischi specificando l'infoType LAST_NAME con la trasformazione primitiva CharacterMaskConfig.

InfoType DICOM predefiniti

Gli infoType DICOM predefiniti utilizzati per l'anonimizzazione dei metadati sono:

  • 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

Quando anonimizza il testo sensibile nelle immagini utilizzando REDACT_SENSITIVE_TEXT, l'API Cloud Healthcare utilizza gli infoType di cui sopra, ma al testo sensibile nell'immagine viene applicato anche un infoType personalizzato aggiuntivo per gli identificatori dei pazienti, ad esempio i numeri delle cartelle cliniche (MRN).

Opzioni di trasformazione primitiva

Le opzioni di trasformazione primitiva dell'API Cloud Healthcare includono:

  • RedactConfig: oscura un valore rimuovendolo.
  • CharacterMaskConfig: maschera una stringa completamente o parzialmente sostituendo i caratteri di input con un carattere fisso specificato.
  • DateShiftConfig: sposta le date di un numero casuale di giorni, con l'opzione di essere coerente nello stesso contesto.
  • CryptoHashConfig: utilizza l'algoritmo SHA-256 per sostituire i valori di input con una rappresentazione con codifica base64 di una stringa di output sottoposta ad hashing generata utilizzando una determinata chiave di crittografia dei dati.
  • ReplaceWithInfoTypeConfig: sostituisce un valore di input con il nome del relativo infoType.

Specifica delle configurazioni in TextConfig

Gli infoType e le trasformazioni primitive sono specificati all'interno di un elemento InfoTypeTransformation, che è un oggetto all'interno di TextConfig. Gli infoType vengono inseriti nell'array infoTypes come valori separati da virgole.

La specifica di un infoType è facoltativa. Se non specifichi almeno un infoType, la trasformazione si applica agli infoType DICOM predefiniti presenti nell'API Cloud Healthcare.

Se specifichi qualsiasi infoType in InfoTypeTransformation, devi specificare almeno una trasformazione primitiva.

Puoi applicare un InfoTypeTransformation solo al profilo DEIDENTIFY_TAG_CONTENTS. Impossibile applicare un InfoTypeTransformation agli altri profili elencati in TagFilterProfile.

Le seguenti sezioni mostrano come utilizzare le trasformazioni primitive disponibili in InfoTypeTransformation insieme agli infoType per personalizzare il modo in cui i tag DICOM vengono anonimizzati. Gli esempi utilizzano l'immagine di esempio fornita nella Panoramica degli esempi e i metadati di esempio forniti in Anonimizzazione dei tag DICOM.

Configurazione predefinita

Per impostazione predefinita, quando il profilo DEIDENTIFY_TAG_CONTENTS viene impostato senza fornire alcuna configurazione nell'oggetto TextConfig, l'API Cloud Healthcare sostituisce i dati sensibili utilizzando gli infoType DICOM predefiniti. Tuttavia, il comportamento degli infoType DATE e PERSON_NAME è diverso, come mostrato di seguito:

  • Un DateShiftConfig viene applicato al testo classificato come infoType DATE. L'DateShiftConfig utilizza una tecnica di cambio delle date con un differenziale di 100 giorni.
  • Un CryptoHashConfig viene applicato al testo classificato come infoType PERSON_NAME. CryptoHashConfig esegue la tokenizzazione generando un valore surrogato utilizzando l'hashing crittografico.

Si applica anche il seguente comportamento:

  • Tutte le età dei pazienti con un valore maggiore o uguale a 90 vengono convertite in 90.
  • Se non è possibile applicare una trasformazione a causa delle restrizioni del formato DICOM, viene fornito un valore segnaposto corrispondente alla rappresentazione del valore (VR) del tag.
  • Tutti gli altri valori che corrispondono a uno degli infoType DICOM predefiniti nell'API Cloud Healthcare vengono sostituiti dal relativo infoType. Ad esempio, se il tag PatientComments conteneva la stringa "Ann Johnson è andata all'ospedale di Anytown", "Anytown" viene sostituito con l'infoType LOCATION.

Gli esempi riportati di seguito mostrano l'output dell'utilizzo del profilo predefinito DEIDENTIFY_TAG_CONTENTS su un set di dati contenente archivi e dati DICOM. Puoi confrontare questo output predefinito con gli output quando utilizzi le varie trasformazioni primitive con combinazioni di infoType. I campioni utilizzano una singola istanza DICOM, ma puoi anonimizzare più istanze.

Dopo aver inviato l'immagine all'API Cloud Healthcare utilizzando il profilo DEIDENTIFY_TAG_CONTENTS, l'immagine apparirà come segue. Osserva i seguenti cambiamenti:

  • I nomi negli angoli in alto a sinistra e in alto a destra dell'immagine sono stati trasformati utilizzando un elemento CryptoHashConfig
  • Le date negli angoli in alto a sinistra e in alto a destra dell'immagine sono state trasformate utilizzando un elemento DateShiftConfig

dicom_infotype_default

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.
  3. Una volta completata l'anonimizzazione, puoi recuperare i metadati per l'istanza anonimizzata per vedere come sono cambiati. L'istanza anonimizzata ha un UID nuovo di studi, un UID di serie e un UID delle istanze, quindi devi prima cercare l'istanza anonimizzata nel nuovo set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • SOURCE_DATASET_LOCATION: la posizione del set di dati di origine
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

  4. Utilizzando i nuovi valori, recupera i metadati per l'istanza.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/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

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output contiene i nuovi metadati. Puoi confrontare i nuovi metadati con i metadati originali per vedere l'effetto della trasformazione.

RedactConfig

Se specifichi redactConfig, un determinato valore viene oscurato completamente. Il messaggio redactConfig non ha argomenti; specificarlo consente la trasformazione.

Gli esempi seguenti si espandono nella configurazione predefinita, ma ora includono l'impostazione dell'infoType PERSON_NAME con la trasformazione redactConfig. L'invio di questa richiesta oscura tutti i nomi dell'istanza DICOM.

Dopo aver inviato l'immagine all'API Cloud Healthcare utilizzando la trasformazione redactConfig, l'immagine viene visualizzata come segue:

dicom_redactconfig

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    @'
    {
      "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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.
  3. Una volta completata l'anonimizzazione, puoi recuperare i metadati per l'istanza anonimizzata per vedere come sono cambiati. L'istanza anonimizzata ha un UID nuovo di studi, un UID di serie e un UID delle istanze, quindi devi prima cercare l'istanza anonimizzata nel nuovo set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • SOURCE_DATASET_LOCATION: la posizione del set di dati di origine
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

  4. Utilizzando i nuovi valori, recupera i metadati per l'istanza.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/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

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output contiene i nuovi metadati. Puoi confrontare i nuovi metadati con i metadati originali per vedere l'effetto della trasformazione.

L'output mostra che i valori in ReferringPhysicianName (00080090) e PatientName (00100010) sono stati rimossi. Ciò è in contrasto con l'esempio nella configurazione predefinita, in cui questi valori sono stati trasformati utilizzando l'hashing crittografico.

CharacterMaskConfig

Se specifichi characterMaskConfig, le stringhe corrispondenti agli infoType specificati vengono sostituite con un carattere fisso specificato. Ad esempio, anziché oscurare il nome di un paziente o trasformarlo utilizzando l'hashing crittografico, puoi sostituire il nome con una serie di asterischi (*). Puoi specificare il carattere fisso come valore nel campo maskingCharacter.

Gli esempi seguenti si espandono nella configurazione predefinita, ma ora includono l'impostazione dell'infoType LAST_NAME con la trasformazione characterMaskConfig. Non viene fornito alcun carattere fisso, quindi per impostazione predefinita il mascheramento utilizza gli asterischi.

Gli esempi utilizzano una singola istanza DICOM, ma puoi anonimizzare più istanze.

Dopo aver inviato l'immagine all'API Cloud Healthcare utilizzando la trasformazione characterMaskConfig, l'immagine viene visualizzata come segue:

dicom_charactermaskconfig

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    @'
    {
      "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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.
  3. Una volta completata l'anonimizzazione, puoi recuperare i metadati per l'istanza anonimizzata per vedere come sono cambiati. L'istanza anonimizzata ha un UID nuovo di studi, un UID di serie e un UID delle istanze, quindi devi prima cercare l'istanza anonimizzata nel nuovo set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • SOURCE_DATASET_LOCATION: la posizione del set di dati di origine
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

  4. Utilizzando i nuovi valori, recupera i metadati per l'istanza.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/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

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output contiene i nuovi metadati. Puoi confrontare i nuovi metadati con i metadati originali per vedere l'effetto della trasformazione.

L'output mostra che i cognomi in ReferringPhysicianName (00080090) e PatientName (00100010) sono stati sostituiti con asteri. Ciò è in contrasto con l'esempio della Configurazione predefinita, in cui questi valori sono stati trasformati utilizzando l'hashing crittografico.

DateShiftConfig

L'API Cloud Healthcare può trasformare le date spostandole all'interno di un intervallo preimpostato. Per mantenere le trasformazioni delle date coerenti tra le esecuzioni di anonimizzazione, utilizza DateShiftConfig con una delle seguenti opzioni:

Devi concedere un ruolo con l'cloudkms.cryptoKeyVersions.useToDecrypt autorizzazione all'agente di servizio Cloud Healthcare per decriptare la chiave con wrapping di Cloud KMS. Ti consigliamo di utilizzare il ruolo Autore crittografia CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyDecrypter). Quando utilizzi Cloud KMS per le operazioni di crittografia, vengono applicati dei costi. Per ulteriori informazioni, consulta i prezzi di Cloud Key Management Service.

L'API Cloud Healthcare utilizza questa chiave per calcolare l'importo entro il quale le date, ad esempio la data di nascita di un paziente, vengono spostate entro un differenziale di 100 giorni.

Se non fornisci una chiave, l'API Cloud Healthcare genera la propria chiave ogni volta che l'operazione di anonimizzazione viene eseguita sui valori di data. Ciò può causare output di date incoerenti tra le esecuzioni.

Gli esempi riportati di seguito mostrano come impostare gli infoType DATE e DATE_OF_BIRTH con la trasformazione DateShiftConfig su un'istanza DICOM. Dopo aver inviato la richiesta di anonimizzazione all'API Cloud Healthcare, i valori delle date dell'istanza verranno spostati entro 100 giorni più o meno dai valori originali.

La chiave di crittografia fornita, U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=, è una chiave non elaborata con crittografia AES a 256 bit in base64 generata utilizzando il seguente comando. Quando richiesto, viene fornita una password vuota per il comando:

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

Dopo aver inviato l'immagine all'API Cloud Healthcare utilizzando la trasformazione dateShiftConfig, l'immagine viene visualizzata come segue:

dicom_dateshiftconfig

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    @'
    {
      "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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.
  3. Una volta completata l'anonimizzazione, puoi recuperare i metadati per l'istanza anonimizzata per vedere come sono cambiati. L'istanza anonimizzata ha un UID nuovo di studi, un UID di serie e un UID delle istanze, quindi devi prima cercare l'istanza anonimizzata nel nuovo set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • SOURCE_DATASET_LOCATION: la posizione del set di dati di origine
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

  4. Utilizzando i nuovi valori, recupera i metadati per l'istanza.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/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

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output contiene i nuovi metadati. Puoi confrontare i nuovi metadati con i metadati originali per vedere l'effetto della trasformazione.

L'output mostra che StudyDate (00080020) e PatientBirthDate (00100030) hanno nuovi valori. Queste trasformazioni si sono verificate come risultato della combinazione del differenziale di 100 giorni con il valore cryptoKey fornito. I nuovi valori della data sono coerenti per questa istanza tra le esecuzioni di anonimizzazione, purché venga fornito lo stesso cryptoKey.

CryptoHashConfig

Puoi lasciare vuoto il campo cryptoHashConfig oppure puoi specificarlo in uno dei seguenti modi:

Devi concedere un ruolo con l'cloudkms.cryptoKeyVersions.useToDecrypt autorizzazione all'agente di servizio Cloud Healthcare per decriptare la chiave con wrapping di Cloud KMS. Ti consigliamo di utilizzare il ruolo Autore crittografia CryptoKey Cloud KMS (roles/cloudkms.cryptoKeyDecrypter). Quando utilizzi Cloud KMS per le operazioni di crittografia, vengono applicati dei costi. Per ulteriori informazioni, consulta i prezzi di Cloud Key Management Service.

L'API Cloud Healthcare può trasformare i dati sostituendo i valori con hash di crittografia (detti anche valori surrogati). Per farlo, specifica un messaggio cryptoHashConfig.

Se non fornisci una chiave, l'API Cloud Healthcare genera una chiave. L'API Cloud Healthcare utilizza questa chiave per generare valori surrogati. Se fornisci la stessa chiave per ogni esecuzione, l'API Cloud Healthcare genera valori surrogati coerenti. Se non fornisci una chiave, l'API Cloud Healthcare genera una nuova chiave ogni volta che viene eseguita l'operazione. L'uso di una chiave diversa genera valori di surrogato diversi.

Gli esempi riportati di seguito mostrano come applicare una trasformazione cryptoHashConfig a tutti gli infoType DICOM predefiniti supportati nell'API Cloud Healthcare. Dopo aver inviato la richiesta di anonimizzazione, i valori con un infoType DICOM corrispondente nell'API Cloud Healthcare vengono sostituiti con valori surrogati.

L'esempio mostra anche come fornire una chiave di crittografia per generare valori surrogati coerenti tra le esecuzioni di anonimizzazione.

La chiave di crittografia fornita, U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=, è una chiave non elaborata con crittografia AES a 256 bit in base64 generata utilizzando il seguente comando. Quando richiesto, viene fornita una password vuota per il comando:

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

Dopo aver inviato l'immagine all'API Cloud Healthcare utilizzando la trasformazione cryptoHashConfig, l'immagine viene visualizzata come segue:

dicom_cryptohashconfig

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    @'
    {
      "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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.
  3. Una volta completata l'anonimizzazione, puoi recuperare i metadati per l'istanza anonimizzata per vedere come sono cambiati. L'istanza anonimizzata ha un UID nuovo di studi, un UID di serie e un UID delle istanze, quindi devi prima cercare l'istanza anonimizzata nel nuovo set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • SOURCE_DATASET_LOCATION: la posizione del set di dati di origine
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

  4. Utilizzando i nuovi valori, recupera i metadati per l'istanza.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/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

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output contiene i nuovi metadati. Puoi confrontare i nuovi metadati con i metadati originali per vedere l'effetto della trasformazione.

Le trasformazioni nell'output sono coerenti per questa istanza tra le esecuzioni di anonimizzazione, purché venga fornito lo stesso cryptoKey.

ReplaceWithInfoTypeConfig

Se specifichi replaceWithInfoTypeConfig, i valori di input vengono sostituiti con il nome dell'infoType del valore.

Gli esempi riportati di seguito mostrano come applicare una trasformazione replaceWithInfoTypeConfig a tutti gli infoType DICOM predefiniti supportati nell'API Cloud Healthcare. Il messaggio replaceWithInfoTypeConfig non ha argomenti; specifica che abilita la trasformazione.

Dopo aver inviato l'immagine all'API Cloud Healthcare utilizzando la trasformazione replaceWithInfoTypeConfig, l'immagine viene visualizzata come segue:

dicom_replacewithinfotypeconfig

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    @'
    {
      "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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.
  3. Una volta completata l'anonimizzazione, puoi recuperare i metadati per l'istanza anonimizzata per vedere come sono cambiati. L'istanza anonimizzata ha un UID nuovo di studi, un UID di serie e un UID delle istanze, quindi devi prima cercare l'istanza anonimizzata nel nuovo set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • SOURCE_DATASET_LOCATION: la posizione del set di dati di origine
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    Dovresti ricevere una risposta JSON simile alla seguente:

  4. Utilizzando i nuovi valori, recupera i metadati per l'istanza.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione. Equivale all'ID dell'archivio DICOM nel set di dati di origine.

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    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

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/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

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output contiene i nuovi metadati. Puoi confrontare i nuovi metadati con i metadati originali per vedere l'effetto della trasformazione.

Anonimizzazione dei dati a livello di archivio DICOM

Gli esempi precedenti mostrano come anonimizzare i dati DICOM a livello del set di dati. Questa sezione descrive come anonimizzare i dati a livello di archivio DICOM.

Per cambiare una richiesta di anonimizzazione dei set di dati in una richiesta di anonimizzazione degli archivi DICOM, apporta le seguenti modifiche:

  • Modifica destinationDataset nel corpo della richiesta in destinationStore
  • Aggiungi dicomStores/DESTINATION_DICOM_STORE_ID alla fine del valore in destinationStore quando specifichi la destinazione
  • Aggiungi dicomStores/SOURCE_DICOM_STORE_ID quando specifichi la posizione dei dati di origine

Ad esempio:

Anonimizzazione a livello di set di dati:

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

Anonimizzazione a livello di negozio 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"

Gli esempi riportati di seguito si espandono sulla combinazione dell'anonimizzazione dei tag e dell'oscuramento del testo con burn-in, ma l'anonimizzazione si verifica in un singolo archivio DICOM e i dati anonimizzati vengono copiati in un nuovo archivio DICOM. Prima di eseguire gli esempi, l'archivio DICOM a cui fa riferimento DESTINATION_DICOM_STORE_ID deve già esistere.

Console

Per anonimizzare i dati in un archivio DICOM utilizzando la console Google Cloud, completa i seguenti passaggi.

  1. Nella console Google Cloud, vai alla pagina Set di dati.

    Vai a Set di dati

  2. Fai clic sul set di dati contenente i dati che vuoi anonimizzare.

  3. Nell'elenco degli archivi DICOM, scegli Anonimizza dall'elenco Azioni per l'archivio DICOM che stai anonimizzando.

    Viene visualizzata la pagina Anonimizza l'archivio DICOM.

  4. Seleziona Imposta datastore di destinazione e scegli il set di dati e l'archivio DICOM in cui vengono salvati i dati anonimizzati.

  5. Seleziona Anonimizzazione dei tag DICOM per configurare il modo in cui i dati vengono anonimizzati. I dati possono essere anonimizzati come segue:

  6. Seleziona Oscuramento del testo integrato DICOM per configurare la modalità di esecuzione dell'oscuramento dell'immagine durante l'anonimizzazione. Puoi configurare l'oscuramento delle immagini come segue:

  7. Fai clic su Anonimizza per anonimizzare i dati nell'archivio DICOM.

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • SOURCE_DICOM_STORE_ID: l'ID dell'archivio DICOM contenente i dati da anonimizzare
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    @'
    {
      "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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.

Anonimizzazione di un sottoinsieme di un archivio DICOM

Puoi anonimizzare un sottoinsieme dei dati in un archivio DICOM specificando un filtro.

Il filtro assume la forma di un file filtro da te specificato come valore per il campo resourcePathsGcsUri nell'oggetto DicomFilterConfig. Il file del filtro deve esistere in un bucket Cloud Storage; non puoi specificare un file di filtro che esiste sulla tua macchina locale o su qualsiasi altra origine. La posizione del file deve essere nel formato gs://BUCKET/PATH/TO/FILE.

Creazione di un file di filtro

Un file filtro definisce i file DICOM da anonimizzare. Puoi filtrare i file nei seguenti livelli:

  • A livello di studio
  • A livello di serie
  • A livello di istanza

Il file filtro è composto da una riga per studio, serie o istanza che vuoi anonimizzare. Ogni riga utilizza il formato /studies/STUDY_UID[/series/SERIES_UID[/instances/INSTANCE_UID]]. Alla fine di ogni riga è presente un carattere di nuova riga: \n o \r\n.

Se uno studio, una serie o un'istanza non sono specificati nel file filtro che hai passato durante la chiamata dell'operazione di anonimizzazione, lo studio, la serie o l'istanza non saranno anonimizzati e non saranno presenti nell'archivio DICOM di destinazione.

È richiesta solo la parte /studies/STUDY_UID del percorso. Ciò significa che puoi anonimizzare uno studio specificando /studies/STUDY_UID oppure puoi anonimizzare una serie specificando /studies/STUDY_UID/series/SERIES_UID.

Considera il seguente file di filtro. Il file di filtro fa sì che uno studio, due serie e tre singole istanze siano anonimizzati:

/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

crea un file di filtro utilizzando BigQuery

In genere, un file di filtro viene creato esportando prima i metadati da un archivio DICOM in BigQuery. Ciò consente di utilizzare BigQuery per visualizzare gli UID di studio, serie e istanza dei dati DICOM nel tuo archivio DICOM. A questo punto, procedi nel seguente modo:

  1. Query per gli UID di studio, serie e istanza che ti interessano. Ad esempio, dopo aver esportato i metadati in BigQuery, puoi eseguire la seguente query per concatenare gli UID di studio, serie e istanza in un formato compatibile con i requisiti dei file di filtro:

    SELECT CONCAT
      ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
      [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
    
  2. Se la query restituisce un set di risultati di grandi dimensioni, puoi materializzare una nuova tabella salvando i risultati della query in una tabella di destinazione in BigQuery.

  3. Dopo aver salvato i risultati della query nella tabella di destinazione, puoi salvare i contenuti della tabella di destinazione in un file ed esportarlo in Cloud Storage. Per la procedura da seguire, vedi Esportazione dei dati di una tabella. Il file esportato è il tuo file di filtro. Userai la posizione del file del filtro in Cloud Storage quando specifichi il filtro nell'operazione di esportazione.

Creare manualmente un file di filtro

Puoi creare un file di filtro con contenuti personalizzati e caricarlo in un bucket Cloud Storage. Potrai utilizzare la posizione del file del filtro in Cloud Storage quando specifichi il filtro nell'operazione di anonimizzazione. L'esempio seguente mostra come caricare un file di filtro in un bucket Cloud Storage utilizzando il comando gsutil cp:

gsutil cp PATH/TO/FILTER_FILE gs://BUCKET/DIRECTORY

Ad esempio:

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

Uso di un filtro

Dopo aver configurato il file dei filtri, puoi passarlo come valore al campo resourcePathsGcsUri nell'oggetto filterConfig.

Il seguente esempio si espande sulla pagina Anonimizzazione dei dati a livello di archivio DICOM, ma in Cloud Storage viene fornito un file filtro che determina quali risorse DICOM sono anonimizzate.

REST

  1. Anonimizza il set di dati.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • LOCATION: la posizione del set di dati
    • SOURCE_DATASET_ID: l'ID del set di dati contenente i dati da anonimizzare
    • DESTINATION_DATASET_ID: l'ID del set di dati di destinazione in cui sono scritti i dati anonimizzati
    • SOURCE_DICOM_STORE_ID: l'ID dell'archivio DICOM contenente i dati da anonimizzare
    • DESTINATION_DICOM_STORE_ID: l'ID dell'archivio DICOM nel set di dati di destinazione
    • BUCKET/PATH/TO/FILE: la posizione del file del filtro in un bucket Cloud Storage

    Corpo JSON della richiesta:

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

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    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

    Quindi, esegui questo comando per inviare la richiesta 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

    Salva il corpo della richiesta in un file denominato request.json. Esegui questo comando nel terminale per creare o sovrascrivere questo file nella directory attuale:

    @'
    {
      "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

    Quindi, esegui questo comando per inviare la richiesta 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
    L'output è il seguente. La risposta contiene un identificatore per un'operazione a lunga esecuzione. Le operazioni a lunga esecuzione vengono restituite quando il completamento delle chiamate ai metodi può richiedere molto tempo. Prendi nota del valore di OPERATION_ID. Questo valore ti servirà nel passaggio successivo.

  2. Utilizza il metodo projects.locations.datasets.operations.get per ottenere lo stato dell'operazione a lunga esecuzione.

    Prima di utilizzare i dati della richiesta, effettua le seguenti sostituzioni:

    • PROJECT_ID: l'ID del tuo progetto Google Cloud
    • DATASET_ID: l'ID del set di dati
    • LOCATION: la posizione del set di dati
    • OPERATION_ID: l'ID restituito dall'operazione a lunga esecuzione

    Per inviare la richiesta, scegli una delle seguenti opzioni:

    curl

    Esegui questo comando:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID"

    PowerShell

    Esegui questo comando:

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

    Invoke-WebRequest `
    -Method GET `
    -Headers $headers `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    Explorer API

    Apri la pagina di riferimento del metodo. Sul lato destro della pagina si apre il riquadro Explorer API. Puoi interagire con questo strumento per inviare richieste. Compila tutti i campi obbligatori e fai clic su Esegui.

    L'output è il seguente. Quando la risposta contiene "done": true, l'operazione a lunga esecuzione è terminata.

Risoluzione dei problemi relativi alle operazioni di anonimizzazione DICOM

Se si verificano errori durante un'operazione di anonimizzazione DICOM, questi vengono registrati in Cloud Logging. Per saperne di più, consulta Visualizzazione dei log degli errori in Cloud Logging.

Se l'intera operazione restituisce un errore, consulta la sezione Risoluzione dei problemi relativi alle operazioni a lunga esecuzione.