הסרת פרטי הזיהוי מנתוני DICOM באמצעות DicomConfig

של ה-API הזה.

בדף הזה מוסבר איך להשתמש בהגדרה של v1 DicomConfig כדי להסיר פרטי זיהוי ממידע אישי רגיש במופעי DICOM ברמות הבאות:

בדף הזה מוסבר גם איך להחיל מסננים כשמבטלים את הזיהוי של נתונים ברמת מאגר DICOM.

סקירה כללית על הסרת פרטי הזיהוי

הסרת פרטי הזיהוי ברמת מערך הנתונים

כדי להסיר את הפרטים המזהים מנתוני DICOM ברמת מערך הנתונים, קוראים לפעולה datasets.deidentify. קריאה ל-API להסרת פרטי הזיהוי כוללת את הרכיבים הבאים:

  • מערך נתוני המקור: מערך נתונים שמכיל מאגרי DICOM עם מופע אחד או יותר שכוללים מידע אישי רגיש. כשמתקשרים לפעולה deidentify, כל המופעים בכל מאגרי DICOM במערך הנתונים עוברים הסרת פרטים מזהים.
  • מערך הנתונים של היעד: הסרת הפרטים המזהים לא משפיעה על מערך הנתונים המקורי או על הנתונים שבו. במקום זאת, עותקים של הנתונים המקוריים שעברו הסרת פרטים מזהים נכתבים למערך נתונים חדש שנקרא מערך נתוני היעד.
  • מה רוצים להסיר את פרטי הזיהוי שלו: פרמטרים של הגדרה שמציינים איך לעבד את מערך הנתונים. אפשר להגדיר הסרת פרטים מזהים ב-DICOM כדי להסיר פרטים מזהים ממטא-נתונים של מופע DICOM (באמצעות מילות מפתח של תגים) או מטקסט מוטבע בתמונות DICOM. כדי לעשות זאת, צריך לציין את הפרמטרים האלה באובייקט DeidentifyConfig ולבצע את הפעולות הבאות:
    • הגדרת השדה config בגוף הבקשה
    • אחסון שלו ב-Cloud Storage בפורמט JSON וציון המיקום של הקובץ בקטגוריה באמצעות השדה gcsConfigUri בגוף הבקשה

רוב הדוגמאות במדריך הזה מראות איך לבטל את הזיהוי של נתוני DICOM ברמת מערך הנתונים.

הסרת פרטי הזיהוי ברמת האחסון של DICOM

הסרת הפרטים המזהים מנתוני DICOM ברמת מאגר DICOM מאפשרת לכם לשלוט טוב יותר בנתונים שמהם יוסרו הפרטים המזהים. לדוגמה, אם יש לכם מערך נתונים עם כמה מאגרי DICOM, אתם יכולים להסיר את הפרטים המזהים מכל מאגר DICOM בהתאם לסוג הנתונים שקיים במאגר.

כדי להסיר פרטי זיהוי מנתוני DICOM במאגר DICOM, צריך להפעיל את השיטה dicomStores.deidentify. קריאה ל-API של הסרת פרטים מזהים כוללת את הרכיבים הבאים:

  • מאגר DICOM המקור: מאגר DICOM שמכיל מופע אחד או יותר עם מידע אישי רגיש. כשמתקשרים לפעולה deidentify, כל המופעים במאגר DICOM עוברים הסרת פרטים מזהים.
  • מאגר היעד של DICOM: הסרת הפרטים המזהים לא משפיעה על מאגר DICOM המקורי או על הנתונים שלו. במקום זאת, עותקים של הנתונים המקוריים שעברו הסרת פרטים מזהים נכתבים במאגר DICOM של היעד. מאגר ה-DICOM של היעד חייב כבר להיות קיים.
  • מה להסיר מהזיהוי: פרמטרים של הגדרה שמציינים איך לעבד את מאגר DICOM. אפשר להגדיר הסרת פרטים מזהים ב-DICOM כדי להסיר פרטים מזהים ממטא-נתונים של מופע DICOM (באמצעות מילות מפתח של תגים) או מטקסט מוטבע בתמונות DICOM. כדי לעשות זאת, צריך לציין את הפרמטרים האלה באובייקט DeidentifyConfig ולהעביר אותו באחת מהדרכים הבאות:
    • הגדרת השדה config בגוף הבקשה
    • אחסון שלו ב-Cloud Storage בפורמט JSON וציון המיקום של הקובץ בקטגוריה באמצעות השדה gcsConfigUri בגוף הבקשה

דוגמה לאופן הסרת הפרטים המזהים מנתוני DICOM ברמת מאגר DICOM מופיעה במאמר הסרת פרטים מזהים מנתונים ברמת מאגר DICOM.

מסננים

אפשר להסיר את הפרטים המזהים מקבוצת משנה של נתונים במאגר DICOM על ידי הגדרת קובץ מסנן וציון הקובץ בבקשת dicomStores.deidentify. לדוגמה, אפשר לעיין במאמר הסרת פרטים מזהים מקבוצת משנה של מאגר DICOM.

סקירה כללית של דוגמאות

בדוגמאות שבמדריך הזה נעשה שימוש במופע DICOM יחיד, אבל אפשר גם להסיר פרטים מזהים מכמה מופעים.

בכל אחד מהקטעים הבאים מוצגות דוגמאות לשיטות שונות להסרת פרטים מזהים מנתוני DICOM. לכל דוגמה מצורף פלט של התמונה לאחר הסרת הפרטים המזהים. כל דוגמה משתמשת בתמונה המקורית הבאה כקלט:

xray_original

אפשר להשוות את תמונת הפלט מכל פעולת הסרת פרטים מזהים לתמונה המקורית הזו כדי לראות את ההשפעות של הפעולה.

הסרת פרטי הזיהוי מתגי DICOM

אפשר להסיר את הפרטים המזהים ממופעי DICOM על סמך מילות מפתח של תגים במטא-נתונים של DICOM. השיטות הבאות לסינון תגים זמינות באובייקט DicomConfig:

  • ‫keepList: רשימת התגים שרוצים לשמור. מסירים את כל התגים האחרים.
  • ‫removeList: רשימת התגים להסרה. משאירים את כל התגים האחרים.
  • ‫filterProfile: פרופיל סינון תגים שמשמש לקביעה אילו תגים לשמור או להסיר.

לכל דוגמה בקטע הזה מוצג הפלט של המטא-נתונים ששונו במופע DICOM. אלה המטא-נתונים המקוריים של המופע שמשמשים כקלט לכל דוגמה:

[
  {
    "00020002":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
     "00020003":{"vr":"UI","Value":["1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695"]},
     "00020010":{"vr":"UI","Value":["1.2.840.10008.1.2.4.50"]},
     "00020012":{"vr":"UI","Value":["1.2.276.0.7230010.3.0.3.6.1"]},
     "00020013":{"vr":"SH","Value":["OFFIS_DCMTK_361"]},
     "00080005":{"vr":"CS","Value":["ISO_IR 100"]},
     "00080016":{"vr":"UI","Value":["1.2.840.10008.5.1.4.1.1.7"]},
     "00080018":{"vr":"UI","Value":["1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695"]},
     "00080020":{"vr":"DA","Value":["20110909"]},
     "00080030":{"vr":"TM","Value":["110032"]},
     "00080050":{"vr":"SH"},
     "00080064":{"vr":"CS","Value":["WSD"]},
     "00080070":{"vr":"LO","Value":["Manufacturer"]},
     "00080090":{"vr":"PN","Value":[{"Alphabetic":"John Doe"}]},
     "00081090":{"vr":"LO","Value":["ABC1"]},
     "00100010":{"vr":"PN","Value":[{"Alphabetic":"Ann Johnson"}]},
     "00100020":{"vr":"LO","Value":["S1214223-1"]},
     "00100030":{"vr":"DA","Value":["19880812"]},
     "00100040":{"vr":"CS","Value":["F"]},
     "0020000D":{"vr":"UI","Value":["2.25.70541616638819138568043293671559322355"]},
     "0020000E":{"vr":"UI","Value":["1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694"]},
     "00200010":{"vr":"SH"},
     "00200011":{"vr":"IS"},
     "00200013":{"vr":"IS"},
     "00200020":{"vr":"CS"},
     "00280002":{"vr":"US","Value":[3]},
     "00280004":{"vr":"CS","Value":["YBR_FULL_422"]},
     "00280006":{"vr":"US","Value":[0]},
     "00280010":{"vr":"US","Value":[1024]},
     "00280011":{"vr":"US","Value":[1024]},
     "00280100":{"vr":"US","Value":[8]},
     "00280101":{"vr":"US","Value":[8]},
     "00280102":{"vr":"US","Value":[7]},
     "00280103":{"vr":"US","Value":[0]},
     "00282110":{"vr":"CS","Value":["01"]},
     "00282114":{"vr":"CS","Value":["ISO_10918_1"]}
  }
]

