Menggunakan Cloud Healthcare API untuk melakukan de-identifikasi gambar medis

Last reviewed 2023-03-28 UTC

Tutorial ini menunjukkan cara menggunakan operasi de-identifikasi DICOM dari Cloud Healthcare API untuk menghapus atau mengubah informasi identitas pribadi (PII) dan informasi kesehatan terlindungi (PHI) dari data (Digital Imaging and Communications in Medicine (DICOM)). Melakukan de-identifikasi data DICOM membantu untuk memastikan privasi pasien dan menyiapkan data layanan kesehatan yang akan digunakan dalam riset, berbagi data, dan machine learning.

Tutorial dan dokumen konseptual yang menyertainya, De-identifikasi gambar medis melalui Cloud Healthcare API, ditujukan untuk peneliti, data scientist, tim IT, serta organisasi layanan kesehatan dan ilmu hayati. Tutorial ini memandu Anda dalam menjalani dua kasus penggunaan umum terkait de-identifikasi data gambar medis menggunakan Cloud Healthcare API. Dokumen konseptual ini menjelaskan alasan de-identifikasi data DICOM dan menguraikan langkah-langkah tingkat tingginya.

Tutorial ini mengasumsikan bahwa Anda memiliki pengetahuan dasar tentang Linux. Pemahaman dasar tentang standar Google Cloud dan DICOM juga sangat membantu. Jalankan semua perintah dalam tutorial ini di terminal Linux.

Tujuan

  • Menggunakan operasi de-identifikasi DICOM pada Cloud Healthcare API untuk menghapus atau mengubah PII dan PHI pada instance DICOM di penyimpanan DICOM.
  • Menghapus atau mengubah metadata PII dan PHI serta teks sisipan dalam satu panggilan Cloud Healthcare API.
  • Menggunakan alat command line curl atau Google Cloud CLI untuk melakukan panggilan Cloud Healthcare API de-identifikasi DICOM.

Biaya

Dalam dokumen ini, Anda menggunakan komponen Google Cloud yang dapat ditagih berikut:

Untuk membuat perkiraan biaya berdasarkan proyeksi penggunaan Anda, gunakan kalkulator harga. Pengguna baru Google Cloud mungkin memenuhi syarat untuk mendapatkan uji coba gratis.

Sebelum memulai

Tutorial ini mengasumsikan bahwa gambar DICOM Anda telah diimpor ke penyimpanan DICOM. Untuk mengetahui informasi tentang cara membuat penyimpanan DICOM di Google Cloud, lihat Membuat dan mengelola penyimpanan DICOM. Untuk informasi tentang cara mengimpor data DICOM ke penyimpanan DICOM, lihat Mengimpor dan mengekspor data DICOM menggunakan Cloud Storage.

Selain itu, tutorial ini mengasumsikan bahwa:

  • Anda bekerja dalam project bernama MyProj.
  • Anda telah membuat set data bernama dataset1 di region Google Cloud us-central1 di MyProj.
  • Anda telah membuat penyimpanan DICOM bernama dicomstore1 di dataset1.

Jika nama resource berbeda, Anda harus mengubah perintah yang tercantum dalam dokumen ini.

  1. Di konsol Google Cloud, buka halaman Pemilih project.
    Buka halaman Pemilih project
  2. Pilih project Google Cloud bernama MyProj.
  3. Pastikan penagihan telah diaktifkan untuk project Google Cloud Anda.

  4. Enable the Cloud Healthcare API.

    Enable the API

  5. Menginstal Google Cloud CLI.
  6. Untuk initialize gcloud CLI, jalankan perintah berikut:

    gcloud init
  7. Dalam shell, jalankan perintah gcloud components update untuk memastikan Anda memiliki gcloud CLI versi terbaru yang menyertakan fungsi terkait Cloud Healthcare API.

Membuat akun layanan IAM

Peran Healthcare Dataset Administrator mencakup semua peran yang diperlukan untuk tutorial ini.

  1. Membuat akun layanan

  2. Tetapkan peran Healthcare Dataset Administrator ke akun layanan.

  3. Buat dan download kunci JSON akun layanan.

  4. Aktifkan kunci akun layanan Anda:

    gcloud auth activate-service-account --key-file=path-to-key-file
    

    Outputnya adalah sebagai berikut:

    Activated service account credentials for: [key-name@project-name.iam.gserviceaccount.com]
    
    • key-name adalah nama yang Anda tetapkan ke kunci akun layanan.
    • project-name adalah nama project Google Cloud Anda.

