医学影像技术正在彻底改变医疗行业。研究人员正在训练深度学习模型,以便通过胸部X光片检测肺炎、通过超声心动图评估心脏功能、以及通过MRI扫描识别肿瘤。但在将这些影像数据共享给研究人员或用于训练机器学习模型之前,有一个关键问题必须得到解决。

我们该如何保护患者的隐私呢?

医学影像通常包含一些敏感信息,例如患者姓名、出生日期、医院标识码以及病例编号。其中部分信息会被存储在DICOM(医学数字成像与通信标准)元数据中,但还有大量信息直接嵌入到了图像像素中。

在本教程中,您将学习如何构建一个基于人工智能的去识别系统,该系统能够从元数据和图像像素中移除这些敏感信息。在学习过程中,我们还会探讨OCR(光学字符识别)、NER(命名实体识别)以及符合DICOM标准的图像处理方法。

最后,我会向您展示是如何将这些技术整合到一个名为Aegis的开源PyTorch项目中去的。

你将构建什么

在本教程中,你将构建一个自定义的MONAI(PyTorch)预处理流程,该流程能够在医学图像被用于临床研究或人工智能模型训练之前自动删除其中的个人信息。

这个流程将会完成以下操作:

  • 识别DICOM格式的医学影像文件

  • 加载元数据及像素数据

  • 使用OCR技术检测图像中隐藏的文字信息

  • 判断这些文字属于受保护的健康信息还是其他普通信息

  • 屏蔽包含敏感信息的像素区域

  • 从DICOM元数据和像素数据中删除所有受保护的健康信息

  • 生成经过处理、符合隐私保护要求的图像文件,以便后续的人工智能分析流程使用

完成这些步骤后,你将获得一个可重复使用的MONAI预处理工具,可以直接将其集成到任何医学影像处理流程中,从而为研究和深度学习任务准备出符合隐私保护要求的数据集。

先决条件

要跟随本教程进行学习,你需要满足以下条件:

  • 具备一定的Python编程经验

  • 对PyTorch有基本的了解

  • 熟悉医学影像相关的概念

  • 使用的是Python 3.10或更高版本

我们将在本教程中使用以下工具和库:

  • MONAI

  • pydicom

  • EasyOCR

  • NumPy

  • Transformers

  • Stanford NER

环境配置

# 创建并激活虚拟环境
python -m venv venv
source venv/bin/activate        # 在Windows系统中:venv\Scripts\activate

# 升级pip
pip install --upgrade pip

# 安装本教程中使用的核心库
pip install \
    monai \
    pydicom \
    easyocr \
    numpy \
    transformers \
    torch 

# 从Hugging Face下载Stanford医学信息去标识化模型
python -c "
from transformers import AutoTokenizer, AutoModelForTokenClassification

model_name = 'StanfordAIMI/stanford-deidentifier-base'
AutoTokenizer.from_pretrained(model_name)
AutoModelForTokenClassification.from_pretrained(model_name)
print('Stanford NER模型下载成功。')
"

为什么在医学影像领域保护隐私如此重要

医疗机构每天都会生成大量的医学影像数据。这些数据对于以下方面来说具有极高的价值:

  • 临床研究

  • 多中心合作项目

  • 监管机构的审核工作

  • 人工智能模型的开发

  • 教育用途的数据集构建

然而,像美国的HIPAA法案这样的隐私保护法规要求,在数据共享之前必须删除其中包含的受保护健康信息。这一规定无疑造成了巨大的障碍。

目前许多医院仍然依赖人工审查来检查数千张医学影像文件,试图找出隐藏在元数据或图像注释中的患者身份信息。这种处理方式不仅效率低下、成本高昂,而且也容易出现人为错误。

自动化去标识化技术通过结合软件工程、计算机视觉和自然语言处理技术来解决这一问题。

了解PHI、HIPAA和DICOM

什么是PHI?

受保护的健康信息(PHI)包括任何能够识别患者身份的信息,例如:

姓名
医疗记录编号
出生日期
检查日期
医院ID
访问编号

什么是HIPAA?

《健康保险流通与责任法案》(HIPAA)规定了保护患者数据的各项规则。其中一种常见的方法是“安全港机制”,该机制要求在数据共享之前删除其中的特定识别信息。

什么是DICOM?

诸如计算机断层扫描(CT)磁共振成像(MRI)超声检查之类的医学影像,通常都以DICOM格式进行存储。DICOM是用于存储和交换医学影像数据的国际标准。

与JPEG或PNG等普通图像格式不同,DICOM文件不仅包含图像本身,还包含了描述患者信息、检查过程以及成像方式的结构化元数据。

一个典型的DICOM文件由两个主要部分组成:

  1. 像素数据——即实际的医学影像,比如CT切片、MRI图像或超声帧。

  2. 元数据——这些结构化字段可能包含以下信息:

    • 患者姓名和医疗记录编号

    • 出生日期

    • 检查日期和数据采集时间

    • 成像方式(CT、MRI、超声等)

    • 扫描设备制造商及技术参数

正是这种结构设计使得DICOM不仅仅是一种图像格式,它更是一个标准化的数据容器,能够确保各种成像设备、医院信息系统以及研究软件能够可靠且一致地交换数据。

由于DICOM元数据中往往包含受保护的健康信息,而且在一些超声检查中,识别信息甚至会直接嵌入到图像像素中,因此在进行去标识化处理之前,必须同时处理这些元数据和像素数据,才能确保影像可以安全地用于临床研究或人工智能开发。

为什么在DICOM格式中仅进行元数据匿名化处理是不够的

许多工具只删除元数据中的PHI信息。例如,删除“PatientName”标签似乎就足够了。

但在超声检查、荧光透视以及某些X射线检查流程中,识别患者身份的信息往往会被直接嵌入到图像中。

常见的例子包括:

姓名:约翰·多伊  
出生日期:1980年1月1日  
医疗记录编号:123456  
就诊医院:ABC医院

如果这些注释仍然存在,隐私就会受到侵犯。因此,一个完整的解决方案必须同时检查以下两方面:

  • DICOM元数据

  • 图像像素数据

利用OCR和AI技术识别敏感信息

要检测嵌入在像素中的敏感信息,我们首先需要找到所有可见的文本。

步骤1:光学字符识别

OCR技术能够将图像中的文字转换成机器可识别的字符串。

import easyocr
reader = easyocr.Reader(['en'])
results = reader.readtext('ultrasound.png')

每个OCR处理结果通常包含以下内容:

  • 文本在图像中的位置信息

  • 被识别出的文字内容

  • 模型的识别准确度

例如:

[
  [[10, 20], [120, 20], [120, 45], [10, 45]], 'JOHN DOE', 0.98)
]

步骤2:判断文本是否属于敏感信息

并不是所有被检测到的文本都需要被删除。

医学图像中也会包含一些具有临床意义的标签,例如:

左心室  
顶端视图  
B模式

为了区分敏感信息与合法的临床文字,我们可以结合使用以下方法:

  1. 已知的临床术语列表

  2. 正则表达式匹配技术

  3. 命名实体识别技术

步骤3:命名实体识别

命名实体识别模型能够识别出诸如“人名”、“日期”和“地点”等实体。

def contains_phi(text): 
    if looks_like_date(text): 
        return True 
    if looks_like_identifier(text): 
        return True 
    return ner_model.predict(text) 

这种混合方法能够有效减少误报和漏报的情况。

像素遮盖与DICOM元数据清理

像素遮盖

一旦检测到敏感信息,就可以对这些区域进行遮盖处理。

image[y1:y2, x1:x2] = 0

这样就能用黑色像素替换掉这些敏感区域。

DICOM元数据清理

使用pydicom库,我们可以修改或删除DICOM元数据中的字段。

import pydicom

ds = pydicom.dcmread('study.dcm')
ds.PatientName = 'ANONYMIZED'
del dsPatientBirthDate