ביטול הזיהוי באמצעות תגי keeplist

כשמציינים תג keeplist באובייקט DicomConfig, התגים הבאים מתווספים כברירת מחדל:

  • StudyInstanceUID
  • SeriesInstanceUID
  • SOPInstanceUID
  • TransferSyntaxUID
  • MediaStorageSOPInstanceUID
  • MediaStorageSOPClassUID
  • PixelData
  • Rows
  • Columns
  • SamplesPerPixel
  • BitsAllocated
  • BitsStored
  • Highbit
  • PhotometricInterpretation
  • PixelRepresentation
  • NumberOfFrames
  • PlanarConfiguration
  • PixelAspectRatio
  • SmallestImagePixelValue
  • LargestImagePixelValue
  • RedPaletteColorLookupTableDescriptor
  • GreenPaletteColorLookupTableDescriptor
  • BluePaletteColorLookupTableDescriptor
  • RedPaletteColorLookupTableData
  • GreenPaletteColorLookupTableData
  • BluePaletteColorLookupTableData
  • ICCProfile
  • ColorSpace
  • WindowCenter
  • WindowWidth
  • VOILUTFunction

הפעולה deidentify לא מצנזרת את התגים הקודמים. עם זאת, הערכים של חלק מהתגים נוצרים מחדש, כלומר הערכים מוחלפים בערך אחר באמצעות טרנספורמציה דטרמיניסטית. מידע נוסף מופיע בקטע שמירת אפשרות ה-UID בתקן DICOM. כדי לשמור את הערכים המקוריים של התגים הקודמים, משתמשים באפשרות SkipIdRedaction.

אם לא מספקים תגים של רשימת שמירה, לא יוסרו תגים של DICOM ממערך הנתונים.

בדוגמאות הבאות מוצגות דרכים להסרת פרטים מזהים ממערך נתונים שמכיל מאגרי DICOM ונתוני DICOM, תוך השארת חלק מהתגים ללא שינוי.

אחרי ששולחים את התמונה אל Cloud Healthcare API, התמונה מוצגת באופן הבא. המטא-נתונים שמוצגים בפינות העליונות של התמונה הוסרו, אבל המידע הרפואי המוגן (PHI) שמוטבע בתמונה בחלק התחתון שלה עדיין מופיע. כדי להסיר גם את הטקסט המוטבע, אפשר לעיין במאמר בנושא הסרת טקסט מוטבע מתמונות.

