mirror of
https://github.com/data-privacy-stack/presidio.git
synced 2026-10-01 10:28:05 -05:00
1.0 MiB
1.0 MiB
In [ ]:
!pip install presidio_analyzer presidio_anonymizer presidio_image_redactor
!python -m spacy download en_core_web_lgIn [1]:
import glob
from pathlib import Path
import matplotlib.pyplot as plt
import pydicom
from presidio_image_redactor import DicomImageRedactorEngineIn [2]:
def compare_dicom_images(
instance_original: pydicom.dataset.FileDataset,
instance_redacted: pydicom.dataset.FileDataset,
figsize: tuple = (11, 11)
) -> None:
"""Display the DICOM pixel arrays of both original and redacted as images.
Args:
instance_original (pydicom.dataset.FileDataset): A single DICOM instance (with text PHI).
instance_redacted (pydicom.dataset.FileDataset): A single DICOM instance (redacted PHI).
figsize (tuple): Figure size in inches (width, height).
"""
_, ax = plt.subplots(1, 2, figsize=figsize)
ax[0].imshow(instance_original.pixel_array, cmap="gray")
ax[0].set_title('Original')
ax[1].imshow(instance_redacted.pixel_array, cmap="gray")
ax[1].set_title('Redacted')In [3]:
engine = DicomImageRedactorEngine()In [4]:
# Load in and process your DICOM file as needed
dicom_instance = pydicom.dcmread('sample_data/0_ORIGINAL.dcm')In [5]:
# Redact
redacted_dicom_instance = engine.redact(dicom_instance, fill="contrast")In [6]:
compare_dicom_images(dicom_instance, redacted_dicom_instance)In [7]:
redacted_dicom_instance_2 = engine.redact(dicom_instance, fill="background")
compare_dicom_images(dicom_instance, redacted_dicom_instance_2)In [8]:
redacted_dicom_instance = engine.redact(dicom_instance, use_metadata=False) # default is use_metadata=True
compare_dicom_images(dicom_instance, redacted_dicom_instance)In [9]:
redacted_dicom_instance, bbox = engine.redact_and_return_bbox(dicom_instance)
compare_dicom_images(dicom_instance, redacted_dicom_instance)
print(f"Number of redacted regions: {len(bbox)}")
print(bbox)Number of redacted regions: 4
[{'top': 0, 'left': 0, 'width': 241, 'height': 37}, {'top': 0, 'left': 262, 'width': 230, 'height': 36}, {'top': 1, 'left': 588, 'width': 226, 'height': 35}, {'top': 47, 'left': 145, 'width': 218, 'height': 35}]
In [10]:
# Single DICOM (.dcm) file or directory containing DICOM files
input_path = 'sample_data/'
# Directory where the output will be written
output_parent_dir = 'output/'In [11]:
# Redact text PHI from DICOM images
engine.redact_from_directory(
input_dicom_path = input_path,
output_dir = output_parent_dir,
fill="contrast",
save_bboxes=True # if True, saves the redacted region bounding box info to .json files in the output dir
)Output written to output\sample_data
In [12]:
# Original DICOM images
p = Path(input_path).glob("**/*.dcm")
original_files = [x for x in p if x.is_file()]
# Redacted DICOM images
p = Path(output_parent_dir).glob("**/*.dcm")
redacted_files = [x for x in p if x.is_file()]In [13]:
for i in range(0, len(original_files)):
original_file = pydicom.dcmread(original_files[i])
redacted_file = pydicom.dcmread(redacted_files[i])
compare_dicom_images(original_file, redacted_file)