DicomTagConfig를 사용하여 DICOM 데이터 익명화

이 페이지에서는 Cloud Healthcare API의 v1beta1 DicomTagConfig 구성을 사용하여 다음 수준에서 DICOM 인스턴스의 민감한 정보를 익명화하는 방법을 설명합니다.

이 페이지에서는 DICOM 저장소 수준에서 데이터를 익명화할 때 필터를 적용하는 방법도 설명합니다.

기존 v1 DicomConfig 객체 또는 v1beta1 DicomTagConfig 객체를 사용하여 DICOM 익명화 작업을 구성할 수 있습니다. DicomTagConfig를 사용하는 것이 좋습니다.

익명화 작업에 이미 DicomConfig를 사용하는 경우 DicomTagConfig를 사용하도록 마이그레이션하는 것이 좋습니다. 새 기능의 요약은 DicomTagConfig의 새로운 구성 옵션을 참고하세요. 이전 방법에 관한 안내는 DicomTagConfig를 사용하도록 요청 및 응답 마이그레이션을 참고하세요.

DicomTagConfig의 새로운 구성 옵션

컨텍스트 익명화를 사용하여 텍스트 익명화

DicomTagConfig.Options.CleanDescriptorsOption 객체를 구성하여 구조화되지 않은 메타데이터 텍스트를 컨텍스트에서 익명화하도록 설정할 수 있습니다. 이 옵션은 설명어 정리 옵션을 기반으로 합니다. DicomTagConfig.Options.CleanDescriptorsOption을 지정하면 검사 중에 추가 infoType이 사용되어 결제 비용에 영향을 미칠 수 있습니다.

DicomTagConfig.Options.CleanDescriptorsOption 옵션을 사용하면 삭제된 태그와 일치하는 구조화되지 않은 메타데이터 텍스트를 변환하여 익명화 품질을 개선할 수 있습니다. 예를 들어, X선을 익명화하고 X선 환자는 Wall과 같이 역시 명사인 성을 가지고 있다고 가정합니다. 인스턴스의 메타데이터(예: StudyDescription의 텍스트)에 단어 Wall이 포함된 경우 텍스트가 변환됩니다.

CleanDescriptorsOption 옵션은 태그가 다음 작업 코드 중 하나와 일치하는 경우 DICOM 기본 프로필에서 삭제로 지정된 태그와 일치하는 컨텍스트 구문을 수정합니다.

  • D
  • Z
  • X
  • U

일치하는 컨텍스트 구문은 [CTX] 토큰으로 대체됩니다.

다음을 지정하여 수정할 태그를 구성할 수 있습니다.

  • ProfileType 객체의 enum입니다. enum을 지정할 필요는 없습니다.
  • 특정 태그에 대한 CleanTextTag 필터입니다.

그러나 DICOM 기본 프로필에 사용되는 태그는 변경할 수 없습니다.

컨텍스트 익명화를 사용하여 번인된 텍스트 수정

TextRedactionMode.REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS enum을 지정하여 이미지에 번인된 텍스트의 컨텍스트 익명화를 사용 설정할 수 있습니다. 이 옵션은 설명어 정리 옵션을 기반으로 합니다. TextRedactionMode.REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS enum을 지정하면 검사 중에 추가 infoType이 사용되며 결제 비용에 영향을 줄 수 있습니다.

TextRedactionMode.REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS enum은 다음 방법으로 지정할 수 있습니다.

TextRedactionMode.REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS 옵션은 태그가 다음 작업 코드 중 하나와 일치하는 경우 DICOM 기본 프로필에서 삭제로 지정된 태그와 일치하는 번인된 텍스트를 수정합니다.

  • D
  • Z
  • X
  • U

ProfileType 객체에 enum을 사용하여 사용 설정 또는 사용 중지하는 것 외에는 번인된 텍스트의 컨텍스트 익명화를 위한 추가 구성은 없습니다. enum을 지정할 필요는 없습니다.

이미지 익명화의 추가 infoType

정보 유형(infoType)을 사용하여 태그에서 익명화를 수행할 때 스캔할 데이터를 지정할 수 있습니다. infoType은 환자 이름, 이메일 주소, 전화번호, 신분증 또는 신용카드 번호와 같은 민감한 정보 유형입니다.

DicomTagConfig.Options.ImageConfig 객체에서 다음 필드를 구성하여 DICOM 이미지 익명화 중에 사용할 infoType을 결정할 수 있습니다.

이 필드는 DicomTagConfig.Options.ImageConfig.TextRedactionMode가 다음 값 중 하나로 설정된 경우에만 적용됩니다.

DicomTagConfig를 사용하도록 요청 및 응답 마이그레이션

Cloud Healthcare API v1beta1에서 사용할 수 있으며 기존 DicomConfig 대신 사용할 수 있는 DicomTagConfig를 사용하여 DICOM 익명화를 구성할 수 있습니다. 요청을 보낼 때 DicomConfigDicomTagConfig를 모두 포함할 수는 없습니다.

다음 섹션에서는 DicomConfig의 구성과 이를 DicomTagConfig로 이전하는 방법을 설명합니다.

TagFilterProfile에서 ProfileType으로

DicomConfig TagFilterProfile 객체를 DicomTagConfig ProfileType 객체로 바꿉니다. 동일한 TagFilterProfileType의 4개 프로필을 ProfileType에서 사용할 수 있습니다.

다음 예는 요청을 TagFilterProfile 사용에서 ProfileType 사용으로 이전하는 방법을 보여줍니다.

DicomConfigDicomTagConfig
"config": {
  "dicom": {
    "filterProfile": enum(TagFilterProfile)
  }
}
"config": {
  "dicomTagConfig": {
    "profileType": enum(ProfileType)
  }
}

keepList, removeList

DicomConfig keepListremoveList 필드는 더 이상 DicomTagConfig에서 사용할 수 없습니다. 프로필을 사용하는 대신 keepListremoveList를 사용하여 보존하거나 삭제할 태그를 지정한 경우, 태그 작동 방식을 지정하는 새 Action 객체로 마이그레이션해야 합니다. Action 객체는 태그를 변환하는 추가 옵션을 제공합니다.