dicom_keeplist

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.
  3. אחרי שהסרת הפרטים המזהים מסתיימת בהצלחה, אפשר לאחזר את המטא-נתונים של המופע שבו הוסרו הפרטים המזהים כדי לראות איך הם השתנו. למכונה שעברה הסרת פרטים מזהים יש מזהה UID חדש של מחקרים, מזהה UID חדש של סדרות ומזהה UID חדש של מכונות, ולכן קודם צריך לחפש את המכונה שעברה הסרת פרטים מזהים במערך הנתונים החדש.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SOURCE_DATASET_LOCATION: המיקום של מערך הנתונים של המקור
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

    בטבלה הבאה אפשר לראות איך השתנו מזהה המחקר, מזהה הסדרה ומזהה המופעים:
      מטא-נתונים מקוריים של מכונה מטא-נתונים של מופע שהוסרו ממנו פרטים מזהים
    מזהה מחקר (UID) ‏(0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    מזהה ייחודי של סדרה (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    מזהה ייחודי של מופעים (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
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט מכיל את המטא-נתונים החדשים. אפשר להשוות את המטא-נתונים החדשים למטא-הנתונים המקוריים כדי לראות את ההשפעה של השינוי.

Go

import (
	"context"
	"fmt"
	"io"
	"time"

	healthcare "google.golang.org/api/healthcare/v1"
)

// deidentifyDataset creates a new dataset containing de-identified data from the source dataset.
func deidentifyDataset(w io.Writer, projectID, location, sourceDatasetID, destinationDatasetID string) error {
	ctx := context.Background()

	healthcareService, err := healthcare.NewService(ctx)
	if err != nil {
		return fmt.Errorf("healthcare.NewService: %w", err)
	}

	datasetsService := healthcareService.Projects.Locations.Datasets

	parent := fmt.Sprintf("projects/%s/locations/%s", projectID, location)

	req := &healthcare.DeidentifyDatasetRequest{
		DestinationDataset: fmt.Sprintf("%s/datasets/%s", parent, destinationDatasetID),
		Config: &healthcare.DeidentifyConfig{
			Dicom: &healthcare.DicomConfig{
				KeepList: &healthcare.TagFilterList{
					Tags: []string{
						"PatientID",
					},
				},
			},
		},
	}

	sourceName := fmt.Sprintf("%s/datasets/%s", parent, sourceDatasetID)
	resp, err := datasetsService.Deidentify(sourceName, req).Do()
	if err != nil {
		return fmt.Errorf("Deidentify: %w", err)
	}

	// Wait for the deidentification operation to finish.
	operationService := healthcareService.Projects.Locations.Datasets.Operations
	for {
		op, err := operationService.Get(resp.Name).Do()
		if err != nil {
			return fmt.Errorf("operationService.Get: %w", err)
		}
		if !op.Done {
			time.Sleep(1 * time.Second)
			continue
		}
		if op.Error != nil {
			return fmt.Errorf("deidentify operation error: %v", *op.Error)
		}
		fmt.Fprintf(w, "Created de-identified dataset %s from %s\n", resp.Name, sourceName)
		return nil
	}
}

Java

import com.google.api.client.http.HttpRequestInitializer;
import com.google.api.client.http.javanet.NetHttpTransport;
import com.google.api.client.json.JsonFactory;
import com.google.api.client.json.gson.GsonFactory;
import com.google.api.services.healthcare.v1.CloudHealthcare;
import com.google.api.services.healthcare.v1.CloudHealthcare.Projects.Locations.Datasets;
import com.google.api.services.healthcare.v1.CloudHealthcareScopes;
import com.google.api.services.healthcare.v1.model.DeidentifyConfig;
import com.google.api.services.healthcare.v1.model.DeidentifyDatasetRequest;
import com.google.api.services.healthcare.v1.model.DicomConfig;
import com.google.api.services.healthcare.v1.model.Operation;
import com.google.api.services.healthcare.v1.model.TagFilterList;
import com.google.auth.http.HttpCredentialsAdapter;
import com.google.auth.oauth2.GoogleCredentials;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collections;

public class DatasetDeIdentify {
  private static final String DATASET_NAME = "projects/%s/locations/%s/datasets/%s";
  private static final JsonFactory JSON_FACTORY = new GsonFactory();
  private static final NetHttpTransport HTTP_TRANSPORT = new NetHttpTransport();

  public static void datasetDeIdentify(String srcDatasetName, String destDatasetName)
      throws IOException {
    // String srcDatasetName =
    //     String.format(DATASET_NAME, "your-project-id", "your-region-id", "your-src-dataset-id");
    // String destDatasetName =
    //    String.format(DATASET_NAME, "your-project-id", "your-region-id", "your-dest-dataset-id");

    // Initialize the client, which will be used to interact with the service.
    CloudHealthcare client = createClient();

    // Configure what information needs to be De-Identified.
    // For more information on de-identifying using tags, please see the following:
    // https://cloud.google.com/healthcare/docs/how-tos/dicom-deidentify#de-identification_using_tags
    TagFilterList tags = new TagFilterList().setTags(Arrays.asList("PatientID"));
    DicomConfig dicomConfig = new DicomConfig().setKeepList(tags);
    DeidentifyConfig config = new DeidentifyConfig().setDicom(dicomConfig);

    // Create the de-identify request and configure any parameters.
    DeidentifyDatasetRequest deidentifyRequest =
        new DeidentifyDatasetRequest().setDestinationDataset(destDatasetName).setConfig(config);
    Datasets.Deidentify request =
        client.projects().locations().datasets().deidentify(srcDatasetName, deidentifyRequest);

    // Execute the request, wait for the operation to complete, and process the results.
    try {
      Operation operation = request.execute();
      while (operation.getDone() == null || !operation.getDone()) {
        // Update the status of the operation with another request.
        Thread.sleep(500); // Pause for 500ms between requests.
        operation =
            client
                .projects()
                .locations()
                .datasets()
                .operations()
                .get(operation.getName())
                .execute();
      }
      System.out.println(
          "De-identified Dataset created. Response content: " + operation.getResponse());
    } catch (Exception ex) {
      System.out.printf("Error during request execution: %s", ex.toString());
      ex.printStackTrace(System.out);
    }
  }

  private static CloudHealthcare createClient() throws IOException {
    // Use Application Default Credentials (ADC) to authenticate the requests
    // For more information see https://cloud.google.com/docs/authentication/production
    GoogleCredentials credential =
        GoogleCredentials.getApplicationDefault()
            .createScoped(Collections.singleton(CloudHealthcareScopes.CLOUD_PLATFORM));

    // Create a HttpRequestInitializer, which will provide a baseline configuration to all requests.
    HttpRequestInitializer requestInitializer =
        request -> {
          new HttpCredentialsAdapter(credential).initialize(request);
          request.setConnectTimeout(60000); // 1 minute connect timeout
          request.setReadTimeout(60000); // 1 minute read timeout
        };

    // Build the client for interacting with the service.
    return new CloudHealthcare.Builder(HTTP_TRANSPORT, JSON_FACTORY, requestInitializer)
        .setApplicationName("your-application-name")
        .build();
  }
}

Node.js

const google = require('@googleapis/healthcare');
const healthcare = google.healthcare({
  version: 'v1',
  auth: new google.auth.GoogleAuth({
    scopes: ['https://www.googleapis.com/auth/cloud-platform'],
  }),
});

const deidentifyDataset = async () => {
  // TODO(developer): uncomment these lines before running the sample
  // const cloudRegion = 'us-central1';
  // const projectId = 'adjective-noun-123';
  // const sourceDatasetId = 'my-source-dataset';
  // const destinationDatasetId = 'my-destination-dataset';
  // const keeplistTags = 'PatientID'
  const sourceDataset = `projects/${projectId}/locations/${cloudRegion}/datasets/${sourceDatasetId}`;
  const destinationDataset = `projects/${projectId}/locations/${cloudRegion}/datasets/${destinationDatasetId}`;
  const request = {
    sourceDataset: sourceDataset,
    destinationDataset: destinationDataset,
    resource: {
      config: {
        dicom: {
          keepList: {
            tags: [keeplistTags],
          },
        },
      },
    },
  };

  await healthcare.projects.locations.datasets.deidentify(request);
  console.log(
    `De-identified data written from dataset ${sourceDatasetId} to dataset ${destinationDatasetId}`
  );
};

deidentifyDataset();

Python

# Imports the Dict type for runtime type hints.
from typing import Dict


def deidentify_dataset(
    project_id: str,
    location: str,
    dataset_id: str,
    destination_dataset_id: str,
) -> Dict[str, str]:
    """Uses a DICOM tag keeplist to create a new dataset containing de-identified DICOM data from the source dataset.

    See
    https://github.com/GoogleCloudPlatform/python-docs-samples/tree/main/healthcare/api-client/v1/datasets
    before running the sample.
    See https://googleapis.github.io/google-api-python-client/docs/dyn/healthcare_v1.projects.locations.datasets.html#deidentify
    for the Python API reference.

    Args:
      project_id: The project ID or project number of the Google Cloud project you want
          to use.
      location: The name of the dataset's location.
      dataset_id: The ID of the source dataset containing the DICOM store to de-identify.
      destination_dataset_id: The ID of the dataset where de-identified DICOM data
        is written.

    Returns:
      A dictionary representing a long-running operation that results from
      calling the 'DeidentifyDataset' method. Use the
      'google.longrunning.Operation'
      API to poll the operation status.
    """
    # Imports the Python built-in time module.
    import time

    # Imports the Google API Discovery Service.
    from googleapiclient import discovery

    # Imports HttpError from the Google Python API client errors module.
    from googleapiclient.errors import HttpError

    api_version = "v1"
    service_name = "healthcare"
    # Returns an authorized API client by discovering the Healthcare API
    # and using GOOGLE_APPLICATION_CREDENTIALS environment variable.
    client = discovery.build(service_name, api_version)

    # TODO(developer): Uncomment these lines and replace with your values.
    # project_id = 'my-project'
    # location = 'us-central1'
    # dataset_id = 'my-source-dataset'
    # destination_dataset_id = 'my-destination-dataset'
    source_dataset = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, dataset_id
    )
    destination_dataset = "projects/{}/locations/{}/datasets/{}".format(
        project_id, location, destination_dataset_id
    )

    body = {
        "destinationDataset": destination_dataset,
        "config": {
            "dicom": {
                "keepList": {
                    "tags": [
                        "Columns",
                        "NumberOfFrames",
                        "PixelRepresentation",
                        "MediaStorageSOPClassUID",
                        "MediaStorageSOPInstanceUID",
                        "Rows",
                        "SamplesPerPixel",
                        "BitsAllocated",
                        "HighBit",
                        "PhotometricInterpretation",
                        "BitsStored",
                        "PatientID",
                        "TransferSyntaxUID",
                        "SOPInstanceUID",
                        "StudyInstanceUID",
                        "SeriesInstanceUID",
                        "PixelData",
                    ]
                }
            }
        },
    }

    request = (
        client.projects()
        .locations()
        .datasets()
        .deidentify(sourceDataset=source_dataset, body=body)
    )

    # Set a start time for operation completion.
    start_time = time.time()
    # TODO(developer): Increase the max_time if de-identifying many resources.
    max_time = 600

    try:
        operation = request.execute()
        while not operation.get("done", False):
            # Poll until the operation finishes.
            print("Waiting for operation to finish...")
            if time.time() - start_time > max_time:
                raise RuntimeError("Timed out waiting for operation to finish.")
            operation = (
                client.projects()
                .locations()
                .datasets()
                .operations()
                .get(name=operation["name"])
                .execute()
            )
            # Wait 5 seconds between each poll to the operation.
            time.sleep(5)

        if operation.get("error"):
            raise TimeoutError(f"De-identify operation failed: {operation['error']}")
        else:
            print(f"De-identified data to dataset: {destination_dataset_id}")
            print(
                f"Resources succeeded: {operation.get('metadata').get('counter').get('success')}"
            )
            print(
                f"Resources failed: {operation.get('metadata').get('counter').get('failure')}"
            )
            return operation

    except HttpError as err:
        # A common error is when the destination dataset already exists.
        if err.resp.status == 409:
            raise RuntimeError(
                f"Destination dataset with ID {destination_dataset_id} already exists."
            )
        else:
            raise err

ביטול הזיהוי באמצעות תגי removelist

אפשר לציין רשימת הסרה באובייקט DicomConfig. הפעולה deidentify תצנזר רק את התגים שצוינו ברשימה. אם לא מסופקים תגי removelist, פעולת הסרת הפרטים המזהים מתבצעת כרגיל, אבל לא מוסרים תגי DICOM במערך נתוני היעד.

כשמציינים רשימת הסרה, התג OverlayData מתווסף כברירת מחדל כי נתוני שכבת העל עשויים להכיל מידע אישי רגיש.

אי אפשר להוסיף לרשימת ההסרה את התגים שמוספים כברירת מחדל לרשימת השמירה.

בדוגמאות הבאות מוצגות דרכים להסרת פרטים מזהים ממערך נתונים שמכיל מאגרי DICOM ונתוני DICOM, על ידי הסרת כל התגים ברשימת ההסרה. תגים שלא נמצאים ברשימת ההסרה לא משתנים.

אחרי ששולחים את התמונה אל Cloud Healthcare API, התמונה מוצגת באופן הבא. מתוך התגים שצוינו ב-removelist, רק PatientBirthDate מוסר מהתמונה, כי הוא התג היחיד מ-removelist שתואם למטא-נתונים שגלויים בתמונה.

הסמל PatientBirthDate בפינה העליונה של התמונה הוסר בהתאם להגדרות ברשימת ההסרה, אבל פרטי ה-PHI שמוטבעים בתחתית התמונה נשארו. כדי להסיר גם את הטקסט המוטבע, אפשר לעיין במאמר בנושא הסרת טקסט מוטבע מתמונות.

dicom_removelist

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "removeList": {
            "tags": [
              "PatientBirthName",
              "PatientBirthDate",
              "PatientAge",
              "PatientSize",
              "PatientWeight",
              "PatientAddress",
              "PatientMotherBirthName"
            ]
          }
        }
      }
    }
    EOF

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "removeList": {
            "tags": [
              "PatientBirthName",
              "PatientBirthDate",
              "PatientAge",
              "PatientSize",
              "PatientWeight",
              "PatientAddress",
              "PatientMotherBirthName"
            ]
          }
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.
  3. אחרי שהסרת הפרטים המזהים מסתיימת בהצלחה, אפשר לאחזר את המטא-נתונים של המופע שבו הוסרו הפרטים המזהים כדי לראות איך הם השתנו. למכונה שעברה הסרת פרטים מזהים יש מזהה UID חדש של מחקרים, מזהה UID חדש של סדרות ומזהה UID חדש של מכונות, ולכן קודם צריך לחפש את המכונה שעברה הסרת פרטים מזהים במערך הנתונים החדש.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SOURCE_DATASET_LOCATION: המיקום של מערך הנתונים של המקור
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

    בטבלה הבאה אפשר לראות איך השתנו מזהה המחקר, מזהה הסדרה ומזהה המופעים:
      מטא-נתונים מקוריים של מכונה מטא-נתונים של מופע שהוסרו ממנו פרטים מזהים
    מזהה מחקר (UID) ‏(0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    מזהה ייחודי של סדרה (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    מזהה ייחודי של מופעים (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
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט מכיל את המטא-נתונים החדשים. אפשר להשוות את המטא-נתונים החדשים למטא-הנתונים המקוריים כדי לראות את ההשפעה של השינוי.

ביטול הזיהוי באמצעות פרופיל של מסנן תגים

במקום לציין אילו תגים להשאיר או להסיר, אפשר להגדיר TagFilterProfile באובייקט DicomConfig. פרופיל של מסנן תגים הוא פרופיל מוגדר מראש שקובע אילו תגים יישמרו, יוסרו או ישונו. TagFilterProfileכאן אפשר לראות את הפרופילים הזמינים.

בדוגמאות הבאות מוצגות דרכים להסרת פרטים מזהים ממערך נתונים שמכיל מאגרי DICOM ונתוני DICOM באמצעות פרופיל סינון התגים ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILE. פרופיל המסנן הזה מסיר תגים על סמך הפרופיל הבסיסי של סודיות המאפיינים בתקן DICOM. ‫Cloud Healthcare API לא תואם באופן מלא ל-Attribute Confidentiality Basic Profile. לדוגמה, Cloud Healthcare API לא בודק הגבלות של הגדרת אובייקט מידע (IOD) כשבוחרים פעולה לתג.

אחרי ששולחים את התמונה אל Cloud Healthcare API באמצעות ATTRIBUTE_CONFIDENTIALITY_BASIC_PROFILEפרופיל סינון התגים, התמונה מוצגת כך: המטא-נתונים שמוצגים בפינות העליונות של התמונה הוסרו, אבל הפרטים הרפואיים האישיים שמוטבעים בתחתית התמונה נשארו. כדי להסיר גם את הטקסט המוטבע, אפשר לעיין במאמר בנושא עריכת טקסט מוטבע בתמונות.

dicom_attribute_confidentiality_basic_profile

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.
  3. אחרי שהסרת הפרטים המזהים מסתיימת בהצלחה, אפשר לאחזר את המטא-נתונים של המופע שבו הוסרו הפרטים המזהים כדי לראות איך הם השתנו. למכונה שעברה הסרת פרטים מזהים יש מזהה UID חדש של מחקרים, מזהה UID חדש של סדרות ומזהה UID חדש של מכונות, ולכן קודם צריך לחפש את המכונה שעברה הסרת פרטים מזהים במערך הנתונים החדש.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SOURCE_DATASET_LOCATION: המיקום של מערך הנתונים של המקור
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

    בטבלה הבאה אפשר לראות איך השתנו מזהה המחקר, מזהה הסדרה ומזהה המופעים:
      מטא-נתונים מקוריים של מכונה מטא-נתונים של מופע שהוסרו ממנו פרטים מזהים
    מזהה מחקר (UID) ‏(0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    מזהה ייחודי של סדרה (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    מזהה ייחודי של מופעים (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
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט מכיל את המטא-נתונים החדשים. אפשר להשוות את המטא-נתונים החדשים למטא-הנתונים המקוריים כדי לראות את ההשפעה של השינוי.

הסרת פרטים מזהים בנתונים במסוף Google Cloud

כדי להסיר פרטים מזהים מנתונים במסוף Google Cloud :

  1. נכנסים לדף Datasets במסוף Google Cloud .

    כניסה לדף Datasets

  2. ברשימה פעולות, בוחרים באפשרות הסרת פרטים מזהים בשביל מערך הנתונים שרוצים להסיר ממנו פרטים מזהים.

    יוצג הדף De-identify Dataset.

  3. לוחצים על הגדרת מערך נתונים ליעד ומזינים שם למערך הנתונים החדש שבו יישמרו הנתונים שעברו הסרת פרטים מזהים.

  4. בוחרים באפשרות DICOM tag de-identification (הסרת פרטים מזהים מתג DICOM) כדי לבחור את הפרופיל של הנתונים שרוצים להסיר מהם פרטים מזהים. אפשר להסיר את הפרטים המזהים מהנתונים באופן הבא:

  5. בוחרים באפשרות DICOM burnt-in text redaction כדי להגדיר איך מתבצעת צנזורה של תמונות במהלך הסרת הפרטים המזהים. אפשר להגדיר את הצנזורה של תמונות באופן הבא:

  6. לוחצים על De-identify (הסרת פרטים מזהים) כדי להסיר את הפרטים המזהים מהנתונים במערך הנתונים.

הסרת טקסט שמוטבע בתמונות

ה-Cloud Healthcare API יכול לצנזר טקסט רגיש שמוטבע בתמונות. ה-API מזהה נתונים רגישים כמו PHI, ואז מסתיר אותם באמצעות מלבן אטום. ממשק ה-API מחזיר את אותן תמונות DICOM שסיפקתם לו, באותו פורמט, אבל כל טקסט שזוהה כטקסט שמכיל מידע רגיש בהתאם לקריטריונים שלכם, מושמט.

כדי לצנזר טקסט שמוטבע בתמונות, צריך לציין את האפשרות TextRedactionMode בתוך אובייקט ImageConfig. אפשר לעיין בTextRedactionModeמסמכי התיעוד כדי לראות את הערכים האפשריים.

הסרת כל הטקסט שמוטבע בתמונה

בדוגמאות הבאות אפשר לראות איך לצנזר את כל הטקסט שמוטבע בתמונות DICOM במערך נתונים. כדי לעשות את זה, מציינים REDACT_ALL_TEXT בשדה TextRedactionMode.

אחרי ששולחים את התמונה אל Cloud Healthcare API באמצעות האפשרות REDACT_ALL_TEXT, התמונה מופיעה כמו בדוגמה הבאה. הטקסט שמוטבע בתחתית התמונה הוסר, אבל המטא-נתונים בפינות העליונות של התמונה נשארו. כדי להסיר גם את המטא-נתונים, אפשר לעיין במאמר בנושא הסרת פרטים מזהים מתגי DICOM.

xray_redact_all_text

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.
  3. אחרי שהסרת הפרטים המזהים מסתיימת בהצלחה, אפשר לאחזר את המטא-נתונים של המופע שבו הוסרו הפרטים המזהים כדי לראות איך הם השתנו. למכונה שעברה הסרת פרטים מזהים יש מזהה UID חדש של מחקרים, מזהה UID חדש של סדרות ומזהה UID חדש של מכונות, ולכן קודם צריך לחפש את המכונה שעברה הסרת פרטים מזהים במערך הנתונים החדש.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SOURCE_DATASET_LOCATION: המיקום של מערך הנתונים של המקור
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

    בטבלה הבאה אפשר לראות איך השתנו מזהה המחקר, מזהה הסדרה ומזהה המופעים:
      מטא-נתונים מקוריים של מכונה מטא-נתונים של מופע שהוסרו ממנו פרטים מזהים
    מזהה מחקר (UID) ‏(0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    מזהה ייחודי של סדרה (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    מזהה ייחודי של מופעים (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029

צנזורה רק של טקסט רגיש שמוטבע בתמונה

בדוגמאות הבאות אפשר לראות איך לצנזר טקסט רגיש שמוטבע בתמונות DICOM במערך נתונים. כדי לעשות את זה, מציינים REDACT_SENSITIVE_TEXT בשדה TextRedactionMode.

כשמציינים את REDACT_SENSITIVE_TEXT, המערכת מצנזרת את סוגי המידע שצוינו בסוגי המידע של DICOM שמוגדרים כברירת מחדל. בנוסף, מוחלים שני סוגים נוספים של מידע מותאם אישית לצורך צנזורה של:

  • מזהי מטופלים, כמו מספרי תיקים רפואיים (MRN)
  • מספרי גישה

בתמונה הבאה מוצגת צילום רנטגן של מטופל ללא צנזורה:

xray2_unredacted

אחרי ששולחים את התמונה אל Cloud Healthcare API באמצעות האפשרות REDACT_SENSITIVE_TEXT, התמונה מופיעה כך:

xray2_redact_sensitive_text

אפשר לראות את הפעולות הבאות שבוצעו:

  • הטקסט PERSON_NAME בפינה הימנית התחתונה של התמונה הוסתר
  • הטקסט DATE בפינה הימנית התחתונה של התמונה הוסתר

מין המטופל לא הוסתר כי הוא לא נחשב לטקסט רגיש לפי סוגי המידע של DICOM שמוגדרים כברירת מחדל.

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.
  3. אחרי שהסרת הפרטים המזהים מסתיימת בהצלחה, אפשר לאחזר את המטא-נתונים של המופע שבו הוסרו הפרטים המזהים כדי לראות איך הם השתנו. למכונה שעברה הסרת פרטים מזהים יש מזהה UID חדש של מחקרים, מזהה UID חדש של סדרות ומזהה UID חדש של מכונות, ולכן קודם צריך לחפש את המכונה שעברה הסרת פרטים מזהים במערך הנתונים החדש.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SOURCE_DATASET_LOCATION: המיקום של מערך הנתונים של המקור
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

    בטבלה הבאה אפשר לראות איך השתנו מזהה המחקר, מזהה הסדרה ומזהה המופעים:
      מטא-נתונים מקוריים של מכונה מטא-נתונים של מופע שהוסרו ממנו פרטים מזהים
    מזהה מחקר (UID) ‏(0020000D) 2.25.70541616638819138568043293671559322355 1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763
    מזהה ייחודי של סדרה (0020000E) 1.2.276.0.7230010.3.1.3.8323329.78.1531234558.523694 1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710
    מזהה ייחודי של מופעים (00080018) 1.2.276.0.7230010.3.1.4.8323329.78.1539083058.523695 1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029

שילוב של הסרת פרטים מזהים מתגים וצנזור טקסט מוטבע

אתם יכולים לשלב בין הסרת פרטים מזהים באמצעות תגים לבין צנזורה של טקסט שמוטבע בתמונות, כדי להסיר פרטים מזהים ממופעי DICOM ברמת פירוט גבוהה יותר. לדוגמה, אם משלבים את REDACT_ALL_TEXT בשדה TextRedactionMode עם DEIDENTIFY_TAG_CONTENTS בשדה TagFilterProfile, אפשר:

  • ‫REDACT_ALL_TEXT: צנזור של כל הטקסט שמוטבע בתמונה.
  • ‫DEIDENTIFY_TAG_CONTENTS: בדיקת תוכן התג והמרת טקסט רגיש. מידע נוסף על אופן הפעולה של DEIDENTIFY_TAG_CONTENTS זמין במאמר הגדרות ברירת מחדל.

אחרי ששולחים את התמונה אל Cloud Healthcare API באמצעות האפשרויות REDACT_ALL_TEXT ו-DEIDENTIFY_TAG_CONTENTS, התמונה מוצגת באופן הבא. שימו לב לשינויים הבאים:

  • השמות בפינה הימנית העליונה ובפינה השמאלית העליונה של התמונה עברו שינוי באמצעות CryptoHashConfig
  • התאריכים בפינה השמאלית העליונה ובפינה הימנית העליונה של התמונה עברו שינוי באמצעות DateShiftConfig
  • הטקסט שמוטבע בתחתית התמונה מצונזר

xray_redact_all_text_deidentify_tag_contents

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.
  3. אחרי שהסרת הפרטים המזהים מסתיימת בהצלחה, אפשר לאחזר את המטא-נתונים של המופע שבו הוסרו הפרטים המזהים כדי לראות איך הם השתנו. למכונה שעברה הסרת פרטים מזהים יש מזהה UID חדש של מחקרים, מזהה UID חדש של סדרות ומזהה UID חדש של מכונות, ולכן קודם צריך לחפש את המכונה שעברה הסרת פרטים מזהים במערך הנתונים החדש.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SOURCE_DATASET_LOCATION: המיקום של מערך הנתונים של המקור
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

  4. בעזרת הערכים החדשים, מאחזרים את המטא-נתונים של המכונה.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט מכיל את המטא-נתונים החדשים. אפשר להשוות את המטא-נתונים החדשים למטא-הנתונים המקוריים כדי לראות את ההשפעה של השינוי.

שימוש ב-infoTypes ובטרנספורמציות פרימיטיביות עם תגי DICOM

‫Cloud Healthcare API יכול להשתמש בסוגי מידע (infoTypes) כדי להגדיר אילו נתונים הוא יסרוק כשהוא מבצע הסרת פרטים מזהים בתגים. סוג מידע הוא סוג של מידע אישי רגיש, כמו שם של מטופל, כתובת אימייל, מספר טלפון, מספר זיהוי או מספר כרטיס אשראי.

טרנספורמציות פרימיטיביות הן כללים שמשמשים לטרנספורמציה של ערך קלט. אתם יכולים להתאים אישית את האופן שבו תגי DICOM עוברים דה-אינדיבידואליזציה על ידי החלת טרנספורמציה פרימיטיבית על סוג המידע של כל תג. לדוגמה, אפשר לבטל את הזיהוי של שם המשפחה של מטופל ולהחליף אותו בסדרה של כוכביות באמצעות ציון LAST_NAME infoType עם טרנספורמציית הפרימיטיב CharacterMaskConfig.

סוגי מידע (infoTypes) של DICOM שמוגדרים כברירת מחדל

סוגי המידע (infoTypes) של DICOM שמוגדרים כברירת מחדל ומשמשים להסרת פרטים מזהים ממטא-נתונים הם:

  • AGE
  • CREDIT_CARD_NUMBER
  • DATE
  • EMAIL_ADDRESS
  • IP_ADDRESS
  • LOCATION
  • MAC_ADDRESS
  • PASSPORT
  • PERSON_NAME
  • PHONE_NUMBER
  • SWIFT_CODE
  • US_DRIVERS_LICENSE_NUMBER
  • US_SOCIAL_SECURITY_NUMBER
  • US_VEHICLE_IDENTIFICATION_NUMBER
  • US_INDIVIDUAL_TAXPAYER_IDENTIFICATION_NUMBER

כשמבטלים את הקישור לזהות של טקסט רגיש בתמונות באמצעות REDACT_SENSITIVE_TEXT,‏ Cloud Healthcare API משתמש בסוגי המידע שצוינו למעלה, אבל מוחלים גם שני סוגי מידע מותאמים אישית נוספים על טקסט רגיש בתמונה כדי:

  • מזהים של מטופלים, כמו מספרי תיקים רפואיים (MRN)
  • מספרי גישה

אפשרויות טרנספורמציה פרימיטיביות

אפשרויות ההמרה הפרימיטיביות של Cloud Healthcare API כוללות:

  • ‫RedactConfig: מסתיר ערך על ידי הסרתו.
  • ‫CharacterMaskConfig: מסתיר מחרוזת באופן מלא או חלקי על ידי החלפת תווים בקלט בתו קבוע שצוין.
  • ‫DateShiftConfig: משנה את התאריכים במספר אקראי של ימים, עם אפשרות לשמור על עקביות באותו הקשר.
  • ‫CryptoHashConfig: משתמשת ב-SHA-256 כדי להחליף ערכי קלט בייצוג בקידוד Base64 של מחרוזת פלט מגובבת שנוצרה באמצעות מפתח הצפנת נתונים נתון.
  • ‫ReplaceWithInfoTypeConfig: מחליפה ערך קלט בשם של סוג המידע שלו.

ציון הגדרות ב-TextConfig

סוגי מידע וטרנספורמציות פרימיטיביות מוגדרים בתוך InfoTypeTransformation, שהוא אובייקט בתוך TextConfig. סוגי המידע מוזנים למערך infoTypes כערכים מופרדים בפסיקים.

הוספת infoType היא אופציונלית. אם לא מציינים לפחות infoType אחד, הטרנספורמציה חלה על ברירות המחדל של infoType ב-DICOM שנמצאות ב-Cloud Healthcare API.

אם מציינים infoTypes ב-InfoTypeTransformation, צריך לציין לפחות טרנספורמציה פרימיטיבית אחת.

אפשר להחיל InfoTypeTransformation רק על פרופיל DEIDENTIFY_TAG_CONTENTS. אי אפשר להחיל InfoTypeTransformation על הפרופילים האחרים שמופיעים ב-TagFilterProfile.

בסעיפים הבאים מוסבר איך להשתמש בהמרות הפרימיטיביות שזמינות ב-InfoTypeTransformation יחד עם infoTypes כדי להתאים אישית את האופן שבו תגי DICOM עוברים דה-איдентификаציה. בדוגמאות נעשה שימוש בתמונת הדוגמה שמופיעה בסקירה כללית של דוגמאות ובמטא-נתונים לדוגמה שמופיעים במאמר הסרת פרטים מזהים מתגי DICOM.

הגדרות ברירת מחדל

כברירת מחדל, כשמגדירים את הפרופיל DEIDENTIFY_TAG_CONTENTS בלי לספק הגדרה כלשהי באובייקט TextConfig, Cloud Healthcare API מחליף את המידע האישי הרגיש באמצעות סוגי המידע (infoTypes) של DICOM שמוגדרים כברירת מחדל. עם זאת, יש התנהגות שונה לגבי סוגי המידע DATE ו-PERSON_NAME, כפי שמוצג בהמשך:

  • התווית DateShiftConfig מוחלת על טקסט שמסווג כסוג המידע DATE. ב-DateShiftConfig נעשה שימוש בטכניקה של הזזת תאריכים עם הפרש של 100 ימים.
  • התווית CryptoHashConfig מוחלת על טקסט שמסווג כסוג המידע PERSON_NAME. CryptoHashConfig מבצע טוקניזציה על ידי יצירת ערך חלופי באמצעות גיבוב קריפטוגרפי.

ההתנהגות הבאה רלוונטית גם כן:

  • כל גיל של מטופל שערכו גדול מ-90 או שווה לו מומר ל-90.
  • אם לא ניתן להחיל טרנספורמציה בגלל הגבלות בפורמט DICOM, יסופק ערך placeholder שתואם לייצוג הערך (VR) של התג.
  • כל ערך אחר שתואם לאחד מסוגי המידע (infoType) שמוגדרים כברירת מחדל ב-DICOM ב-Cloud Healthcare API מוחלף בסוג המידע שלו. לדוגמה, אם התג PatientComments הכיל את המחרוזת "Ann Johnson went to Anytown Hospital," אז המחרוזת "Anytown" תוחלף ב-LOCATION infoType.

בדוגמאות הבאות מוצגת הפלט של שימוש בDEIDENTIFY_TAG_CONTENTS פרופיל ברירת המחדל במערך נתונים שמכיל מאגרי DICOM ונתוני DICOM. אפשר להשוות את פלט ברירת המחדל לפלטים שמתקבלים כשמשתמשים בשילובים שונים של סוגי מידע עם טרנספורמציות פרימיטיביות שונות. בדוגמאות נעשה שימוש במופע DICOM יחיד, אבל אפשר להסיר את הפרטים המזהים מכמה מופעים.

אחרי ששולחים את התמונה אל Cloud Healthcare API באמצעות פרופיל DEIDENTIFY_TAG_CONTENTS, התמונה מופיעה כך: שימו לב לשינויים הבאים:

  • השמות בפינה הימנית העליונה ובפינה השמאלית העליונה של התמונה עברו שינוי באמצעות CryptoHashConfig
  • התאריכים בפינה השמאלית העליונה ובפינה הימנית העליונה של התמונה עברו שינוי באמצעות DateShiftConfig

dicom_infotype_default

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.
  3. אחרי שהסרת הפרטים המזהים מסתיימת בהצלחה, אפשר לאחזר את המטא-נתונים של המופע שבו הוסרו הפרטים המזהים כדי לראות איך הם השתנו. למכונה שעברה הסרת פרטים מזהים יש מזהה UID חדש של מחקרים, מזהה UID חדש של סדרות ומזהה UID חדש של מכונות, ולכן קודם צריך לחפש את המכונה שעברה הסרת פרטים מזהים במערך הנתונים החדש.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SOURCE_DATASET_LOCATION: המיקום של מערך הנתונים של המקור
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

  4. בעזרת הערכים החדשים, מאחזרים את המטא-נתונים של המכונה.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט מכיל את המטא-נתונים החדשים. אפשר להשוות את המטא-נתונים החדשים למטא-הנתונים המקוריים כדי לראות את ההשפעה של השינוי.

RedactConfig

הגדרת redactConfig תגרום להסרת ערך נתון באופן מלא. להודעה redactConfig אין ארגומנטים. ציון ההודעה מאפשר המרה.

בדוגמאות הבאות מוסבר על הגדרת ברירת המחדל, אבל הן כוללות עכשיו הגדרה של PERSON_NAME infoType עם redactConfig transform. שליחת הבקשה הזו תצנזר את כל השמות ממופע ה-DICOM.

אחרי ששולחים את התמונה ל-Cloud Healthcare API באמצעות הטרנספורמציה redactConfig, התמונה נראית כך:

dicom_redactconfig

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "redactConfig": {}
            }
          ]
        }
      }
    }
    EOF

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.
  3. אחרי שהסרת הפרטים המזהים מסתיימת בהצלחה, אפשר לאחזר את המטא-נתונים של המופע שבו הוסרו הפרטים המזהים כדי לראות איך הם השתנו. למכונה שעברה הסרת פרטים מזהים יש מזהה UID חדש של מחקרים, מזהה UID חדש של סדרות ומזהה UID חדש של מכונות, ולכן קודם צריך לחפש את המכונה שעברה הסרת פרטים מזהים במערך הנתונים החדש.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SOURCE_DATASET_LOCATION: המיקום של מערך הנתונים של המקור
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

  4. בעזרת הערכים החדשים, מאחזרים את המטא-נתונים של המכונה.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט מכיל את המטא-נתונים החדשים. אפשר להשוות את המטא-נתונים החדשים למטא-הנתונים המקוריים כדי לראות את ההשפעה של השינוי.

בפלט אפשר לראות שהערכים ב-ReferringPhysicianName (00080090) וב-PatientName (00100010) הוסרו. זה שונה מהדוגמה בהגדרת ברירת המחדל, שבה הערכים האלה עברו טרנספורמציה באמצעות גיבוב קריפטוגרפי.

CharacterMaskConfig

הגדרה של characterMaskConfig מחליפה מחרוזות שתואמות ל-infoTypes שצוינו בתו קבוע שמוגדר. לדוגמה, במקום לצנזר את השם של המטופל או להפוך אותו באמצעות גיבוב קריפטוגרפי, אפשר להחליף את השם בסדרה של כוכביות (*). אפשר לציין את התו הקבוע כערך בשדה maskingCharacter.

בדוגמאות הבאות מוסבר על הגדרת ברירת המחדל, אבל הן כוללות עכשיו הגדרה של LAST_NAME infoType עם characterMaskConfig transform. לא צוין תו קבוע, ולכן ברירת המחדל של ההסתרה היא שימוש בכוכביות.

בדוגמאות נעשה שימוש במופע DICOM יחיד, אבל אפשר לבטל את הזיהוי של כמה מופעים.

אחרי ששולחים את התמונה ל-Cloud Healthcare API באמצעות הטרנספורמציה characterMaskConfig, התמונה נראית כך:

dicom_charactermaskconfig

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "characterMaskConfig": {
                "maskingCharacter": ""
              }
            }
          ]
        }
      }
    }
    EOF

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "PERSON_NAME"
              ],
              "characterMaskConfig": {
                "maskingCharacter": ""
              }
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.
  3. אחרי שהסרת הפרטים המזהים מסתיימת בהצלחה, אפשר לאחזר את המטא-נתונים של המופע שבו הוסרו הפרטים המזהים כדי לראות איך הם השתנו. למכונה שעברה הסרת פרטים מזהים יש מזהה UID חדש של מחקרים, מזהה UID חדש של סדרות ומזהה UID חדש של מכונות, ולכן קודם צריך לחפש את המכונה שעברה הסרת פרטים מזהים במערך הנתונים החדש.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SOURCE_DATASET_LOCATION: המיקום של מערך הנתונים של המקור
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

  4. בעזרת הערכים החדשים, מאחזרים את המטא-נתונים של המכונה.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט מכיל את המטא-נתונים החדשים. אפשר להשוות את המטא-נתונים החדשים למטא-הנתונים המקוריים כדי לראות את ההשפעה של השינוי.

