使用 DicomConfig 將 DICOM 資料去識別化

本頁說明如何使用 v1 DicomConfig 設定,在下列層級將 DICOM 執行個體中的機密資料去識別化:

本頁面也會說明如何在 DICOM 存放區層級去識別化資料時套用篩選器。

去識別化總覽

資料集層級去識別化

如要在資料集層級將 DICOM 資料去識別化,請呼叫 datasets.deidentify 作業。去識別化 API 呼叫包含下列元件:

  • 來源資料集:包含 DICOM 儲存庫的資料集,其中有一或多個含有私密資料的執行個體。呼叫 deidentify 作業時,資料集中所有 DICOM 儲存庫的所有執行個體都會經過去識別化處理。
  • 目的地資料集:去識別化不會影響原始資料集或其資料。而是將原始資料的去識別化副本寫入新的資料集 (稱為「目的地資料集」)
  • 要將哪些內容去識別化:指定如何處理資料集的設定參數。您可以設定 DICOM 去識別化,透過在 DeidentifyConfig 物件中指定這些參數,並執行下列操作,將 DICOM 執行個體中繼資料 (使用標記關鍵字) 或 DICOM 影像中的烙印文字去識別化:
    • 設定要求主體的 config 欄位
    • 以 JSON 格式儲存在 Cloud Storage 中,並使用要求主體的 gcsConfigUri 欄位,指定 bucket 中的檔案位置

本指南中的大多數範例,都會說明如何將資料集層級的 DICOM 資料去識別化。

DICOM 儲存庫層級去識別化

在 DICOM 儲存庫層級將 DICOM 資料去識別化,可讓您進一步控管要將哪些資料去識別化。舉例來說,如果資料集有多個 DICOM 儲存庫,您可以根據儲存庫中的資料類型,對每個 DICOM 儲存庫進行去識別化。

如要將 DICOM 儲存庫中的 DICOM 資料去識別化,請呼叫 dicomStores.deidentify 方法。去識別化 API 呼叫作業包含下列元件:

  • 來源 DICOM 儲存庫:包含一或多個含有私密資料的執行個體。呼叫 deidentify 作業時,系統會將 DICOM 儲存庫中的所有執行個體去識別化。
  • 目的地 DICOM 儲存庫:去識別化不會影響原始 DICOM 儲存庫或其資料。而是將原始資料的去識別化副本寫入目標 DICOM 儲存庫。目的地 DICOM 儲存庫必須已存在。
  • 要將哪些內容去識別化:指定如何處理 DICOM 儲存庫的設定參數。您可以透過在 DeidentifyConfig 物件中指定這些參數,並透過下列其中一種方式傳遞該物件,設定 DICOM 去識別化功能,以去識別化 DICOM 執行個體中繼資料 (使用標記關鍵字) 或 DICOM 圖片中的烙印文字:
    • 設定要求主體的 config 欄位
    • 以 JSON 格式儲存在 Cloud Storage 中,並使用要求主體的 gcsConfigUri 欄位,指定 bucket 中的檔案位置

如要瞭解如何將 DICOM 存放區層級資料去識別化,請參閱將 DICOM 存放區層級資料去識別化

篩選器

您可以設定篩選器檔案,並在 dicomStores.deidentify 要求中指定該檔案,藉此將 DICOM 存放區中的部分資料去識別化。如需範例,請參閱去識別化 DICOM 儲存庫的子集

範例總覽

本指南中的範例使用單一 DICOM 執行個體,但您也可以去識別多個執行個體。

以下各節提供範例,說明如何使用各種方法去識別 DICOM 資料。每個樣本都會提供去識別化圖片的輸出內容。每個範例都會使用下列原始圖片做為輸入內容:

xray_original

您可以比較各項去識別化作業的輸出圖片與原始圖片,瞭解作業效果。

將 DICOM 標記去識別化

您可以根據 DICOM 中繼資料中的標記關鍵字,將 DICOM 執行個體去識別化。您可以在 DicomConfig 物件中使用下列標記篩選方法:

  • keepList:要保留的標記清單。移除所有其他標記。
  • removeList:要移除的標記清單。保留所有其他標記。
  • filterProfile:用於判斷要保留或移除哪些標記的標記篩選設定檔。

本節中的每個範例都會提供 DICOM 執行個體變更後的中繼資料輸出內容。以下是執行個體的原始中繼資料,用做每個範例的輸入內容:

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

使用 keepList 標記去識別化

DicomConfig 物件中指定保留清單標記時,系統預設會新增下列標記:

  • 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

deidentify 作業不會遮蓋先前的標記。不過,部分標記的值會重新產生,也就是說,這些值會透過確定性轉換替換為其他值。詳情請參閱 DICOM 標準中的「保留 UID 選項」。如要保留先前代碼的原始值,請使用 SkipIdRedaction 選項。