다음 예는 요청을 keepList 사용에서 Action.keepTag 사용으로 이전하는 방법을 보여줍니다. 이 요청은 익명화 작업 중에 PatientID 태그의 값이 유지된다고 지정합니다.

DicomConfigDicomTagConfig
"config": {
  "dicom": {
    "keepList": {
      "tags": [
        "PatientID"
      ]
    }
  }
}
"config": {
  "dicomTagConfig": {
    "actions": [
      {
        "queries": [
          "PatientID"
        ],
        "keepTag": {}
      }
    ]
  }
}

유지 목록, 삭제 목록, 프로필 결합

DicomConfig 객체에서 유지 목록, 삭제 목록, 프로필에 따라 데이터를 유지 또는 삭제할지 여부를 결정할 수 있습니다. 이 옵션은 상호 배타적입니다.

DicomTagConfig 객체를 사용할 때, Action 객체에서 유지 및 삭제할 태그를 지정하고 또한 ProfileType에서 프로필을 지정하여 이러한 옵션을 지정할 수 있습니다.

Action 객체에 구성된 옵션은 ProfileType 프로필에 구성된 옵션보다 우선 적용됩니다. Action 객체의 옵션은 요청에 제공된 순서대로 적용됩니다.

skipIdRedaction에서 Objects.primaryIds

DicomConfig 객체의 skipIdRedaction 필드를 DicomTagConfig 객체의 primaryIds 필드로 바꿉니다. Options 객체에 있는 primaryIds 필드에는 다음 enum 중 하나를 지정하는 PrimaryIdsOption 객체가 포함됩니다.

  • PRIMARY_IDS_OPTION_UNSPECIFIED: PrimaryIdsOption에 값이 제공되지 않은 경우의 기본 동작입니다. 기본값은 ProfileType에 지정된 옵션입니다.
  • KEEP: 기본 ID는 변경하지 않습니다.
  • REGEN: 기본 ID를 다시 생성합니다.

다음 예는 요청을 skipIdRedaction 사용에서 Options.primaryIds 사용으로 이전하는 방법을 보여줍니다. 요청은 익명화 작업 중에 기본 ID의 값이 유지되도록 지정합니다.

DicomConfigDicomTagConfig
"config": {
  "dicom": {
    "skipIdRedaction": true
  }
}
"config": {
  "dicomTagConfig": {
    "options": {
      "primaryIds": "KEEP"
    }
  }
}

DeidentifyConfig.ImageConfig에서 DicomTagConfig.Options.ImageConfig

DeidentifyConfig.ImageConfig 객체를 DicomTagConfig.Options.ImageConfig 객체로 바꿉니다. ImageConfig 객체의 옵션은 두 버전에서 동일합니다.

다음 예는 요청을 DeidentifyConfig.imageImageConfig 사용에서 DeidentifyConfig.DicomTagConfig.Options.cleanImageImageConfig 사용으로 이전하는 방법을 보여줍니다. 요청은 익명화 작업 중에 이미지의 모든 텍스트를 수정해야 한다고 지정합니다.

DeidentifyConfig.imageDeidentifyConfig.DicomTagConfig.Options.cleanImage
"config": {
  "image": {
    "textRedactionMode": "REDACT_ALL_TEXT"
  }
}
"config": {
  "dicomTagConfig": {
    "options": {
      "cleanImage": {
        "textRedactionMode": "REDACT_ALL_TEXT"
      }
    }
  }
}

익명화 개요

데이터 세트 수준 익명화

데이터 세트 수준에서 DICOM 데이터를 익명화하려면 datasets.deidentify 메서드를 호출합니다. datasets.deidentify 메서드에는 다음과 같은 구성요소가 있습니다.

  • 소스 데이터 세트: 민감한 정보가 있는 인스턴스가 하나 이상 있는 DICOM 저장소가 포함된 데이터 세트입니다. datasets.deidentify 메서드를 호출하면 데이터 세트의 모든 DICOM 저장소에 있는 모든 인스턴스가 익명화됩니다.
  • 대상 데이터 세트: 익명화는 원본 데이터 세트 또는 해당 데이터에 영향을 주지 않습니다. 대신 원본 데이터의 익명화된 복사본이 대상 데이터 세트라고 하는 새 데이터 세트에 기록됩니다.
  • 익명화할 대상: 데이터 세트의 DICOM 데이터를 처리하는 방법을 지정하는 구성 매개변수입니다. DeidentifyConfig 객체에 이러한 매개 변수를 지정하여 DICOM 이미지에서 인스턴스 메타데이터(태그 키워드 사용) 또는 번인 텍스트를 익명화하도록 DICOM 익명화를 구성할 수 있습니다.

이 가이드의 샘플 대부분은 데이터 세트 수준에서 DICOM 데이터를 익명화하는 방법을 보여줍니다.

DICOM 저장소 수준 익명화

DICOM 저장소 수준에서 DICOM 데이터를 익명화하면 어떤 데이터가 익명화되는지 보다 세부적으로 제어할 수 있습니다. 예를 들어 여러 DICOM 저장소가 있는 데이터 세트가 있는 경우 저장소에 있는 데이터 유형에 따라 각 DICOM 저장소를 익명화할 수 있습니다.

DICOM 저장소에서 DICOM 데이터를 익명화하려면 dicomStores.deidentify 메서드를 호출합니다. dicomStores.deidentify 메서드에는 다음과 같은 구성요소가 있습니다.

  • 소스 DICOM 저장소: 민감한 정보가 있는 인스턴스가 하나 이상 포함된 DICOM 저장소입니다. dicomStores.deidentify 작업을 호출하면 DICOM 저장소의 모든 인스턴스가 익명화됩니다.
  • 대상 DICOM 저장소: 익명화는 원래 DICOM 저장소 또는 데이터에 영향을 주지 않습니다. 대신 원본 데이터의 익명화된 복사본이 대상 DICOM 저장소에 기록됩니다. 대상 DICOM 저장소가 이미 있어야 합니다.
  • 익명화할 대상: DICOM 저장소를 처리하는 방법을 지정하는 구성 매개변수입니다. DeidentifyConfig 객체에 이러한 매개 변수를 지정하여 DICOM 이미지에서 인스턴스 메타데이터(태그 키워드 사용) 또는 번인 텍스트를 익명화하도록 DICOM 익명화를 구성할 수 있습니다.