בפלט אפשר לראות שהשמות האחרונים ב-ReferringPhysicianName (00080090) וב-PatientName (00100010) הוחלפו בכוכביות. זה שונה מהדוגמה בהגדרת ברירת המחדל, שבה הערכים האלה עברו טרנספורמציה באמצעות גיבוב קריפטוגרפי.

DateShiftConfig

ממשק Cloud Healthcare API יכול לשנות תאריכים על ידי הזזה שלהם בטווח מוגדר מראש. כדי לשמור על עקביות בהמרות של תאריכים בין הפעלות של הסרת פרטים מזהים, משתמשים ב-DateShiftConfig עם אחת מהאפשרויות הבאות:

כדי לפענח את המפתח העטוף של Cloud KMS, צריך להעניק תפקיד עם ההרשאה cloudkms.cryptoKeyVersions.useToDecrypt לחשבון השירות של סוכן השירות של Cloud Healthcare. מומלץ להשתמש בתפקיד Cloud KMS CryptoKey Decrypter ‏ (roles/cloudkms.cryptoKeyDecrypter). כשמשתמשים ב-Cloud KMS לפעולות קריפטוגרפיות, חלים חיובים. מידע נוסף זמין במחירון של Cloud Key Management Service.

‫Cloud Healthcare API משתמש במפתח הזה כדי לחשב את ההפרש בין תאריכים, כמו תאריך הלידה של המטופל, בטווח של 100 ימים.