如未提供保留清單標記,系統就不會遮蓋資料集中的任何 DICOM 標記。

下列範例說明如何將含有 DICOM 儲存庫和 DICOM 資料的資料集去識別化,同時保留部分標記不變。

將圖片提交給 Cloud Healthcare API 後,圖片看起來會如下所示。雖然圖片頂端角落顯示的中繼資料已遭遮蓋,但圖片底部的受保護健康資訊 (PHI) 仍會顯示。如要一併移除內建文字,請參閱「從圖片中遮蓋內建文字」。

dicom_keeplist

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。
  3. 去識別化成功後,您可以擷取去識別化執行個體的中繼資料,查看變更情形。去識別化執行個體會有新的研究 UID、系列 UID 和執行個體 UID,因此您必須先在新的資料集中搜尋去識別化執行個體。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • SOURCE_DATASET_LOCATION:來源資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    您應該會收到如下的 JSON 回應:

    下表顯示研究 UID、系列 UID 和執行個體 UID 的變化:
      原始執行個體中繼資料 去識別化執行個體中繼資料
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    檢查實例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值擷取執行個體的中繼資料。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容會包含新的中繼資料。您可以比較新中繼資料與原始中繼資料,瞭解轉換效果。

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

使用 removelist 標記去識別化

您可以在 DicomConfig 物件中指定移除清單。deidentify 作業只會遮蓋清單中指定的標記。如果未提供任何 removelist 標記,去識別化作業會照常進行,但不會遮蓋目標資料集中的任何 DICOM 標記。

指定移除清單時,系統預設會新增 OverlayData 標記,因為疊加資料可能含有受保護的健康資訊。

預設會新增至保留清單的標記無法新增至移除清單。

下列範例說明如何從含有 DICOM 儲存庫和 DICOM 資料的資料集中,移除 removelist 中的所有標記,藉此將資料去識別化。不在移除清單中的標記不會變更。

將圖片提交給 Cloud Healthcare API 後,圖片看起來會如下所示。在移除清單中提供的標記中,只有 PatientBirthDate 會從圖片中移除,因為這是移除清單中唯一對應至圖片中顯示中繼資料的標記。

雖然系統已根據 removelist 中的設定,將圖片頂端角落的 PatientBirthDate 遮蓋,但圖片底部的內建 PHI 仍存在。如要一併移除內建文字,請參閱「從圖片中遮蓋內建文字」。

dicom_removelist

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

    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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。
  3. 去識別化成功後,您可以擷取去識別化執行個體的中繼資料,查看變更情形。去識別化執行個體會有新的研究 UID、系列 UID 和執行個體 UID,因此您必須先在新的資料集中搜尋去識別化執行個體。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • SOURCE_DATASET_LOCATION:來源資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    您應該會收到如下的 JSON 回應:

    下表顯示研究 UID、系列 UID 和執行個體 UID 的變化:
      原始執行個體中繼資料 去識別化執行個體中繼資料
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    檢查實例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值擷取執行個體的中繼資料。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容會包含新的中繼資料。您可以比較新中繼資料與原始中繼資料,瞭解轉換效果。

使用標記篩選設定檔去識別化

您可以設定 DicomConfig 物件中的 TagFilterProfile,不必指定要保留或移除哪些標記。代碼篩選設定檔是預先定義的設定檔,可決定要保留、移除或轉換哪些代碼。如需可用設定檔,請參閱TagFilterProfile說明文件。

以下範例說明如何使用標記篩選器設定檔 ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE,將含有 DICOM 儲存庫和 DICOM 資料的資料集去識別化。這個標記篩選設定檔會根據 DICOM 標準的屬性機密性基本設定檔移除標記。Cloud Healthcare API 並不完全符合屬性機密性基本設定檔。舉例來說,選取標記的動作時,Cloud Healthcare API 不會檢查資訊物件定義 (IOD) 限制。

使用 ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE 標記篩選設定檔將圖片提交給 Cloud Healthcare API 後,圖片看起來會如下所示。雖然圖片頂端角落顯示的中繼資料已遭塗銷,但圖片底部的內建 PHI 仍存在。 如要一併移除內建文字,請參閱「從圖片中遮蓋內建文字」。