DICOM 저장소 수준에서 DICOM 데이터를 익명화하는 방법의 예시는 DICOM 스토어 수준에서 데이터 익명화를 참조하세요.

필터

DICOM 스토어 수준에서 DICOM 데이터를 익명화할 때, 필터 파일을 구성하고 dicomStores.deidentify 요청에 파일을 지정하면 DICOM 스토어의 데이터 하위 집합을 익명화할 수 있습니다. 예시는 DICOM 스토어의 하위 집합 익명화를 참조하세요.

샘플 개요

이 가이드의 샘플은 dicom_deid_instance_sample.dcm 이름의 단일 DICOM 인스턴스를 사용하지만 여러 인스턴스를 익명화할 수도 있습니다. 이 페이지의 예시에 있는 샘플 DICOM 인스턴스를 사용하려면 파일을 로컬 머신에 다운로드하고 DICOM 데이터 저장의 안내를 따라 DICOM 스토어에 저장합니다.

다음 섹션에서는 DICOM 인스턴스의 이미지 모양과 인스턴스의 메타데이터를 보여줍니다.

샘플 이미지

이 페이지의 일부 샘플에는 익명화된 이미지의 출력이 포함되어 있습니다. 각 샘플은 다음과 같은 원본 이미지를 입력으로 사용합니다. 각 익명화 작업의 출력 이미지를 이 원본 이미지와 비교하여 작업의 효과를 확인할 수 있습니다.

xray_original

샘플 메타데이터

이 페이지의 대부분의 샘플에는 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"
      ]
    }
  }
]

이미지에서 번인된 텍스트 수정

Action 객체 내의 ImageConfig 객체를 사용하여 DICOM 이미지에서 번인 텍스트를 익명화할 수 있습니다. ImageConfig 내에서 포함하거나 제외할 infoType과 TextRedactionMode 객체를 사용하여 텍스트를 수정하는 방법을 지정할 수 있습니다.

모든 텍스트 수정

다음 샘플은 TextRedactionModeREDACT_ALL_TEXT로 설정하여 DICOM 인스턴스를 익명화하는 방법을 보여줍니다. 이 구성은 이미지에서 모든 번인된 텍스트를 수정합니다.

REST

  1. 데이터 세트를 익명화합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID

    JSON 요청 본문:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "cleanImage": {
              "textRedactionMode": "REDACT_ALL_TEXT"
            }
          }
        }
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "cleanImage": {
              "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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "cleanImage": {
              "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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    출력은 다음과 같습니다. 응답에는 장기 실행 작업(LRO)의 식별자가 포함됩니다. 장기 실행 작업은 메서드 호출을 완료하는 데 추가 시간이 걸릴 수 있는 경우에 반환됩니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

  3. 익명화가 성공하면 익명화된 인스턴스의 메타데이터를 검색하여 어떻게 변경되었는지 확인할 수 있습니다. 익명화된 인스턴스에는 새로운 연구 UID, 시리즈 UID, 인스턴스 UID가 있으므로 먼저 새 데이터 세트에서 익명화된 인스턴스를 검색해야 합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    다음과 비슷한 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
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력에 새 메타데이터가 포함됩니다. 새 메타데이터를 원본 메타데이터와 비교하여 변환의 효과를 확인할 수 있습니다.

REDACT_ALL_TEXT를 사용하여 이미지를 익명화하면 이미지는 다음과 비슷합니다. 이미지 하단의 번인 텍스트가 모두 수정된 것을 볼 수 있습니다.

그림 1. REDACT_ALL_TEXT를 사용하여 익명화한 후의 DICOM 인스턴스

설명어 정리 옵션을 사용하여 민감한 텍스트 수정

다음 샘플은 TextRedactionModeREDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS로 설정하여 DICOM 인스턴스를 익명화하는 방법을 보여줍니다.

CleanDescriptorsOption 옵션에 관한 자세한 내용은 컨텍스트 익명화를 사용하여 텍스트 익명화를 참고하세요.

REST

  1. 데이터 세트를 익명화합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID

    JSON 요청 본문:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "cleanImage": {
              "textRedactionMode": "REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS"
            }
          }
        }
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "cleanImage": {
              "textRedactionMode": "REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS"
            }
          }
        }
      }
    }
    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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "cleanImage": {
              "textRedactionMode": "REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS"
            }
          }
        }
      }
    }
    '@  | 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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    출력은 다음과 같습니다. 응답에는 장기 실행 작업(LRO)의 식별자가 포함됩니다. 장기 실행 작업은 메서드 호출을 완료하는 데 추가 시간이 걸릴 수 있는 경우에 반환됩니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

  3. 익명화가 성공하면 익명화된 인스턴스의 메타데이터를 검색하여 어떻게 변경되었는지 확인할 수 있습니다. 익명화된 인스턴스에는 새로운 연구 UID, 시리즈 UID, 인스턴스 UID가 있으므로 먼저 새 데이터 세트에서 익명화된 인스턴스를 검색해야 합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    다음과 비슷한 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
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력에 새 메타데이터가 포함됩니다. 새 메타데이터를 원본 메타데이터와 비교하여 변환의 효과를 확인할 수 있습니다.

REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS를 사용하여 이미지를 익명화하면 이미지는 다음과 비슷합니다. 이미지 하단의 번인 텍스트가 일부만 수정된 것을 볼 수 있습니다. PatientSex (0010,0040)기본 DICOM infoType 중 하나가 아니므로 Female 텍스트가 계속 표시됩니다.

그림 2. REDACT_SENSITIVE_TEXT_CLEAN_DESCRIPTORS를 사용하여 익명화한 후의 DICOM 인스턴스

DICOM 태그 익명화