אם לא מספקים מפתח, Cloud Healthcare API יוצר מפתח משלו בכל פעם שמופעלת פעולת הסרת הפרטים המזהים בערכי תאריכים. התוצאה יכולה להיות תאריכים שונים בכל הרצה.

בדוגמאות הבאות מוצגות דרכים להגדיר את סוגי המידע DATE ו-DATE_OF_BIRTH באמצעות טרנספורמציה DateShiftConfig במופע DICOM. אחרי ששולחים את בקשת הסרת הפרטים המזהים אל Cloud Healthcare API, ערכי התאריך במופע ישתנו בטווח של פלוס או מינוס 100 ימים מהערכים המקוריים.

מפתח ההצפנה שסופק, U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=, הוא מפתח גולמי בקידוד Base64 באורך 256 ביט, שהוצפן באמצעות AES ונוצר באמצעות הפקודה הבאה. כשמתבקשים, מספקים לפקודה סיסמה ריקה:

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

אחרי ששולחים את התמונה ל-Cloud Healthcare API באמצעות הטרנספורמציה dateShiftConfig, התמונה נראית כך:

dicom_dateshiftconfig

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "DATE",
                "DATE_OF_BIRTH"
              ],
              "dateShiftConfig": {
                "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU="
              }
            }
          ]
        }
      }
    }
    EOF

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [
                "DATE",
                "DATE_OF_BIRTH"
              ],
              "dateShiftConfig": {
                "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU="
              }
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.
  3. אחרי שהסרת הפרטים המזהים מסתיימת בהצלחה, אפשר לאחזר את המטא-נתונים של המופע שבו הוסרו הפרטים המזהים כדי לראות איך הם השתנו. למכונה שעברה הסרת פרטים מזהים יש מזהה UID חדש של מחקרים, מזהה UID חדש של סדרות ומזהה UID חדש של מכונות, ולכן קודם צריך לחפש את המכונה שעברה הסרת פרטים מזהים במערך הנתונים החדש.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SOURCE_DATASET_LOCATION: המיקום של מערך הנתונים של המקור
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

  4. בעזרת הערכים החדשים, מאחזרים את המטא-נתונים של המכונה.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט מכיל את המטא-נתונים החדשים. אפשר להשוות את המטא-נתונים החדשים למטא-הנתונים המקוריים כדי לראות את ההשפעה של השינוי.