Menggunakan viewer gambar medis

Tutorial ini menggunakan viewer diagnostik Mach7 sebagai viewer gambar medis. Anda dapat meminta versi demonstrasi viewer di situs Mach7

Untuk menggunakan viewer ini, tetapkan peran Healthcare DICOM Viewer ke akun pengguna Anda dengan melakukan langkah-langkah berikut:

  1. Sebagai administrator di konsol Google Cloud, buka halaman IAM.

    Buka halaman IAM

  2. Klik Tambahkan.

  3. Di kolom Akun utama baru, masukkan akun pengguna atau alamat Gmail Anda.

  4. Di menu drop-down Pilih peran, pilih Cloud Healthcare.

  5. Arahkan kursor ke Cloud Healthcare, lalu pilih peran Healthcare DICOM Viewer.

  6. Klik Simpan.

Agar dapat menggunakan viewer untuk tujuan produksi, Anda perlu mendapatkan versi lengkap.

Mendapatkan token akses OAuth 2.0

Agar dapat menggunakan Cloud Healthcare API untuk menyerap data, Anda memerlukan token akses OAuth 2.0 yang diperoleh perintah dalam tutorial ini untuk Anda. Dalam tutorial ini, beberapa contoh permintaan Cloud Healthcare API menggunakan alat command line curl. Contoh ini menggunakan perintah gcloud auth print-access-token untuk mendapatkan token pemilik OAuth 2.0 dan menyertakan token tersebut di header otorisasi permintaan. Untuk mengetahui informasi selengkapnya tentang perintah ini, lihat gcloud auth application-default print-access-token.

Tutorial ini membahas dua kasus penggunaan paling umum dalam menghapus informasi identitas dari data DICOM. Dalam kedua kasus tersebut, solusi disediakan dengan menggunakan alat command line curl atau Google Cloud CLI. Untuk mengetahui informasi selengkapnya tentang melakukan de-identifikasi data DICOM menggunakan Cloud Healthcare API, opsi konfigurasi, serta contoh perintah curl dan Windows PowerShell, lihat Melakukan de-identifikasi data DICOM.

Menyiapkan variabel lingkungan

Langkah ini berlaku untuk kedua kasus penggunaan.

  • Ekspor variabel lingkungan berdasarkan lokasi dan atribut penyimpanan DICOM tempat gambar Anda disimpan.

    export PROJECT_ID=MyProj
    export REGION=us-central1
    export SOURCE_DATASET_ID=dataset1
    export DICOM_STORE_ID=dicomstore1
    export DESTINATION_DATASET_ID=deid-dataset1
    

Kasus penggunaan I: Menghapus semua metadata dan menyamarkan semua teks sisipan

Kasus penggunaan ini menunjukkan cara melakukan de-identifikasi set data yang berisi penyimpanan DICOM dan data DICOM dengan menghapus semua metadata (kecuali data minimum yang diperlukan untuk resource DICOM yang valid) dan dengan menyamarkan semua teks sisipan dari DICOM gambar. Anda dapat melakukan fungsi berikut:

  • Buat permintaan POST dan masukkan nama set data tujuan dan token akses.
  • Hapus semua metadata dan buat kumpulan tag keepList minimum agar memiliki resource DICOM yang valid.
  • Samarkan semua teks sisipan yang sensitif dari gambar DICOM dengan membuat objek DeidentifyConfig dengan image.text_redaction_mode yang ditetapkan ke REDACT_ALL_TEXT.

Anda dapat melakukan semua fungsi ini dalam satu perintah curl seperti berikut:

curl -X POST \
    -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/$PROJECT_ID/locations/$REGION/datasets/$DESTINATION_DATASET_ID',
      'config': {
        'dicom': {'keepList': {
           'tags': [
              'StudyInstanceUID',
              'SOPInstanceUID',
              'TransferSyntaxUID',
              'PixelData',
              'Columns',
              'NumberOfFrames',
              'PixelRepresentation',
              'MediaStorageSOPClassUID',
              'MediaStorageSOPInstanceUID',
              'Rows',
              'SamplesPerPixel',
              'BitsAllocated',
              'HighBit',
              'PhotometricInterpretation',
              'BitsStored' ] }
                 },
        'image': {
          'textRedactionMode': 'REDACT_ALL_TEXT'
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID:deidentify"

Atau, Anda dapat menyelesaikan operasi de-identifikasi yang sama tanpa mengetahui atau menentukan nama tag dengan menggunakan profil filter tag MINIMAL_KEEP_LIST_PROFILE. Lihat contoh berikut:

curl -X POST \
    -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/$PROJECT_ID/locations/$REGION/datasets/$DESTINATION_DATASET_ID',
      'config': {

'dicom':{'filterProfile':'MINIMAL_KEEP_LIST_PROFILE'},

        'image': {
          'textRedactionMode': 'REDACT_ALL_TEXT'
        }
      }
    }" "https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID:deidentify"

Dalam semua perintah sebelumnya, jika permintaan berhasil, server akan menampilkan respons dalam format JSON, seperti berikut:

{
  "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/OPERATION_NAME"
}

Respons berisi nama operasi. Anda dapat menggunakan nama operasi dengan Metode get operasi untuk melacak status operasi.

curl -X GET \
    -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    -H "Content-Type: application/json; charset=utf-8" \
"https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME"

Jika permintaan berhasil, server akan menampilkan respons dalam format JSON. Setelah proses de-identifikasi selesai, respons akan menyertakan "done": true.

{
  "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "2018-01-01T00:00:00Z",
    "endTime": "2018-01-01T00:00:00Z"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}

Anda juga dapat menggunakan Google Cloud CLI ke Google Cloud untuk menjalankan semua versi Cloud Healthcare API, termasuk de-identifikasi API. Untuk daftar lengkap perintah yang tersedia, lihat dokumentasi gcloud Cloud Healthcare API atau jalankan perintah berikut:

gcloud healthcare --help

Contoh berikut menunjukkan cara menggunakan gcloud CLI untuk melakukan de-identifikasi set data yang berisi penyimpanan DICOM dan data DICOM untuk menghapus semua metadata dan menyamarkan semua teks sisipan dari gambar DICOM.

gcloud healthcare datasets deidentify $SOURCE_DATASET_ID \
--location $REGION \
--dicom-filter-tags=StudyInstanceUID,SOPInstanceUID,TransferSyntaxUID,PixelData,Columns,NumberOfFrames,PixelRepresentation,MediaStorageSOPClassUID,MediaStorageSOPInstanceUID,Rows,SamplesPerPixel,BitsAllocated,HighBit,PhotometricInterpretation,BitsStored \
--text-redaction-mode all \
--destination-dataset projects/$PROJECT_ID/locations/$REGION/datasets/$DESTINATION_DATASET_ID \
--async

Jika permintaan berhasil, server akan menampilkan respons seperti berikut:

Request issued for: [$SOURCE_DATASET_ID]
Check operation [OPERATION NAME] for status.
name: projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME

Untuk memeriksa status operasi, jalankan perintah berikut:

gcloud healthcare operations describe --dataset $SOURCE_DATASET_ID OPERATION_NAME

Jika permintaan berhasil, server akan menampilkan respons seperti berikut: Setelah proses de-identifikasi selesai, respons akan berisi "done": true.

done: true
metadata:
  '@type': type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata
  apiMethodName: google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset
  "createTime": "2018-01-01T00:00:00Z",
  "endTime": "2018-01-01T00:00:00Z"
name: "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME"
response:
  '@type': type.googleapis.com/google.cloud.healthcare.v1.dataset.DeidentifySummary
  successResourceCount: 'SUCCESS_RESOURCE_COUNT'
  successStoreCount: 'SUCCESS_STORE_COUNT'

Kasus penggunaan II: Mengubah metadata dan menyamarkan teks sisipan yang sensitif

Kasus penggunaan ini menunjukkan cara melakukan de-identifikasi set data yang berisi penyimpanan DICOM dan data DICOM dengan menggunakan metode pemfilteran tag filterProfile untuk menghapus beberapa metadata, mengubah metadata lainnya, dan menyamarkan teks sisipan yang sensitif yang terkait dengan gambar. Tujuannya adalah untuk menyamarkan nilai PERSON_NAME, mengganti nilai PHONE_NUMBER dengan tanda bintang, dan mengubah DATE dan DATE_OF_BIRTH menjadi nilai tanggal dalam rentang 100 hari nilai-nilai aslinya.

Dalam kasus penggunaan ini, kunci kriptografis yang disediakan, U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=, adalah kunci berenkode base64 yang dienkripsi AES 256 bit dan dibuat menggunakan perintah berikut. Saat diminta, sandi kosong akan diberikan ke perintah:

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

Anda dapat melakukan fungsi berikut:

  • Buat permintaan POST dan masukkan nama set data tujuan dan token akses.
  • Hapus beberapa metadata dan ubah metadata lainnya dalam tag DICOM menggunakan profil filter DEIDENTIFY_TAG_CONTENT dengan kombinasi jenis info dan transformasi primitif yang sesuai.
  • Samarkan teks sisipan dari gambar DICOM dengan menyetel image.text_redaction_mode ke REDACT_SENSITIVE_TEXT.

Anda dapat melakukan semua fungsi ini dalam satu perintah curl seperti berikut:

curl -X POST \
    -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    -H "Content-Type: application/json; charset=utf-8" \
    --data "{
      'destinationDataset': 'projects/$PROJECT_ID/locations/$REGION/datasets/$DESTINATION_DATASET_ID',
      'config':{
    'dicom':{'filterProfile':'DEIDENTIFY_TAG_CONTENTS'},
    'text':{
        'transformations':[
            {'infoTypes':['PERSON_NAME'], 'redactConfig':{}},
            {'infoTypes':['PHONE_NUMBER'], 'characterMaskConfig':{'maskingCharacter':''}},
            {'infoTypes':['DATE', 'DATE_OF_BIRTH'], 'dateShiftConfig':{'cryptoKey':'U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU='}}]},
    'image':{'textRedactionMode':'REDACT_SENSITIVE_TEXT'}}}" \
"https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID:deidentify"