dicom_attribute_confidentiality_basic_profile

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。
  3. 去識別化成功後,您可以擷取去識別化執行個體的中繼資料,查看變更情形。去識別化執行個體會有新的研究 UID、系列 UID 和執行個體 UID,因此您必須先在新的資料集中搜尋去識別化執行個體。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • SOURCE_DATASET_LOCATION:來源資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    您應該會收到如下的 JSON 回應:

    下表顯示研究 UID、系列 UID 和執行個體 UID 的變化:
      原始執行個體中繼資料 去識別化執行個體中繼資料
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    檢查實例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029
  4. 使用新值擷取執行個體的中繼資料。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容會包含新的中繼資料。您可以比較新中繼資料與原始中繼資料,瞭解轉換效果。

在 Google Cloud 控制台中將資料去識別化

如要在 Google Cloud 控制台中去識別化資料,請完成下列步驟:

  1. 前往 Google Cloud 控制台的「資料集」頁面。

    前往「資料集」頁面

  2. 在要解除識別的資料集「動作」清單中,選擇「解除識別」

    「De-identify Dataset」(取消識別資料集) 頁面隨即顯示。

  3. 選取「設定目的地資料集」,然後輸入新資料集的名稱,以儲存去識別化資料。

  4. 選取「DICOM tag de-identification」(DICOM 標記去識別化),然後選取要將哪些資料去識別化的設定檔。資料去識別化方式如下:

  5. 選取「DICOM 烙印文字遮蓋」,設定去識別化期間的圖片遮蓋方式。您可以按照下列方式設定圖片遮蓋:

  6. 按一下「去識別化」,將資料集中的資料去識別化。

遮蓋圖片中的內建文字

Cloud Healthcare API 可遮蓋圖片中內建的機密文字。API 會偵測 PHI 等機密資料,並使用不透明的矩形遮蔽這些資料。API 會以相同格式傳回您提供的同一張 DICOM 圖片,但依據您的條件識別為含有機密資訊的任何文字則會受到遮蓋。

如要從圖片中遮蓋內建文字,請在 ImageConfig 物件中指定 TextRedactionMode 選項。如要查看可能的值,請參閱 TextRedactionMode 說明文件。

遮蓋圖片中所有內建文字

以下範例顯示如何遮蓋資料集中 DICOM 圖片的所有烙印文字。方法是在 TextRedactionMode 欄位中指定 REDACT_ALL_TEXT

使用 REDACT_ALL_TEXT 選項將圖片提交給 Cloud Healthcare API 後,圖片看起來會如下所示。雖然圖片底部的內建文字已移除,但圖片頂端角落的中繼資料仍保留。如要一併移除中繼資料,請參閱將 DICOM 標記去識別化

xray_redact_all_text

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。
  3. 去識別化成功後,您可以擷取去識別化執行個體的中繼資料,查看變更情形。去識別化執行個體會有新的研究 UID、系列 UID 和執行個體 UID,因此您必須先在新的資料集中搜尋去識別化執行個體。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • SOURCE_DATASET_LOCATION:來源資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    您應該會收到如下的 JSON 回應:

    下表顯示研究 UID、系列 UID 和執行個體 UID 的變化:
      原始執行個體中繼資料 去識別化執行個體中繼資料
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    檢查實例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029

只遮蓋圖片中內建的機密文字

下列範例說明如何從資料集中的 DICOM 圖片遮蓋內建的機密文字。方法是在 TextRedactionMode 欄位中指定 REDACT_SENSITIVE_TEXT

指定 REDACT_SENSITIVE_TEXT 時,系統會遮蓋預設 DICOM infoType 中指定的 infoType。此外,系統也會套用病患 ID 的自訂 infoType,例如病歷號碼 (MRN),並將病患 ID 遮蓋。

下圖顯示未經過編輯的病患 X 光片:

xray2_unredacted

使用 REDACT_SENSITIVE_TEXT 選項將圖片提交給 Cloud Healthcare API 之後,圖片看起來會如下所示:

xray2_redact_sensitive_text

您可以看到發生了下列情況:

  • 圖片左下方的 PERSON_NAME 已遭塗銷
  • 圖片左下方的 DATE 已遭塗銷