בפלט אפשר לראות שלמאפיינים StudyDate (00080020) ו-PatientBirthDate (00100030) יש ערכים חדשים. השינויים האלה התרחשו כתוצאה משילוב ההפרש של 100 הימים עם הערך cryptoKey שסופק. ערכי התאריך החדשים עקביים עבור המופע הזה בין הפעלות של הסרת הפרטים המזהים, כל עוד מסופק אותו cryptoKey.

CryptoHashConfig

אפשר להשאיר את השדה cryptoHashConfig ריק, או לספק בו את אחד מהערכים הבאים:

כדי לפענח את המפתח העטוף של Cloud KMS, צריך להעניק תפקיד עם ההרשאה cloudkms.cryptoKeyVersions.useToDecrypt לחשבון השירות של סוכן השירות של Cloud Healthcare. מומלץ להשתמש בתפקיד Cloud KMS CryptoKey Decrypter ‏ (roles/cloudkms.cryptoKeyDecrypter). כשמשתמשים ב-Cloud KMS לפעולות קריפטוגרפיות, חלים חיובים. מידע נוסף זמין במחירון של Cloud Key Management Service.

ממשק Cloud Healthcare API יכול להמיר נתונים על ידי החלפת ערכים בגיבובים קריפטוגרפיים (שנקראים גם ערכי סרוגייט). כדי לעשות את זה, צריך לציין הודעה cryptoHashConfig.

