使用 DicomConfig 將 DICOM 資料去識別化

本頁說明如何使用 v1 DicomConfig 設定,在下列層級去識別 DICOM 例項中的機密資料:

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

去識別化總覽

資料集層級去識別化

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

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

本指南中的大部分範例都說明如何在資料集層級將 DICOM 資料去識別化。

DICOM 儲存庫層級去識別化

在 DICOM 儲存庫層級將 DICOM 資料去識別化,可讓您更精準控管要去識別哪些資料。舉例來說,如果資料集包含多個 DICOM 儲存庫,您可以根據儲存庫中存在的資料類型,為每個 DICOM 儲存庫去識別。

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

  • 來源 DICOM 儲存庫:含有一或多個含有機密資料的例項的 DICOM 儲存庫。呼叫 deidentify 作業時,DICOM 儲存庫中的所有例項都會去識別化。
  • 目的地 DICOM 儲存庫:去識別化不會影響原始 DICOM 儲存庫或其資料。而是將原始資料的去識別化副本寫入目標 DICOM 儲存庫。目的地 DICOM 儲存庫必須已存在。
  • 要去識別的內容:指定 DICOM 儲存庫處理方式的設定參數。您可以設定 DICOM 去識別化功能,以便使用標記關鍵字,或在 DICOM 圖像中烙印文字,藉此去識別 DICOM 例項中繼資料。方法是:在 DeidentifyConfig 物件中指定這些參數,然後透過下列任一方式傳遞:
    • 設定要求主體的 config 欄位
    • 以 JSON 格式儲存在 Cloud Storage 中,並使用請求主體的 gcsConfigUri 欄位指定檔案在值區中的所在位置

如需 DICOM 存放區層級 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 物件中指定 keeplist 標記時,系統會預設加入下列標記:

  • 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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 作業只會遮蓋清單中指定的標記。如果未提供移除清單標記,去識別化作業會照常進行,但不會遮蓋目的地資料集中的 DICOM 標記。

指定移除清單時,系統會預設加入 OverlayData 代碼,因為疊加資料可能包含受保護的健康資訊。

預設加入保留清單的代碼無法加入移除清單。

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

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

雖然圖片頂端角落的 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

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

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

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

如要透過 Google Cloud 主控台去識別資料,請完成下列步驟:

  1. 在 Google Cloud 控制台中,前往「Datasets」(資料集) 頁面。

    前往「資料集」頁面

  2. 針對要去識別的資料集,從「動作」清單中選擇「去識別」

    系統隨即會顯示「De-identify Dataset」(去識別資料集) 頁面。

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

  4. 選取「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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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,並遮蓋病患 ID。

下圖為未經遮蓋的病患 X 光片:

xray2_unredacted

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

xray2_redact_sensitive_text

您可以看到以下情況:

  • 圖片左下方的 PERSON_NAME 已被遮蓋
  • 圖片左下方的 DATE 已被遮蓋

根據預設 DICOM infoType,患者的性別不屬於敏感文字,因此未予以遮蓋。

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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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 欄位中的 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

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

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

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

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

原始轉換是用來轉換輸入值的規則。您可以為每個標記的 infoType 套用原始轉換,自訂 DICOM 標記的去識別化方式。舉例來說,您可以使用 CharacterMaskConfig 原始轉換,指定 LAST_NAME infoType,藉此去識別病患的姓氏,並將其替換為一系列星號。

預設 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,但也會將病患識別碼 (例如病歷號碼) 的額外自訂 infoType 套用至圖片中的機密文字。

原始轉換選項

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

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

TextConfig 中指定設定

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

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

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

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

以下各節將說明如何使用 InfoTypeTransformation 提供的原始轉換功能,以及如何搭配 infoTypes 自訂 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

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

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

輸出結果顯示 ReferringPhysicianName (00080090) 和 PatientName (00100010) 中的值已遭移除。這與預設設定中的範例不同,因為在該範例中,這些值是使用密碼編譯處理過的。

CharacterMaskConfig

指定 characterMaskConfig 會將對應給定 infoTypes 的字串替換為指定的固定字元。舉例來說,您可以將病患姓名替換為一系列星號 (*),而非遮蓋姓名或使用加密雜湊法進行轉換。您可以將固定字元指定為 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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 infoTypes。將去識別化要求傳送至 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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

    開啟方法參考頁面。系統會在頁面右側開啟 API 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 控制台中,前往「Datasets」(資料集) 頁面。

    前往「資料集」

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

  3. 在 DICOM 儲存庫清單中,針對要去識別的 DICOM 儲存庫,從「動作」清單中選擇「去識別」

    系統會顯示「去識別 DICOM 儲存庫」頁面。

  4. 選取「Set destination data store」(設定目的地資料儲存庫),然後選擇要儲存去識別化資料的資料集和 DICOM 儲存庫。

  5. 選取「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

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

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

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

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

篩選器採用篩選器檔案的形式,您可在 DicomFilterConfig 物件中將其指定為 resourcePathsGcsUri 欄位的值。篩選器檔案必須位於 Cloud Storage 值區中,您無法指定位於本機電腦或任何其他來源的篩選器檔案。檔案位置的格式必須為 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

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

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

排解 DICOM 去識別化作業的問題

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

如果整個作業傳回錯誤,請參閱長期執行作業的疑難排解