DICOM 메타데이터의 태그 키워드를 기준으로 DICOM 인스턴스를 익명화할 수 있습니다.

DicomTagConfig Action 객체에서는 다음과 같은 태그 필터링 메서드를 사용할 수 있습니다.

Action 옵션을 DICOM 태그 ID, 이름 또는 값 표현(VR) 목록으로 지정한 다음 이 옵션을 통해 목록의 태그에서 작업을 수행합니다. 태그 목록에서 Action 옵션을 두 개 이상 지정할 수 없습니다.

Action 객체는 태그 목록을 지정할 수 있는 queries[] 목록을 제공합니다. 다음과 같은 태그 형식이 지원됩니다.

  • 태그 ID(예: "00100010")
  • 태그 이름(예: "PatientName")
  • 값 표현(VR)(예: "PN")

queries[] 목록에 제공할 수 있는 태그 수에는 제한이 없습니다. 하지만 각 태그에는 하나의 Action 옵션만 실행할 수 있습니다. 서로 다른 Action 옵션이 실행되는 여러 태그를 지정하려면 여러 Action 객체를 지정해야 합니다.

태그 유지

DicomTagConfig 객체의 KeepTag 객체에 태그를 지정하여 태그 값이 수정되지 않도록 할 수 있습니다.

KeepTag 객체를 사용하는 동안 유효한 DICOM 객체를 생성하려면 MINIMAL_KEEP_LIST_PROFILE 또는 DEIDENTIFY_TAG_CONTENTS 값을 ProfileType 객체에 지정합니다.

이러한 프로필 중 하나를 지정하면 다음 태그가 자동으로 유지되어 익명화된 DICOM 인스턴스가 유효한 DICOM이 되도록 합니다.

  • 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

일부 태그의 값이 다시 생성되므로 확정적 변환을 통해 다른 값으로 바뀝니다. 자세한 내용은 DICOM 표준의 UID 옵션 유지를 참고하세요.

StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID, MediaStorageSOPInstanceUID 값을 '기본 ID'라고 합니다. 기본 ID가 변환되는 방식을 결정하려면 PrimaryIdsOption에 값을 지정합니다.

다음 샘플은 KeepTag 객체를 사용하여 익명화 중 특정 태그 값이 변경되지 않도록 유지하는 방법을 보여줍니다. PatientName 태그가 queries[] 목록에 추가되므로 익명화 중에 PatientName 값이 수정되지 않습니다.

샘플에 PrimaryIdsOption이 지정되지 않았으므로 primaryIds 필드의 기본값은 PRIMARY_IDS_OPTION_UNSPECIFIED이고 ProfileType의 값이 기본값입니다. 또한 ProfileType이 지정되지 않았으므로 profileType 필드의 기본값은 PROFILE_TYPE_UNSPECIFIED이고 이는 속성 비밀유지 기본 프로필(DICOM 표준 버전 2018e)을 기반으로 태그를 삭제합니다.

REST

  1. 데이터 세트를 익명화합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID

    JSON 요청 본문:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "keepTag": {}
            }
          ]
        }
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "keepTag": {}
            }
          ]
        }
      }
    }
    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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "keepTag": {}
            }
          ]
        }
      }
    }
    '@  | 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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    출력은 다음과 같습니다. 응답에는 장기 실행 작업(LRO)의 식별자가 포함됩니다. 장기 실행 작업은 메서드 호출을 완료하는 데 추가 시간이 걸릴 수 있는 경우에 반환됩니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

  3. 익명화가 성공하면 익명화된 인스턴스의 메타데이터를 검색하여 어떻게 변경되었는지 확인할 수 있습니다. 익명화된 인스턴스에는 새로운 연구 UID, 시리즈 UID, 인스턴스 UID가 있으므로 먼저 새 데이터 세트에서 익명화된 인스턴스를 검색해야 합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    다음과 비슷한 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
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력에 새 메타데이터가 포함됩니다. 새 메타데이터를 원본 메타데이터와 비교하여 변환의 효과를 확인할 수 있습니다.

태그 삭제

다음 샘플은 RemoveTag 객체를 사용하여 익명화 중 특정 태그 값을 삭제하는 방법을 보여줍니다. 삭제된 태그는 빈 값으로 대체됩니다.

다음 샘플에서는 PatientName 태그가 queries[] 목록에 추가되고 값이 익명화 중에 빈 값으로 바뀝니다.

REST

  1. 데이터 세트를 익명화합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID

    JSON 요청 본문:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
                 "PatientName"
              ],
              "removeTag": {}
            }
          ]
        }
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
                 "PatientName"
              ],
              "removeTag": {}
            }
          ]
        }
      }
    }
    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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
                 "PatientName"
              ],
              "removeTag": {}
            }
          ]
        }
      }
    }
    '@  | 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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    출력은 다음과 같습니다. 응답에는 장기 실행 작업(LRO)의 식별자가 포함됩니다. 장기 실행 작업은 메서드 호출을 완료하는 데 추가 시간이 걸릴 수 있는 경우에 반환됩니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

  3. 익명화가 성공하면 익명화된 인스턴스의 메타데이터를 검색하여 어떻게 변경되었는지 확인할 수 있습니다. 익명화된 인스턴스에는 새로운 연구 UID, 시리즈 UID, 인스턴스 UID가 있으므로 먼저 새 데이터 세트에서 익명화된 인스턴스를 검색해야 합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    다음과 비슷한 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
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력에 새 메타데이터가 포함됩니다. 새 메타데이터를 원본 메타데이터와 비교하여 변환의 효과를 확인할 수 있습니다.

태그 삭제

다음 샘플은 DeleteTag 객체를 사용하여 익명화 중에 특정 태그를 삭제하는 방법을 보여줍니다.