אם לא מספקים מפתח, Cloud Healthcare API יוצר מפתח. מערכת Cloud Healthcare API משתמשת במפתח הזה כדי ליצור ערכי תחליף. אם מספקים את אותו מפתח לכל הרצה, Cloud Healthcare API יוצר ערכי סרוגייט עקביים. אם לא מספקים מפתח, Cloud Healthcare API יוצר מפתח חדש בכל פעם שהפעולה מופעלת. שימוש במפתח אחר יניב ערכי סרוגייט שונים.

בדוגמאות הבאות אפשר לראות איך להחיל טרנספורמציה cryptoHashConfig על כל סוגי המידע (infoType) של DICOM שמוגדרים כברירת מחדל ונתמכים ב-Cloud Healthcare API. אחרי שליחת הבקשה להסרת פרטים מזהים, הערכים עם סוג המידע התואם של DICOM ב-Cloud Healthcare API מוחלפים בערכי סרוגייט.

בדוגמה מוצג גם איך לספק מפתח הצפנה כדי ליצור ערכי סרוגייט עקביים בין הפעלות של הסרת פרטים מזהים.

מפתח ההצפנה שסופק, U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU=, הוא מפתח גולמי בקידוד Base64 באורך 256 ביט, שהוצפן באמצעות AES ונוצר באמצעות הפקודה הבאה. כשמתבקשים, מספקים לפקודה סיסמה ריקה:

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

אחרי ששולחים את התמונה ל-Cloud Healthcare API באמצעות הטרנספורמציה cryptoHashConfig, התמונה נראית כך:

dicom_cryptohashconfig

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

    cat > request.json << 'EOF'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [],
              "cryptoHashConfig": {
                "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU="
              }
            }
          ]
        }
      }
    }
    EOF

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

    @'
    {
      "destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID",
      "config": {
        "dicom": {
          "filterProfile": "DEIDENTIFY_TAG_CONTENTS"
        },
        "text": {
          "transformations": [
            {
              "infoTypes": [],
              "cryptoHashConfig": {
                "cryptoKey": "U2FsdGVkX19bS2oZsdbK9X5zi2utBn22uY+I2Vo0zOU="
              }
            }
          ]
        }
      }
    }
    '@  | Out-File -FilePath request.json -Encoding utf8

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.
  3. אחרי שהסרת הפרטים המזהים מסתיימת בהצלחה, אפשר לאחזר את המטא-נתונים של המופע שבו הוסרו הפרטים המזהים כדי לראות איך הם השתנו. למכונה שעברה הסרת פרטים מזהים יש מזהה UID חדש של מחקרים, מזהה UID חדש של סדרות ומזהה UID חדש של מכונות, ולכן קודם צריך לחפש את המכונה שעברה הסרת פרטים מזהים במערך הנתונים החדש.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SOURCE_DATASET_LOCATION: המיקום של מערך הנתונים של המקור
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

  4. בעזרת הערכים החדשים, מאחזרים את המטא-נתונים של המכונה.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט מכיל את המטא-נתונים החדשים. אפשר להשוות את המטא-נתונים החדשים למטא-הנתונים המקוריים כדי לראות את ההשפעה של השינוי.

הטרנספורמציות בפלט עקביות עבור המופע הזה בין הרצות של הסרת הפרטים המזהים, כל עוד מסופק אותו cryptoKey.

ReplaceWithInfoTypeConfig

הגדרה של replaceWithInfoTypeConfig מחליפה את ערכי הקלט בשם של סוג המידע של הערך.

בדוגמאות הבאות אפשר לראות איך להחיל טרנספורמציה replaceWithInfoTypeConfig על כל סוגי המידע (infoType) של DICOM שמוגדרים כברירת מחדל ונתמכים ב-Cloud Healthcare API. להודעה replaceWithInfoTypeConfig אין ארגומנטים, אבל ציון שלה מאפשר טרנספורמציה.

אחרי ששולחים את התמונה ל-Cloud Healthcare API באמצעות הטרנספורמציה replaceWithInfoTypeConfig, התמונה נראית כך:

dicom_replacewithinfotypeconfig

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.
  3. אחרי שהסרת הפרטים המזהים מסתיימת בהצלחה, אפשר לאחזר את המטא-נתונים של המופע שבו הוסרו הפרטים המזהים כדי לראות איך הם השתנו. למכונה שעברה הסרת פרטים מזהים יש מזהה UID חדש של מחקרים, מזהה UID חדש של סדרות ומזהה UID חדש של מכונות, ולכן קודם צריך לחפש את המכונה שעברה הסרת פרטים מזהים במערך הנתונים החדש.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫SOURCE_DATASET_LOCATION: המיקום של מערך הנתונים של המקור
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    אתם אמורים לקבל תגובת JSON שדומה לזו:

  4. בעזרת הערכים החדשים, מאחזרים את המטא-נתונים של המכונה.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • ‫DESTINATION_DICOM_STORE_ID: המזהה של מאגר DICOM במערך נתוני היעד. המזהה הזה זהה למזהה של מאגר DICOM בקבוצת הנתונים של המקור.

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

    curl -X GET \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID/dicomWeb/studies/1.3.6.1.4.1.11129.5.1.201854290391432893460946240745559593763/series/1.3.6.1.4.1.11129.5.1.303327499491957026103380014864616068710/instances/1.3.6.1.4.1.11129.5.1.97415866390999888717168863957686758029/metadata"

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט מכיל את המטא-נתונים החדשים. אפשר להשוות את המטא-נתונים החדשים למטא-הנתונים המקוריים כדי לראות את ההשפעה של השינוי.