Jika permintaan berhasil, server akan menampilkan respons dalam format JSON seperti berikut:

{
  "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/OPERATION_NAME"
}

Respons berisi nama operasi. Anda dapat menggunakan Metode get operasi untuk melacak status operasi:

curl -X GET \
    -H "Authorization: Bearer "$(gcloud auth print-access-token) \
    -H "Content-Type: application/json; charset=utf-8" \
"https://healthcare.googleapis.com/v1/projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME"

Jika permintaan berhasil, server akan menampilkan respons berikut dalam format JSON:

{
  "name": "projects/$PROJECT_ID/locations/$REGION/datasets/$SOURCE_DATASET_ID/operations/OPERATION_NAME",
  "metadata": {
    "@type": "type.googleapis.com/google.cloud.healthcare.v1.OperationMetadata",
    "apiMethodName": "google.cloud.healthcare.v1.dataset.DatasetService.DeidentifyDataset",
    "createTime": "2018-01-01T00:00:00Z",
    "endTime": "2018-01-01T00:00:00Z"
  },
  "done": true,
  "response": {
    "@type": "...",
    "successStoreCount": "SUCCESS_STORE_COUNT"
  }
}

Pembersihan

Agar tidak perlu membayar biaya pada akun Google Cloud Anda untuk resource yang digunakan dalam tutorial ini, hapus project yang berisi resource tersebut, atau simpan project dan hapus setiap resource.

Menghapus project

  1. Di konsol Google Cloud, buka halaman Manage resource.

    Buka Manage resource

  2. Pada daftar project, pilih project yang ingin Anda hapus, lalu klik Delete.
  3. Pada dialog, ketik project ID, lalu klik Shut down untuk menghapus project.

Menghapus setiap resource

  • Hapus set data tujuan. Jika perlu, tambahkan parameter --location dan tentukan region untuk set data Anda.

    gcloud healthcare datasets delete $DESTINATION_DATASET_ID
    

Langkah selanjutnya