REST

  1. 데이터 세트를 익명화합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID

    JSON 요청 본문:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "deleteTag": {}
            }
          ]
        }
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "deleteTag": {}
            }
          ]
        }
      }
    }
    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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "deleteTag": {}
            }
          ]
        }
      }
    }
    '@  | 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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    출력은 다음과 같습니다. 응답에는 장기 실행 작업(LRO)의 식별자가 포함됩니다. 장기 실행 작업은 메서드 호출을 완료하는 데 추가 시간이 걸릴 수 있는 경우에 반환됩니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

  3. 익명화가 성공하면 익명화된 인스턴스의 메타데이터를 검색하여 어떻게 변경되었는지 확인할 수 있습니다. 익명화된 인스턴스에는 새로운 연구 UID, 시리즈 UID, 인스턴스 UID가 있으므로 먼저 새 데이터 세트에서 익명화된 인스턴스를 검색해야 합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    다음과 비슷한 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
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력에 새 메타데이터가 포함됩니다. 새 메타데이터를 원본 메타데이터와 비교하여 변환의 효과를 확인할 수 있습니다.

태그를 자리표시자 값으로 재설정

다음 샘플은 ResetTag 객체를 사용하여 익명화 중에 태그 값을 PLACEHOLDER 문자열로 설정하는 방법을 보여줍니다.

REST

  1. 데이터 세트를 익명화합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID

    JSON 요청 본문:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "resetTag": {}
            }
          ]
        }
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "resetTag": {}
            }
          ]
        }
      }
    }
    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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "resetTag": {}
            }
          ]
        }
      }
    }
    '@  | 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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    출력은 다음과 같습니다. 응답에는 장기 실행 작업(LRO)의 식별자가 포함됩니다. 장기 실행 작업은 메서드 호출을 완료하는 데 추가 시간이 걸릴 수 있는 경우에 반환됩니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

  3. 익명화가 성공하면 익명화된 인스턴스의 메타데이터를 검색하여 어떻게 변경되었는지 확인할 수 있습니다. 익명화된 인스턴스에는 새로운 연구 UID, 시리즈 UID, 인스턴스 UID가 있으므로 먼저 새 데이터 세트에서 익명화된 인스턴스를 검색해야 합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    다음과 비슷한 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
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력에 새 메타데이터가 포함됩니다. 새 메타데이터를 원본 메타데이터와 비교하여 변환의 효과를 확인할 수 있습니다.

    특히 PatientName 태그 값이 PLACEHOLDER으로 설정되어 있다는 점에 유의하세요.

    Original metadataResetTag 실행 후 메타데이터
    "00100010": {
      "vr": "PN",
      "Value": [
        {
          "Alphabetic": "Ann Johnson"
        }
      ]
    }
    "00100010": {
      "vr": "PN",
      "Value": [
        {
          "Alphabetic": "PLACEHOLDER"
        }
      ]
    }

태그에서 민감한 텍스트 검사 및 변환

다음 샘플은 CleanTextTag 객체를 사용하여 태그를 검사하고 TextConfig 객체의 구성에 따라 태그 값을 변환하는 방법을 보여줍니다.

이 샘플에서는 다음 옵션이 Actions 객체에 설정됩니다.

  • CleanTextTag 객체
  • PatientName DICOM 태그가 포함된 queries[] 목록

다음 옵션이 TextConfig 객체에 설정됩니다.

  • 특정 infoType과 일치하는 텍스트를 변환하는 InfoTypeTransformation 객체입니다.
  • 일치하는 텍스트를 infoType의 이름으로 바꾸는 ReplaceWithInfoTypeConfig 객체입니다.
  • PERSON_NAME infoType이 포함된 infoTypes[] 목록입니다.

이러한 익명화 구성이 설정된 상태에서 익명화 작업이 PatientName 태그를 검사하고, 태그를 PERSON_NAME infoType과 일치시키고, 태그 값을 PERSON_NAME infoType으로 바꿉니다. PatientName 태그에는 CleanTextTag 객체에서 지원되는 VR 중 하나인 PN의 값 표현(VR)이 있습니다.