הסרת פרטים מזהים מנתונים ברמת מאגר DICOM

בדוגמאות הקודמות אפשר לראות איך לבטל את הזיהוי של נתוני DICOM ברמת מערך הנתונים. בקטע הזה מוסבר איך לבטל את זיהוי הנתונים ברמת מאגר DICOM.

כדי לשנות בקשה להסרת פרטים מזהים ממערך נתונים לבקשה להסרת פרטים מזהים ממאגר DICOM, מבצעים את השינויים הבאים:

  • משנים את הערך של destinationDataset בגוף הבקשה ל-destinationStore
  • הוספת dicomStores/DESTINATION_DICOM_STORE_ID בסוף הערך ב-destinationStore כשמציינים את היעד
  • הוספת dicomStores/SOURCE_DICOM_STORE_ID כשמציינים את המיקום של נתוני המקור

לדוגמה:

הסרת פרטים מזהים ברמת מערך הנתונים:

"destinationDataset": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID"
...
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID:deidentify"

הסרת פרטים מזהים ברמת מאגר DICOM:

"destinationStore": "projects/PROJECT_ID/locations/LOCATION/datasets/DESTINATION_DATASET_ID/dicomStores/DESTINATION_DICOM_STORE_ID"
...
"https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"

בדוגמאות הבאות מוסבר על שילוב של הסרת פרטים מזהים מתגים וטשטוש טקסט מוטבע, אבל הסרת הפרטים המזהים מתבצעת בחנות DICOM אחת והנתונים שהוסרו מהם הפרטים המזהים מועתקים לחנות DICOM חדשה. לפני שמריצים את הדוגמאות, מאגר ה-DICOM שאליו מתייחסת DESTINATION_DICOM_STORE_ID צריך כבר להתקיים.

המסוף

כדי להסיר את הפרטים המזהים מנתונים במאגר DICOM באמצעות מסוף Google Cloud , צריך לבצע את השלבים הבאים.

  1. נכנסים לדף Datasets במסוף Google Cloud .

    למעבר אל Datasets

  2. לוחצים על מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים.

  3. ברשימת מאגרי DICOM, בוחרים באפשרות הסרת פרטים מזהים מתוך הרשימה פעולות של מאגר DICOM שרוצים להסיר ממנו פרטים מזהים.

    מוצג הדף De-identify DICOM store (הסרת פרטים מזהים ממאגר DICOM).

  4. בוחרים באפשרות Set destination data store (הגדרת מאגר נתונים של היעד) ובוחרים את מערך הנתונים ואת מאגר DICOM שבהם יישמרו הנתונים שעברו הסרת פרטים מזהים.

  5. בוחרים באפשרות DICOM tag de-identification (הסרת פרטים מזהים מתג DICOM) כדי להגדיר איך המערכת תסיר את הפרטים המזהים מהנתונים. אפשר להסיר את הפרטים המזהים מהנתונים באופן הבא:

  6. בוחרים באפשרות DICOM burnt-in text redaction כדי להגדיר איך מתבצעת צנזורה של תמונות במהלך הסרת הפרטים המזהים. אפשר להגדיר את הצנזורה של תמונות באופן הבא:

  7. לוחצים על הסרת פרטים מזהים כדי להסיר את הפרטים המזהים מהנתונים במאגר DICOM.

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • SOURCE_DICOM_STORE_ID: המזהה של מאגר DICOM שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DICOM_STORE_ID: מזהה מאגר ה-DICOM במערך הנתונים של היעד

    תוכן בקשת JSON:

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

    כדי לשלוח את הבקשה עליכם לבחור אחת מהאפשרויות הבאות:

    curl

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

    curl -X POST \
    -H "Authorization: Bearer $(gcloud auth print-access-token)" \
    -H "Content-Type: application/json; charset=utf-8" \
    -d @request.json \
    "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify"

    PowerShell

    שומרים את גוף הבקשה בקובץ בשם request.json. כדי ליצור או להחליף את הקובץ הזה בספרייה הנוכחית, מריצים את הפקודה הבאה בטרמינל:

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

    לאחר מכן מבצעים את הפקודה הבאה כדי לשלוח את בקשת ה-REST:

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

    Invoke-WebRequest `
    -Method POST `
    -Headers $headers `
    -ContentType: "application/json; charset=utf-8" `
    -InFile request.json `
    -Uri "https://healthcare.googleapis.com/v1/projects/PROJECT_ID/locations/LOCATION/datasets/SOURCE_DATASET_ID/dicomStores/SOURCE_DICOM_STORE_ID:deidentify" | Select-Object -Expand Content
    הפלט שיתקבל: התשובה מכילה מזהה של פעולה ממושכת. פעולות ממושכות מוחזרות כשקריאות לשיטות עשויות להימשך זמן רב. שימו לב לערך של OPERATION_ID. תצטרכו את הערך הזה בשלב הבא.

  2. כדי לקבל את הסטטוס של הפעולה הממושכת, משתמשים בשיטה projects.locations.datasets.operations.get.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.

ביטול הזיהוי של תת-קבוצה במאגר DICOM

אפשר להסיר את הפרטים המזהים מקבוצת משנה של נתונים במאגר DICOM על ידי ציון מסנן.

המסנן הוא קובץ מסנן שמציינים כערך בשדה resourcePathsGcsUri באובייקט DicomFilterConfig. קובץ המסנן חייב להיות קיים בקטגוריה של 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.

לדוגמה, קובץ המסנן הבא. קובץ הסינון גורם להסרת פרטי הזיהוי ממחקר אחד, משתי סדרות ומ-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 כדי לראות את מזהי ה-UID של המחקר, הסדרה והמופע של נתוני ה-DICOM בחנות ה-DICOM. לאחר מכן תוכלו לבצע את הפעולות הבאות:

  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 כשמציינים את המסנן בפעולת הסרת הפרטים המזהים. בדוגמה הבאה מוצג איך להעלות קובץ מסנן לקטגוריה של Cloud Storage באמצעות הפקודה gcloud storage cp:

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

לדוגמה:

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

שימוש במסנן

אחרי שמגדירים את קובץ הסינון, אפשר להעביר אותו כערך לשדה resourcePathsGcsUri באובייקט filterConfig.

בדוגמה הבאה מוסבר על הסרת פרטים מזהים מנתונים ברמת מאגר DICOM, אבל מסופק קובץ מסנן ב-Cloud Storage שקובע אילו משאבי DICOM יוסרו מהם פרטים מזהים.

REST

  1. הסרת פרטי הזיהוי ממערך הנתונים.

    לפני שמשתמשים בנתוני הבקשה, צריך להחליף את הנתונים הבאים:

    • ‫PROJECT_ID: מזהה הפרויקט ב- Google Cloud
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫SOURCE_DATASET_ID: מזהה מערך הנתונים שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DATASET_ID: המזהה של מערך הנתונים של היעד שאליו נכתבים הנתונים שעברו הסרת פרטים מזהים
    • SOURCE_DICOM_STORE_ID: המזהה של מאגר DICOM שמכיל את הנתונים שרוצים להסיר מהם את הפרטים המזהים
    • ‫DESTINATION_DICOM_STORE_ID: מזהה מאגר ה-DICOM במערך הנתונים של היעד
    • ‫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
    • ‫DATASET_ID: מזהה קבוצת הנתונים
    • ‫LOCATION: המיקום של מערך הנתונים
    • ‫OPERATION_ID: המזהה שמוחזר מהפעולה הממושכת

    כדי לשלוח את הבקשה אתם צריכים לבחור אחת מהאפשרויות הבאות:

    curl

    מריצים את הפקודה הבאה:

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

    PowerShell

    מריצים את הפקודה הבאה:

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

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

    APIs Explorer

    פותחים את דף העזר של ה-method. החלונית של API Explorer תיפתח בצד שמאל של הדף. אפשר להשתמש בכלי הזה כדי לשלוח בקשות. ממלאים את כל שדות החובה ולוחצים על Execute.

    הפלט שיתקבל: כשהתשובה מכילה את הערך "done": true, סימן שהפעולה הממושכת הסתיימה.

פתרון בעיות בפעולות להסרת פרטי הזיהוי ב-DICOM

אם מתרחשות שגיאות במהלך פעולת הסרת פרטים מזהים ב-DICOM, השגיאות נרשמות ביומן ב-Cloud Logging. מידע נוסף זמין במאמר צפייה ביומני שגיאות ב-Cloud Logging.

אם כל הפעולה מחזירה שגיאה, אפשר לעיין במאמר בנושא פתרון בעיות בפעולות ארוכות טווח.