由於根據預設 DICOM infoTypes,病患性別不屬於私密文字,因此未經過修訂。

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。
  3. 去識別化成功後,您可以擷取去識別化執行個體的中繼資料,查看變更情形。去識別化執行個體會有新的研究 UID、系列 UID 和執行個體 UID,因此您必須先在新的資料集中搜尋去識別化執行個體。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • SOURCE_DATASET_LOCATION:來源資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    您應該會收到如下的 JSON 回應:

    下表顯示研究 UID、系列 UID 和執行個體 UID 的變化:
      原始執行個體中繼資料 去識別化執行個體中繼資料
    研究 UID (0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    系列 UID (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    檢查實例 UID (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029

結合標記去識別化和烙印文字遮蓋功能

您可以結合使用標記去識別化和遮蓋圖片內建文字,以更精細的層級去識別化 DICOM 執行個體。舉例來說,您可以將 TextRedactionMode 欄位中的 REDACT_ALL_TEXTTagFilterProfile 欄位中的 REDACT_ALL_TEXT 結合,執行下列操作:DEIDENTIFY_TAG_CONTENTS

  • REDACT_ALL_TEXT:遮蓋圖片中所有內建文字。
  • DEIDENTIFY_TAG_CONTENTS:檢查標記內容並轉換機密文字。如要進一步瞭解 DEIDENTIFY_TAG_CONTENTS 的行為,請參閱預設設定

使用 REDACT_ALL_TEXTDEIDENTIFY_TAG_CONTENTS 選項將圖片提交給 Cloud Healthcare API 後,圖片看起來會如下所示。請注意下列異動:

  • 圖片左上角和右上角的名稱已使用 CryptoHashConfig 轉換
  • 圖片左上角和右上角的日期已使用 DateShiftConfig 轉換
  • 圖片底部的內建文字已經過編輯

xray_redact_all_text_deidentify_tag_contents

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

    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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。
  3. 去識別化成功後,您可以擷取去識別化執行個體的中繼資料,查看變更情形。去識別化執行個體會有新的研究 UID、系列 UID 和執行個體 UID,因此您必須先在新的資料集中搜尋去識別化執行個體。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • SOURCE_DATASET_LOCATION:來源資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    您應該會收到如下的 JSON 回應:

  4. 使用新值擷取執行個體的中繼資料。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容會包含新的中繼資料。您可以比較新中繼資料與原始中繼資料,瞭解轉換效果。

使用 infoType 和原始轉換搭配 DICOM 標記

Cloud Healthcare API 可使用「資訊類型」(infoType) 定義在對標記執行去識別化時,要掃描哪些資料。infoType 是一種機密資料,如病患姓名、電子郵件地址、電話號碼、身分證號碼或信用卡號。

原始轉換是指用於轉換輸入值的規則。您可以對每個標記的 infoType 套用基本轉換,自訂 DICOM 標記的去識別化方式。舉例來說,您可以指定 LAST_NAME infoType 和 CharacterMaskConfig 原始轉換,將病患的姓氏去識別化,並替換為一連串星號。

預設 DICOM infoType

將中繼資料去識別化時,系統會使用下列預設 DICOM infoType:

  • 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

使用 REDACT_SENSITIVE_TEXT 對圖片中的私密文字進行去識別化時,Cloud Healthcare API 會使用上述 infoType,但也會對圖片中的私密文字套用病患 ID 的額外自訂 infoType,例如病歷號碼 (MRN)。

原始轉換選項

Cloud Healthcare API 原始轉換選項包括:

  • RedactConfig:透過移除的方式刪減值。
  • CharacterMaskConfig:將輸入字元替換為指定的固定字元,以完全或局部遮蔽字串。
  • DateShiftConfig:按隨機天數轉移日期,並提供讓相同背景資訊保持一致的選項。
  • CryptoHashConfig:使用 SHA-256 將輸入值替換為以 Base64 編碼的雜湊輸出字串,該字串是使用指定的資料加密金鑰產生。
  • ReplaceWithInfoTypeConfig:將輸入值替換為其 infoType 名稱。

在「TextConfig」中指定設定

InfoType 和原始轉換是在 InfoTypeTransformation 中指定,這是 TextConfig 內的物件。InfoType 會以半形逗號分隔值形式輸入 infoTypes 陣列。

您可以選擇是否指定 infoType。如果未指定至少一個 infoType,轉換會套用至 Cloud Healthcare API 中找到的預設 DICOM infoType

如果您在 InfoTypeTransformation 中指定任何 infoType,則必須指定至少一個原始轉換。

你只能將 InfoTypeTransformation 套用至DEIDENTIFY_TAG_CONTENTS商家檔案。InfoTypeTransformation 無法套用至 TagFilterProfile 中列出的其他設定檔。

以下各節說明如何使用 InfoTypeTransformation 中提供的原始轉換和 infoType,自訂 DICOM 標記的去識別化方式。這些範例會使用「範例總覽」中提供的範例圖片,以及「取消識別 DICOM 標記」中提供的範例中繼資料。

預設設定

根據預設,如果設定 DEIDENTIFY_TAG_CONTENTS 設定檔時未在 TextConfig 物件中提供任何設定,Cloud Healthcare API 會使用預設 DICOM infoType 替換私密資料。不過,DATEPERSON_NAME infoType 的行為不同,如下所示:

  • DateShiftConfig 會套用至分類為 DATE infoType 的文字。DateShiftConfig 使用日期偏移技術,差異為 100 天。
  • CryptoHashConfig 會套用至分類為 PERSON_NAME infoType 的文字。CryptoHashConfig 會使用加密編譯雜湊產生替代值,藉此執行代碼化

此外,也適用下列行為:

  • 任何大於或等於 90 的患者年齡值都會轉換為 90。
  • 如果因 DICOM 格式限制而無法套用轉換,系統會提供與標記的值表示 (VR) 相對應的預留位置值。
  • 如果其他值對應至 Cloud Healthcare API 中的預設 DICOM infoType,則會替換為該 infoType。舉例來說,如果 PatientComments 代碼包含「Ann Johnson went to Anytown Hospital」(安‧強森前往安城醫院) 字串,則「Anytown」會替換為 LOCATION infoType。

以下範例顯示在含有 DICOM 儲存庫和 DICOM 資料的資料集上,使用DEIDENTIFY_TAG_CONTENTS預設設定檔的輸出內容。您可以比較這個預設輸出內容,以及使用各種原始轉換和 infoType 組合時的輸出內容。範例使用單一 DICOM 執行個體,但您可以將多個執行個體去識別化。

使用 DEIDENTIFY_TAG_CONTENTS 設定檔將圖片提交給 Cloud Healthcare API 後,圖片看起來會如下所示。 請注意下列異動:

dicom_infotype_default

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。
  3. 去識別化成功後,您可以擷取去識別化執行個體的中繼資料,查看變更情形。去識別化執行個體會有新的研究 UID、系列 UID 和執行個體 UID,因此您必須先在新的資料集中搜尋去識別化執行個體。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • SOURCE_DATASET_LOCATION:來源資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    您應該會收到如下的 JSON 回應:

  4. 使用新值擷取執行個體的中繼資料。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容會包含新的中繼資料。您可以比較新中繼資料與原始中繼資料,瞭解轉換效果。

RedactConfig

指定 redactConfig 會透過將值徹底移除的方式遮蓋指定值。 redactConfig 訊息沒有引數;指定這個物件會啟用轉換。

下列範例會擴充預設設定,但現在包含使用 redactConfig 轉換設定 PERSON_NAME infoType。傳送這項要求會從 DICOM 執行個體中刪除所有名稱。

使用 redactConfig 轉換將圖片提交給 Cloud Healthcare API 之後,圖片看起來會如下所示:

dicom_redactconfig

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

    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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。
  3. 去識別化成功後,您可以擷取去識別化執行個體的中繼資料,查看變更情形。去識別化執行個體會有新的研究 UID、系列 UID 和執行個體 UID,因此您必須先在新的資料集中搜尋去識別化執行個體。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • SOURCE_DATASET_LOCATION:來源資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    您應該會收到如下的 JSON 回應:

  4. 使用新值擷取執行個體的中繼資料。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容會包含新的中繼資料。您可以比較新中繼資料與原始中繼資料,瞭解轉換效果。

輸出內容顯示 ReferringPhysicianName (00080090) 和 PatientName (00100010) 中的值已移除。這與預設設定中的範例不同,後者是使用加密雜湊轉換這些值。

CharacterMaskConfig

指定 characterMaskConfig 會將與指定 infoType 對應的字串替換為指定的固定字元。舉例來說,您可以將病患姓名替換為一連串星號 (*),而非遮蓋或使用加密雜湊轉換姓名。您可以將固定字元指定為 maskingCharacter 欄位的值。

下列範例會擴充預設設定,但現在包含使用 characterMaskConfig 轉換設定 LAST_NAME infoType。未提供固定字元,因此遮蓋預設會使用星號。

範例使用單一 DICOM 執行個體,但您可以將多個執行個體去識別化。

使用 characterMaskConfig 轉換將圖片提交給 Cloud Healthcare API 之後,圖片看起來會如下所示:

dicom_charactermaskconfig

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

    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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。
  3. 去識別化成功後,您可以擷取去識別化執行個體的中繼資料,查看變更情形。去識別化執行個體會有新的研究 UID、系列 UID 和執行個體 UID,因此您必須先在新的資料集中搜尋去識別化執行個體。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • SOURCE_DATASET_LOCATION:來源資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    您應該會收到如下的 JSON 回應:

  4. 使用新值擷取執行個體的中繼資料。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容會包含新的中繼資料。您可以比較新中繼資料與原始中繼資料,瞭解轉換效果。

輸出結果顯示 ReferringPhysicianName (00080090) 和 PatientName (00100010) 中的姓氏已替換為星號。這與預設設定中的範例不同,在該範例中,這些值是使用加密雜湊轉換。

DateShiftConfig

Cloud Healthcare API 可在預設範圍內移動日期,藉此轉換日期。如要確保在多個去識別化作業中,日期轉換作業保持一致,請搭配下列任一方法使用 DateShiftConfig

您必須將具有 cloudkms.cryptoKeyVersions.useToDecrypt 權限的角色授予 Cloud Healthcare Service Agent 服務帳戶,才能解密 Cloud KMS 包裝金鑰。建議使用 Cloud KMS CryptoKey 解密者角色 (roles/cloudkms.cryptoKeyDecrypter)。使用 Cloud KMS 進行加密作業時,系統會收取費用。詳情請參閱 Cloud Key Management Service 定價

Cloud Healthcare API 會使用這個金鑰,計算日期 (例如病患的出生日期) 在 100 天差異內轉移的量。

如果您未提供金鑰,Cloud Healthcare API 會在每次對日期值執行去識別化作業時,自行產生金鑰。這可能會導致每次執行時的日期輸出不一致。

以下範例說明如何在 DICOM 執行個體上,使用 DateShiftConfig 轉換設定 DATEDATE_OF_BIRTH infoType。將去識別化要求傳送至 Cloud Healthcare API 後,執行個體中的日期值會轉移,與原始值相差最多 100 天。

提供的加密金鑰 U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU= 是原始的 AES 加密 256 位元 Base64 編碼金鑰,使用下列指令產生。系統提示時,請為指令提供空白密碼:

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

使用 dateShiftConfig 轉換將圖片提交給 Cloud Healthcare API 之後,圖片看起來會如下所示:

dicom_dateshiftconfig

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

    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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。
  3. 去識別化成功後,您可以擷取去識別化執行個體的中繼資料,查看變更情形。去識別化執行個體會有新的研究 UID、系列 UID 和執行個體 UID,因此您必須先在新的資料集中搜尋去識別化執行個體。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • SOURCE_DATASET_LOCATION:來源資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    您應該會收到如下的 JSON 回應:

  4. 使用新值擷取執行個體的中繼資料。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容會包含新的中繼資料。您可以比較新中繼資料與原始中繼資料,瞭解轉換效果。

輸出內容會顯示 StudyDate (00080020) 和 PatientBirthDate (00100030) 的新值。這些轉換是將 100 天的差異與提供的 cryptoKey 值合併所致。只要提供相同的 cryptoKey,這個執行個體在去識別化執行期間的新日期值就會保持一致。

CryptoHashConfig

你可以將 cryptoHashConfig 留空,也可以提供下列任一項:

您必須將具有 cloudkms.cryptoKeyVersions.useToDecrypt 權限的角色授予 Cloud Healthcare Service Agent 服務帳戶,才能解密 Cloud KMS 包裝金鑰。建議使用 Cloud KMS CryptoKey 解密者角色 (roles/cloudkms.cryptoKeyDecrypter)。使用 Cloud KMS 進行加密作業時,系統會收取費用。詳情請參閱 Cloud Key Management Service 定價

Cloud Healthcare API 可以將值替換為加密雜湊 (也稱為替代值),藉此轉換資料。如要這麼做,請指定 cryptoHashConfig 訊息。

如果您未提供金鑰,Cloud Healthcare API 會產生金鑰。Cloud Healthcare API 會使用這個金鑰產生替代值。如果您為每次執行作業提供相同的金鑰,Cloud Healthcare API 會產生一致的替代值。如果您未提供金鑰,Cloud Healthcare API 每次執行作業時都會產生新金鑰。使用不同金鑰會產生不同的替代值。

下列範例說明如何將 cryptoHashConfig 轉換套用至 Cloud Healthcare API 支援的所有預設 DICOM infoType。傳送去識別化要求後,Cloud Healthcare API 中具有對應 DICOM infoType 的值會替換為替代值。

這個範例也說明如何提供加密金鑰,在去識別化作業之間產生一致的替代值。

提供的加密金鑰 U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU= 是原始的 AES 加密 256 位元 Base64 編碼金鑰,使用下列指令產生。系統提示時,請為指令提供空白密碼:

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

使用 cryptoHashConfig 轉換將圖片提交給 Cloud Healthcare API 之後,圖片看起來會如下所示:

dicom_cryptohashconfig

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

    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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。
  3. 去識別化成功後,您可以擷取去識別化執行個體的中繼資料,查看變更情形。去識別化執行個體會有新的研究 UID、系列 UID 和執行個體 UID,因此您必須先在新的資料集中搜尋去識別化執行個體。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • SOURCE_DATASET_LOCATION:來源資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    您應該會收到如下的 JSON 回應:

  4. 使用新值擷取執行個體的中繼資料。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容會包含新的中繼資料。您可以比較新中繼資料與原始中繼資料,瞭解轉換效果。

只要提供相同的 cryptoKey,這個執行個體在去識別化作業之間,輸出內容的轉換就會保持一致。

ReplaceWithInfoTypeConfig

指定 replaceWithInfoTypeConfig 會將輸入值替換為該值的 infoType 名稱。

下列範例說明如何將 replaceWithInfoTypeConfig 轉換套用至 Cloud Healthcare API 支援的所有預設 DICOM infoTypereplaceWithInfoTypeConfig 訊息沒有引數;指定這個物件會啟用轉換。

使用 replaceWithInfoTypeConfig 轉換將圖片提交給 Cloud Healthcare API 之後,圖片看起來會如下所示:

dicom_replacewithinfotypeconfig

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

    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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。
  3. 去識別化成功後,您可以擷取去識別化執行個體的中繼資料,查看變更情形。去識別化執行個體會有新的研究 UID、系列 UID 和執行個體 UID,因此您必須先在新的資料集中搜尋去識別化執行個體。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • SOURCE_DATASET_LOCATION:來源資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    您應該會收到如下的 JSON 回應:

  4. 使用新值擷取執行個體的中繼資料。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID。與來源資料集中的 DICOM 儲存庫 ID 相同。

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容會包含新的中繼資料。您可以比較新中繼資料與原始中繼資料,瞭解轉換效果。

將 DICOM 存放區層級資料去識別化

上述範例說明如何將資料集層級的 DICOM 資料去識別化。 本節說明如何將 DICOM 存放區層級資料去識別化。

如要將資料集去識別化要求變更為 DICOM 儲存庫去識別化要求,請進行下列變更:

  • 將要求主體中的 destinationDataset 修改為 destinationStore
  • 指定目的地時,在 destinationStore 中值的結尾新增 dicomStores/DESTINATION_DICOM_STORE_ID
  • 指定來源資料位置時,請加入 dicomStores/SOURCE_DICOM_STORE_ID

例如:

資料集層級去識別化:

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

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"

下列範例會擴充合併標記去識別化和烙印文字遮蓋的內容,但去識別化作業會在單一 DICOM 儲存庫上進行,且去識別化資料會複製到新的 DICOM 儲存庫。執行範例前,DESTINATION_DICOM_STORE_ID 參照的 DICOM 儲存庫必須已存在。

控制台

如要使用 Google Cloud 控制台將 DICOM 儲存庫中的資料去識別化,請完成下列步驟。

  1. 前往 Google Cloud 控制台的「資料集」頁面。

    前往「資料集」頁面

  2. 按一下包含要去識別化資料的資料集。

  3. 在 DICOM 儲存庫清單中,從要進行去識別化處理的 DICOM 儲存庫的「動作」清單中,選擇「去識別化」

    系統會顯示「De-identify DICOM store」(DICOM 儲存庫去識別化) 頁面。

  4. 選取「設定目的地資料存放區」,然後選擇要將去識別化資料儲存至哪個資料集和 DICOM 存放區。

  5. 選取「DICOM tag de-identification」(DICOM 標記去識別化),設定資料去識別化方式。您可以透過下列方式將資料去識別化:

  6. 選取「DICOM 烙印文字遮蓋」,設定去識別化期間的圖片遮蓋方式。您可以按照下列方式設定圖片遮蓋:

  7. 按一下「去識別化」,將 DICOM 存放區中的資料去識別化。

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • SOURCE_DICOM_STORE_ID:包含要進行去識別化資料的 DICOM 儲存庫 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中的 DICOM 儲存庫 ID

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

    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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。

將 DICOM 儲存庫的子集去識別化

您可以指定篩選器,將 DICOM 存放區中的部分資料去識別化。

篩選條件會採用篩選條件檔案的形式,您可以在 DicomFilterConfig 物件中,將篩選條件檔案指定為 resourcePathsGcsUri 欄位的值。篩選器檔案必須位於 Cloud Storage bucket 中,您無法指定本機或其他來源的篩選器檔案。檔案位置的格式必須為 gs://BUCKET/PATH/TO/FILE

建立篩選器檔案

篩選器檔案會定義要將哪些 DICOM 檔案去識別化。 您可以依下列層級篩選檔案:

  • 研究層級
  • 在影集層級
  • 在執行個體層級

篩選器檔案的每一行代表您要匿名處理的研究、序列或執行個體。每行都採用 /studies/STUDY_UID[/series/SERIES_UID[/instances/INSTANCE_UID]] 格式。 每行結尾都有換行字元:\n\r\n

如果您在呼叫去識別化作業時傳遞的篩選器檔案中,未指定研究、系列或執行個體,系統就不會對該研究、系列或執行個體去識別化,且不會出現在目的地 DICOM 存放區。

路徑中只需要 /studies/STUDY_UID 部分。也就是說,您可以指定 /studies/STUDY_UID 來去識別研究,也可以指定 /studies/STUDY_UID/series/SERIES_UID 來去識別序列。

請參考下列篩選器檔案。篩選器檔案會導致一項研究、兩個序列和三個個別例項去識別化:

/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

使用 BigQuery 建立篩選器檔案

您通常會先將 DICOM 儲存庫中的中繼資料匯出至 BigQuery,然後建立篩選器檔案。這樣一來,您就能使用 BigQuery 查看 DICOM 儲存庫中 DICOM 資料的研究、系列和執行個體 UID。接著,你可以執行下列操作:

  1. 查詢您感興趣的研究、系列和執行個體 UID。 舉例來說,將中繼資料匯出至 BigQuery 後,您可以執行下列查詢,將研究、系列和例項 UID 串連至符合篩選器檔案需求的格式:

    SELECT CONCAT
      ('/studies/', StudyInstanceUID, '/series/', SeriesInstanceUID, '/instances/', SOPInstanceUID)
    FROM
      [PROJECT_ID:BIGQUERY_DATASET.BIGQUERY_TABLE]
  2. 如果查詢傳回大型結果集,您可以將查詢結果儲存至 BigQuery 中的目的地資料表,具體化新資料表。

  3. 將查詢結果儲存到目標資料表後,您可以將目標資料表的內容儲存到檔案,然後匯出至 Cloud Storage。如需相關步驟,請參閱「匯出資料表資料」。匯出的檔案就是篩選器檔案。在匯出作業中指定篩選條件時,您會使用 Cloud Storage 中的篩選條件檔案位置。

手動建立篩選器檔案

您可以建立含有自訂內容的篩選器檔案,然後將其上傳至 Cloud Storage 值區。在去識別化作業中指定篩選條件時,您會使用 Cloud Storage 中的篩選條件檔案位置。下列範例說明如何使用 gcloud storage cp 指令,將篩選器檔案上傳至 Cloud Storage 值區:

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

例如:

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

使用篩選器

設定篩選器檔案後,您可以將其做為 filterConfig 物件中 resourcePathsGcsUri 欄位的值傳遞。

下列範例會擴充將 DICOM 存放區層級資料去識別化,但會提供 Cloud Storage 中的篩選器檔案,用於判斷要將哪些 DICOM 資源去識別化。

REST

  1. 將資料集去識別化。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • LOCATION:資料集位置
    • SOURCE_DATASET_ID:包含要進行去識別化資料的資料集 ID
    • DESTINATION_DATASET_ID:去識別化資料的寫入目的地資料集 ID
    • SOURCE_DICOM_STORE_ID:包含要進行去識別化資料的 DICOM 儲存庫 ID
    • DESTINATION_DICOM_STORE_ID:目的地資料集中 DICOM 儲存庫的 ID
    • BUCKET/PATH/TO/FILE:Cloud Storage 值區中篩選器檔案的位置

    JSON 要求主體:

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

    如要傳送要求,請選擇以下其中一個選項:

    curl

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

    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

    接著,請執行下列指令來傳送 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

    將要求主體儲存在名為 request.json 的檔案中。 在終端機中執行下列指令,在目前目錄中建立或覆寫這個檔案:

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

    接著,請執行下列指令來傳送 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
    輸出內容如下。回應會包含長時間執行作業的 ID。 如果方法呼叫可能需要大量時間才能完成,系統就會傳回長時間執行的作業。請記下 OPERATION_ID 的值。下一個步驟會用到這個值。

  2. 使用 projects.locations.datasets.operations.get 方法取得長時間執行的作業狀態。

    使用任何要求資料之前,請先替換以下項目:

    • PROJECT_ID:您的 Google Cloud 專案 ID
    • DATASET_ID:資料集 ID
    • LOCATION:資料集位置
    • OPERATION_ID:長時間執行的作業傳回的 ID

    如要傳送要求,請選擇以下其中一個選項:

    curl

    執行下列指令:

    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

    執行下列指令:

    $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

    APIs Explorer

    開啟方法參考頁面。系統會在頁面右側開啟 APIs Explorer 面板。您可以使用這項工具來傳送要求。完成任何必填欄位,然後按一下「執行」

    輸出內容如下。如果回應包含 "done": true,表示長時間執行的作業已完成。

排解 DICOM 去識別化作業問題

如果 DICOM 去識別化作業期間發生錯誤,系統會將錯誤記錄至 Cloud Logging。詳情請參閱「查看 Cloud Logging 中的錯誤記錄檔」。

如果整個作業傳回錯誤,請參閱「排解長期執行的作業問題」。