REST

  1. 데이터 세트를 익명화합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID

    JSON 요청 본문:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
                "PatientName"
              ],
              "cleanTextTag": {}
            }
          ]
        },
        "text": {
          "additionalTransformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "replaceWithInfoTypeConfig": {}
            }
          ]
        }
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
                "PatientName"
              ],
              "cleanTextTag": {}
            }
          ]
        },
        "text": {
          "additionalTransformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
                "PatientName"
              ],
              "cleanTextTag": {}
            }
          ]
        },
        "text": {
          "additionalTransformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    출력은 다음과 같습니다. 응답에는 장기 실행 작업(LRO)의 식별자가 포함됩니다. 장기 실행 작업은 메서드 호출을 완료하는 데 추가 시간이 걸릴 수 있는 경우에 반환됩니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

  3. 익명화가 성공하면 익명화된 인스턴스의 메타데이터를 검색하여 어떻게 변경되었는지 확인할 수 있습니다. 익명화된 인스턴스에는 새로운 연구 UID, 시리즈 UID, 인스턴스 UID가 있으므로 먼저 새 데이터 세트에서 익명화된 인스턴스를 검색해야 합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    다음과 비슷한 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
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력에 새 메타데이터가 포함됩니다. 새 메타데이터를 원본 메타데이터와 비교하여 변환의 효과를 확인할 수 있습니다.

    특히 PatientName 태그 값이 [PERSON_NAME]으로 설정되어 있다는 점에 유의하세요.

    Original metadataCleanTextTag 실행 후 메타데이터
    "00100010": {
      "vr": "PN",
      "Value": [
        {
          "Alphabetic": "Ann Johnson"
        }
      ]
    }
    "00100010": {
      "vr": "PN",
      "Value": [
        {
          "Alphabetic": "[PERSON_NAME]"
        }
      ]
    }

UID를 생성된 UID로 바꾸기

다음 샘플은 RegenUidTag 객체를 사용하여 UID를 새로 생성된 UID로 바꾸는 방법을 보여줍니다. RegenUidTag 객체에서 지원하는 유일한 VR은 UI입니다.

기본적으로 샘플 메타데이터에서 VR이 UI인 모든 태그에는 익명화 중에 UID가 생성됩니다. 특정 태그에 UID를 생성하는 방법을 보여주기 위해 샘플에 다음 옵션이 설정됩니다.

  • ProfileTypeKEEP_ALL enum으로 설정하여 DICOM 메타데이터가 익명화되는 것을 방지합니다.

  • PrimaryIdsOptionKEEP enum으로 설정되어 기본 ID(StudyInstanceUID, SeriesInstanceUID, SOPInstanceUID, MediaStorageSOPInstanceUID)가 변경되지 않습니다.

이 옵션을 설정하면 샘플 데이터의 기본 ID UID가 새로 생성된 값으로 대체되지 않습니다. 하지만 Action.queries[] 배열에 SOPInstanceUID를 추가하면 SOPInstanceUID 태그용으로 새 UID를 생성할 수 있습니다.

REST

  1. 데이터 세트를 익명화합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID

    JSON 요청 본문:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "primaryIds": "KEEP"
          },
          "actions": [
            {
              "queries": [
                "00080018"
              ],
              "regenUidTag": {}
            }
          ],
          "profileType": "KEEP_ALL_PROFILE"
        }
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "primaryIds": "KEEP"
          },
          "actions": [
            {
              "queries": [
                "00080018"
              ],
              "regenUidTag": {}
            }
          ],
          "profileType": "KEEP_ALL_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "options": {
            "primaryIds": "KEEP"
          },
          "actions": [
            {
              "queries": [
                "00080018"
              ],
              "regenUidTag": {}
            }
          ],
          "profileType": "KEEP_ALL_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    출력은 다음과 같습니다. 응답에는 장기 실행 작업(LRO)의 식별자가 포함됩니다. 장기 실행 작업은 메서드 호출을 완료하는 데 추가 시간이 걸릴 수 있는 경우에 반환됩니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

  3. 익명화가 성공하면 익명화된 인스턴스의 메타데이터를 검색하여 어떻게 변경되었는지 확인할 수 있습니다. Action.queries[] 배열에 지정된 SOPInstanceUID 태그로 인해 익명화된 인스턴스에 새 인스턴스 UID가 있으므로 먼저 익명화된 인스턴스의 새 데이터 세트를 검색해야 합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    다음과 비슷한 JSON 응답이 표시됩니다.

    다음 표는 인스턴스 UID가 어떻게 변경되었는지 보여줍니다.

      원본 인스턴스 메타데이터 익명화된 인스턴스 메타데이터
    인스턴스 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
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/2.25.70541616638819138568043293671559322355/series/1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694/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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/2.25.70541616638819138568043293671559322355/series/1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력에 새 메타데이터가 포함됩니다. 새 메타데이터를 원본 메타데이터와 비교하여 변환의 효과를 확인할 수 있습니다.

    기본 ID 중 SOPInstanceUID에만 새로 생성된 UID가 있습니다.

중첩된 Sequence의 태그를 재귀적으로 익명화

다음 샘플은 RecurseTag 객체를 사용하여 Sequence에서 중첩된 DICOM 태그를 재귀적으로 익명화하는 방법을 보여줍니다. RecurseTag 객체는 Sequence의 VR인 SQ VR만 지원합니다.

SQ VR에 관한 자세한 내용은 7.5 데이터 세트 중첩을 참고하세요.