此外,还可能包含其他一些处理步骤……

  • 删除私有标签

  • 替换UUID值

  • 递归处理嵌套序列

元数据清洗与像素遮蔽相结合,能够实现全面的去标识化处理。

构建完整的处理流程

医疗图像去标识化的逐步处理流程:查找文件、加载DICOM元数据、运行OCR识别、判断文本是否属于敏感信息、遮蔽相关像素、清洗元数据,最后保存去标识化后的结果。

整个处理流程如下:

  1. 查找医疗图像文件

  2. 加载DICOM元数据及像素数据

  3. 对注释区域进行OCR识别

  4. 判断文本属于敏感信息还是非敏感信息

  5. 遮蔽包含敏感信息的像素区域

  6. 从元数据中删除敏感信息

  7. 保存去标识化后的结果

面临的挑战与总结的经验

构建一个可用于实际生产的去标识化系统,会遇到许多实际问题。

临床术语的问题

OCR识别系统可能会误将一些不应被删除的合法标签检测出来。

OCR识别的错误

对比度较低的文本或超声图像中的文字可能会导致识别结果不准确。

嵌套的DICOM数据结构

敏感信息可能隐藏在深度嵌套的元数据结构中。

多帧影像分析

超声检查的连续影像序列可能包含数十甚至数百帧图像。

确定性的伪名生成机制

研究人员通常需要确保同一患者在不同研究中使用相同的替代标识符。

这些挑战需要通过精心设计的解决方案来应对,而无法仅依靠单一的机器学习模型来解决。

我是如何构建Aegis的

在研究这个问题的过程中,我开发了一个基于PyTorch的开源项目——Aegis

Aegis结合了以下技术:

  • 基于OCR的文本识别功能

  • 人工智能驱动的敏感信息分类系统

  • 像素级别的数据遮蔽机制

  • 符合DICOM标准的去标识化处理流程

  • 适用于研究工作流的批量处理功能

关键的设计决策

以标准为准

我在进行元数据清洗时,严格遵循了DICOM标准的保密要求。

混合使用人工智能与规则机制

临床相关的白名单、启发式算法以及自然语言处理模型共同作用,提高了识别的准确性。

针对超声图像的优化措施

Aegis利用SequenceOfUltrasoundRegions这一结构,使OCR识别系统能够专注于注释区域,而无需扫描整个图像。

确定性的身份管理机制

统一的伪名标识方式既保证了研究的连续性,又有效保护了患者的隐私。

开源架构

该项目采用模块化设计,易于进行测试,并且能够与各种研究流程集成。

您可以在Aegis的GitHub仓库中查看其完整实现代码:

https://github.com/lakshmi-mahabaleshwara/aegis

未来发展方向

自动化去标识化技术仍在不断发展中。

未来的改进可能包括以下方面:

  • 多语言光学字符识别

  • 手写文字识别

  • 视觉语言模型

  • 人工审核机制

  • 云原生部署方案

  • 与人工智能训练流程的集成

随着医疗领域中人工智能技术的广泛应用,保护患者隐私的数据处理方式将变得愈发重要。

结论

临床研究离不开高质量医学影像数据的支持。

但根据相关法规,患者身份信息必须从DICOM元数据和图像像素中彻底移除。

通过结合光学字符识别、命名实体识别、像素遮蔽以及基于标准的DICOM处理技术,我们可以自动化完成这一任务,从而大幅减轻人工审核的工作负担。

本教程中介绍的各种技术不仅适用于单个项目,其应用范围其实更为广泛。

无论您是在构建医院数据处理流程、准备研究数据集,还是训练下一代医疗人工智能模型,自动化去标识化技术都是一项基础性工具。

为了将这些理念付诸实践,我开发了Aegis这一开源参考实现方案。

更重要的是,这些核心技术能够帮助开发人员和研究人员建立既安全又能促进创新的工作流程,同时充分保护患者的隐私权益。

参考文献

Comments are closed.