이 페이지에 제공된 DICOM 샘플 인스턴스에는 SQ VR이 있는 DICOM 태그가 없습니다. JSON 메타데이터 및 JPEG 파일에서 DICOM 인스턴스 만들기에 기반한 다음 단계를 완료하면 SQ VR이 포함된 허위 데이터로 DICOM 인스턴스를 만들고 저장할 수 있습니다. 다음 단계에서 만드는 DICOM 인스턴스는 가짜 데이터를 사용하며 RecurseTag의 동작을 보여주기 위한 용도로만 사용됩니다.

  1. 다음 DICOM 메타데이터를 instance.json 이름의 JSON 파일에 저장합니다. 메타데이터에는 PhysiciansReadingStudyIdentificationSequence(00081062) 태그가 포함됩니다. 태그는 SQ VR이 있으며 두 개의 중첩된 PersonIdentificationCodeSequence(00401101) 태그를 포함합니다. 중첩된 태그에도 SQ VR이 있으며 각각 다음과 같은 중첩된 태그가 포함됩니다.

    • CodeValue(00080100)
    • CodingSchemeDesignator(00080102)
    [{
      "00020010": {
        "vr": "UI",
        "Value": [
          "1.2.840.10008.1.2.4.50"
        ]
      },
      "00080005": {
        "vr": "CS",
        "Value": [
          "ISO_IR 192"
        ]
      },
      "00080016": {
        "vr": "UI",
        "Value": [
          "1111111"
        ]
      },
      "00080018": {
        "vr": "UI",
        "Value": [
          "2222222"
        ]
      },
      "0020000D": {
        "vr": "UI",
        "Value": [
          "3333333"
        ]
      },
      "0020000E": {
        "vr": "UI",
        "Value": [
          "4444444"
        ]
      },
      "00280002": {
        "vr": "US",
        "Value": [
          3
        ]
      },
      "00280004": {
        "vr": "CS",
        "Value": [
          "YBR_FULL_422"
        ]
      },
      "00280006": {
        "vr": "US",
        "Value": [
          0
        ]
      },
      "00280008": {
        "vr": "IS",
        "Value": [
          1
        ]
      },
      "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
        ]
      },
      "7FE00010": {
        "vr": "OB",
        "BulkDataURI": "jpeg-image"
      },
      "00081062": {
        "vr": "SQ",
        "Value": [
          {
            "00401101": {
              "vr": "SQ",
              "Value": [
                {
                  "00080100": {
                    "vr": "SH",
                    "Value": [
                      "CodeValue1"
                    ]
                  },
                  "00080102": {
                    "vr": "SH",
                    "Value": [
                      "CodingSchemeDesignator1"
                    ]
                  }
                }
              ]
            }
          },
          {
            "00401101": {
              "vr": "SQ",
              "Value": [
                {
                  "00080100": {
                    "vr": "SH",
                    "Value": [
                      "CodeValue2"
                    ]
                  },
                  "00080102": {
                    "vr": "SH",
                    "Value": [
                      "CodingSchemeDesignator2"
                    ]
                  }
                }
              ]
            }
          }
        ]
      }
    }]
    
  2. google.jpg 파일을 로컬 머신에 다운로드합니다. Cloud Healthcare API DICOMweb API는 메타데이터가 유효한 경우 JSON 메타데이터와 쌍을 이루는 모든 JPEG 이미지를 허용합니다.

  3. 다음 명령어를 실행하여 시작(JSON 메타데이터), 중간(JPEG) 이미지, 종료 경계를 만듭니다.

    echo -ne "--DICOMwebBoundary\r\nContent-Type: application/dicom+json\r\n\r\n" > opening.file
    echo -ne "\r\n--DICOMwebBoundary\r\nContent-Location: jpeg-image\r\nContent-Type: image/jpeg; transfer-syntax=1.2.840.10008.1.2.4.50\r\n\r\n" > middle.file
    echo -ne "\r\n--DICOMwebBoundary--" > closing.file
    
  4. 중간 및 종료 경계 내에서 google.jpg 이미지를 래핑합니다. Cloud Healthcare API로 전송하는 출력 파일은 multipart-request.file이라고 부릅니다.

    cat opening.file instance.json middle.file google.jpg closing.file > multipart-request.file
    
  5. multipart-request.file 파일을 저장합니다.

    REST

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DICOM_STORE_ID: 소스 데이터 세트 내의 DICOM 스토어의 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: multipart/related; type=\"application/dicom+json\"; boundary=DICOMwebBoundary" \
    --data-binary @multipart-request.file \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID/dicomWeb/studies"

    PowerShell

    다음 명령어를 실행합니다.

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -InFile multipart-request.file `
    -Uri "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID/dicomWeb/studies" | Select-Object -Expand Content

    다음과 비슷한 JSON 응답이 표시됩니다.

저장된 DICOM 인스턴스를 익명화하려면 다음 단계를 완료하세요.

REST

  1. 데이터 세트를 익명화합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID

    JSON 요청 본문:

    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PhysiciansReadingStudyIdentificationSequence"
              ],
              "recurseTag": {}
            }
          ]
        }
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PhysiciansReadingStudyIdentificationSequence"
              ],
              "recurseTag": {}
            }
          ]
        }
      }
    }
    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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PhysiciansReadingStudyIdentificationSequence"
              ],
              "recurseTag": {}
            }
          ]
        }
      }
    }
    '@  | 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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    출력은 다음과 같습니다. 응답에는 장기 실행 작업(LRO)의 식별자가 포함됩니다. 장기 실행 작업은 메서드 호출을 완료하는 데 추가 시간이 걸릴 수 있는 경우에 반환됩니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

  3. 익명화가 성공하면 익명화된 인스턴스의 메타데이터를 검색하여 어떻게 변경되었는지 확인할 수 있습니다. 익명화된 인스턴스에는 새로운 연구 UID, 시리즈 UID, 인스턴스 UID가 있으므로 먼저 새 데이터 세트에서 익명화된 인스턴스를 검색해야 합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    다음과 비슷한 JSON 응답이 표시됩니다.

    다음 표는 연구 UID, 시리즈 UID, 인스턴스 UID가 어떻게 변경되었는지 보여줍니다.

    원본 인스턴스 메타데이터 익명화된 인스턴스 메타데이터
    연구 UID(0020000D) 3333333 1.3.6.1.4.1.11129.5.1.222168347996079463826250565085126257314
    시리즈 UID(0020000E) 4444444 1.3.6.1.4.1.11129.5.1.25205702030237830896398173746777399347
    인스턴스 UID(00080018) 2222222 1.3.6.1.4.1.11129.5.1.286710307126045768765142714621897494633
  4. 새 값을 사용하여 인스턴스의 메타데이터를 검색합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

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

    PowerShell

    다음 명령어를 실행합니다.

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

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

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력에 새 메타데이터가 포함됩니다. 새 메타데이터를 1단계원본 메타데이터와 비교하여 변환의 효과를 확인할 수 있습니다.

    특히 중첩된 CodeValueCodingSchemaDesignator 태그의 값이 PLACEHOLDER로 설정되어 있다는 점에 유의하세요.

    Original metadataRecurseTag 실행 후 메타데이터
    {
      "00081062": {
        "vr": "SQ",
        "Value": [
          {
            "00401101": {
              "vr": "SQ",
              "Value": [
                {
                  "00080100": {
                    "vr": "SH",
                    "Value": [
                      "CodeValue1"
                    ]
                  },
                  "00080102": {
                    "vr": "SH",
                    "Value": [
                      "CodingSchemeDesignator1"
                    ]
                  }
                }
              ]
            }
          },
          {
            "00401101": {
              "vr": "SQ",
              "Value": [
                {
                  "00080100": {
                    "vr": "SH",
                    "Value": [
                      "CodeValue2"
                    ]
                  },
                  "00080102": {
                    "vr": "SH",
                    "Value": [
                      "CodingSchemeDesignator2"
                    ]
                  }
                }
              ]
            }
          }
        ]
      }
    }
    {
      "00081062": {
        "vr": "SQ",
        "Value": [
          {
            "00401101": {
              "vr": "SQ",
              "Value": [
                {
                  "00080100": {
                    "vr": "SH",
                    "Value": [
                      "PLACEHOLDER"
                    ]
                  },
                  "00080102": {
                    "vr": "SH",
                    "Value": [
                      "PLACEHOLDER"
                    ]
                  }
                }
              ]
            }
          },
          {
            "00401101": {
              "vr": "SQ",
              "Value": [
                {
                  "00080100": {
                    "vr": "SH",
                    "Value": [
                      "PLACEHOLDER"
                    ]
                  },
                  "00080102": {
                    "vr": "SH",
                    "Value": [
                      "PLACEHOLDER"
                    ]
                  }
                }
              ]
            }
          }
        ]
      }
    }

DICOM 스토어 수준에서 데이터 익명화

앞의 샘플은 데이터 세트 수준에서 DICOM 데이터를 익명화하는 방법을 보여줍니다. 이 섹션에서는 DICOM 저장소 수준에서 데이터를 익명화하는 방법을 설명합니다.

데이터 세트 익명화 요청을 DICOM 저장소 익명화 요청으로 변경하려면 다음과 같이 변경합니다.

  • 요청 본문의 destinationDatasetdestinationStore로 교체
  • 대상을 지정할 때 destinationStore의 값 끝에 dicomStores/DESTINATION_DICOM_STORE_ID 추가
  • 소스 데이터의 위치를 지정할 때 dicomStores/SOURCE_DICOM_STORE_ID 추가

다음 예시에서는 데이터 세트 수준 익명화 요청과 DICOM 스토어 수준 익명화 요청을 수정하는 방법을 보여줍니다.

데이터 세트 수준 익명화:

"destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID"
...
"https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"

다음 샘플은 DICOM 스토어에서 DICOM 인스턴스를 익명화하고 익명화된 데이터를 새 DICOM 스토어에 쓰는 방법을 보여줍니다. 샘플을 실행하기 전에 대상 DICOM 스토어 ID가 이미 있어야 합니다.

REST

  1. 데이터 세트를 익명화합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID. 익명화 작업을 실행하기 전에 이미 있어야 합니다.
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 스토어. 익명화 작업을 실행하기 전에 이미 있어야 합니다.

    JSON 요청 본문:

    {
      "destinationStore": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "keepTag": {}
            }
          ]
        }
      }
    }
    

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    cat > request.json << 'EOF'
    {
      "destinationStore": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "keepTag": {}
            }
          ]
        }
      }
    }
    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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID:deidentify"

    PowerShell

    요청 본문을 request.json 파일에 저장합니다. 터미널에서 다음 명령어를 실행하여 현재 디렉터리에 이 파일을 만들거나 덮어씁니다.

    @'
    {
      "destinationStore": "projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID",
      "config": {
        "dicomTagConfig": {
          "actions": [
            {
              "queries": [
               "PatientName"
              ],
              "keepTag": {}
            }
          ]
        }
      }
    }
    '@  | 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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID:deidentify" | Select-Object -Expand Content
    출력은 다음과 같습니다. 응답에는 장기 실행 작업(LRO)의 식별자가 포함됩니다. 장기 실행 작업은 메서드 호출을 완료하는 데 추가 시간이 걸릴 수 있는 경우에 반환됩니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

  3. 익명화가 성공하면 익명화된 인스턴스의 메타데이터를 검색하여 어떻게 변경되었는지 확인할 수 있습니다. 익명화된 인스턴스에는 새로운 연구 UID, 시리즈 UID, 인스턴스 UID가 있으므로 먼저 새 데이터 세트에서 익명화된 인스턴스를 검색해야 합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    다음과 비슷한 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
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력에 새 메타데이터가 포함됩니다. 새 메타데이터를 원본 메타데이터와 비교하여 변환의 효과를 확인할 수 있습니다.

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를 지정하여 시리즈를 익명화할 수 있습니다.

다음 필터 파일을 고려해 보세요. 필터 파일로 인해 연구 1개, 시리즈 2개, 개별 인스턴스 3개가 익명화됩니다.

/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
    출력은 다음과 같습니다. 응답에는 장기 실행 작업의 식별자가 포함됩니다. 메서드 호출을 완료하는 데 상당한 시간이 걸릴 수 있는 장기 실행 작업은 반환됩니다. OPERATION_ID의 값을 확인합니다. 다음 단계에서 이 값이 필요합니다.

  2. projects.locations.datasets.operations.get 메서드를 사용하여 장기 실행 작업의 상태를 가져옵니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • SOURCE_DATASET_ID: 익명화할 데이터가 포함된 데이터 세트의 ID
    • OPERATION_ID: 장기 실행 작업에서 반환된 ID

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/SOURCE_DATASET_ID/operations/OPERATION_ID" | Select-Object -Expand Content

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력은 다음과 같습니다. 응답에 "done": true가 포함되었으면 장기 실행 작업이 완료된 것입니다.

  3. 익명화가 성공하면 익명화된 인스턴스의 메타데이터를 검색하여 어떻게 변경되었는지 확인할 수 있습니다. 익명화된 인스턴스에는 새로운 연구 UID, 시리즈 UID, 인스턴스 UID가 있으므로 먼저 새 데이터 세트에서 익명화된 인스턴스를 검색해야 합니다.

    요청 데이터를 사용하기 전에 다음을 바꿉니다.

    • PROJECT_ID: Google Cloud 프로젝트의 ID
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/instances" | Select-Object -Expand Content

    다음과 비슷한 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
    • DESTINATION_DATASET_ID: 익명화된 데이터가 작성되는 대상 데이터 세트의 ID
    • SOURCE_DATASET_LOCATION: 소스 데이터 세트 위치
    • DESTINATION_DICOM_STORE_ID: 대상 데이터 세트의 DICOM 저장소 ID. 이는 소스 데이터 세트의 DICOM 저장소 ID와 동일합니다.

    요청을 보내려면 다음 옵션 중 하나를 선택합니다.

    curl

    다음 명령어를 실행합니다.

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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/v1beta1/projects/PROJECT_ID/locations/SOURCE_DATASET_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

    API 탐색기

    메서드 참조 페이지를 엽니다. 페이지 오른쪽에 API 탐색기 패널이 열립니다. 이 도구를 사용하여 요청을 보낼 수 있습니다. 모든 필수 필드를 입력하고 실행을 클릭합니다.

    출력에 새 메타데이터가 포함됩니다. 새 메타데이터를 원본 메타데이터와 비교하여 변환의 효과를 확인할 수 있습니다.

DICOM 익명화 작업 문제 해결

DICOM 익명화 작업 중에 오류가 발생하면 오류가 Cloud Logging에 로깅됩니다. 자세한 내용은 Cloud Logging에서 오류 로그 보기를 참조하세요.

전체 작업이 오류를 반환하는 경우 장기 실행 작업 문제 해결을 참조하세요.