Python 中用于医疗 AI(尤其是医疗影像、电子病历、预测建模等)的常用库在 2026 年已经非常成熟,主要分为两大类:
- 医疗影像(Medical Imaging):处理 DICOM、NIfTI、3D/4D 体积数据、分割、分类、配准等
- 医疗数据/预测建模:处理结构化 EHR 数据、时间序列、代码预测、风险评分等
以下是 2025–2026 年最活跃、最被实际使用的库(按领域热度排序),附带真实案例和代码片段。
医疗影像领域 Top 库(2026 年主流)
| 排名 | 库名 | 主要用途 | 底层框架 | 活跃度 / 社区 | 典型场景(2026) | 学习曲线 |
|---|---|---|---|---|---|---|
| 1 | MONAI | 医疗影像深度学习全栈(预处理→模型→部署) | PyTorch | ★★★★★ | 3D/4D 分割、分类、自监督、Auto3DSeg | ★★★★☆ |
| 2 | TorchIO | 医疗图像加载、增强、patch采样 | PyTorch | ★★★★☆ | 数据增强、patch-based 训练 | ★★★☆☆ |
| 3 | SimpleITK | 图像配准、分割、滤波、格式转换 | ITK | ★★★★☆ | 经典图像处理、配准、非DL任务 | ★★★★☆ |
| 4 | pydicom | DICOM 文件读写、元数据操作 | 纯 Python | ★★★★☆ | DICOM 预处理、匿名化、标签提取 | ★★☆☆☆ |
| 5 | nibabel | NIfTI (.nii/.nii.gz) 读写 | 纯 Python | ★★★★☆ | 脑影像(MRI/fMRI)处理 | ★★☆☆☆ |
| 6 | MedPy | 经典医疗图像处理(滤波、度量) | NumPy/SciPy | ★★★☆☆ | 老项目迁移、简单分割度量 | ★★★☆☆ |
| 7 | PyRadiomics | 影像组学特征提取(radiomics) | SimpleITK | ★★★★☆ | 肿瘤预后、治疗响应预测 | ★★★★☆ |
医疗数据 / 预测建模领域主流库
| 库名 | 主要用途 | 典型任务 | 社区活跃度 |
|---|---|---|---|
| PyHealth | 医疗时间序列 + EHR 建模全流程 | 死亡/再入院/药物推荐/诊断预测 | ★★★★☆ |
| Hugging Face Transformers (biomed 模型) | 临床文本 / 生物医学 NLP | 临床笔记分类、实体识别、Med-PaLM-like | ★★★★★ |
| scikit-learn / XGBoost / LightGBM | 结构化数据预测(结合 PyHealth) | 风险评分、ICU 预测 | ★★★★★ |
真实案例 + 代码解析(2026 年视角)
案例 1:MONAI 做 3D 肝脏自动分割(最热门医疗 AI 任务之一)
# pip install monai torch torchvision
import monai
from monai.transforms import (
Compose, LoadImaged, AddChanneld, ScaleIntensityRanged,
CropForegroundd, RandCropByPosNegLabeld, RandAffined,
EnsureTyped, ToTensord
)
from monai.networks.nets import UNet
from monai.inferers import sliding_window_inference
from monai.data import CacheDataset, DataLoader
# 1. 数据变换(医疗专用增强)
train_transforms = Compose([
LoadImaged(keys=["image", "label"]), # 支持 DICOM / NIfTI
AddChanneld(keys=["image", "label"]),
ScaleIntensityRanged(keys=["image"], a_min=-100, a_max=250, b_min=0.0, b_max=1.0, clip=True),
CropForegroundd(keys=["image", "label"], source_key="image"),
RandCropByPosNegLabeld(
keys=["image", "label"],
label_key="label",
spatial_size=(96, 96, 96),
pos=1, neg=1, num_samples=4
),
RandAffined(keys=["image", "label"], prob=0.2, ...), # 旋转/缩放/平移
EnsureTyped(keys=["image", "label"]),
ToTensord(keys=["image", "label"]),
])
# 2. 数据集(支持 CacheDataset 加速)
train_ds = CacheDataset(data=train_files, transform=train_transforms)
train_loader = DataLoader(train_ds, batch_size=2, num_workers=4)
# 3. 模型(MONAI 提供大量预定义网络)
model = UNet(
spatial_dims=3,
in_channels=1,
out_channels=2, # liver + background
channels=(16, 32, 64, 128, 256),
strides=(2, 2, 2, 2),
).cuda()
# 4. 训练(可结合 Lightning / Ignite)
# ...
# 5. 推理(sliding window 大体积推理)
model.eval()
with torch.no_grad():
pred = sliding_window_inference(inputs=image, roi_size=(96,96,96), sw_batch_size=4, predictor=model)
为什么 MONAI 是 2026 年医疗影像首选?
- 内置大量医疗专用 transform(HU 窗、强度归一、patch 采样)
- 支持 DICOM → NIfTI 转换、MONAI Label(半自动标注)
- MONAI Deploy(临床级部署 MAP 格式)
- Auto3DSeg(零代码自动分割 pipeline)
案例 2:PyHealth 做 ICU 死亡率预测(EHR 时间序列)
# pip install pyhealth
from pyhealth.datasets import MIMIC3Dataset
from pyhealth.models import RETAIN
from pyhealth.trainer import Trainer
# 1. 加载 MIMIC-III(或 eICU、OMOP)
dataset = MIMIC3Dataset(
root="data/mimic-iii-1.4",
tables=["ADMISSIONS", "PATIENTS", "LABEVENTS", "CHARTEVENTS"],
code_vocabs={"LABEVENTS": "lab_code", "CHARTEVENTS": "chart_code"},
target="readmission", # 或 mortality, length_of_stay 等
)
# 2. 数据预处理(自动处理时间序列)
from pyhealth.tasks import readmission_prediction_mimic3
dataset = dataset.set_task(readmission_prediction_mimic3)
# 3. 选择模型(RETAIN / Transformer / CNN 等 30+ 种)
model = RETAIN(
dataset=dataset,
feature_keys=["conditions", "procedures", "labs", "meds"],
label_key="readmission",
mode="binary"
)
# 4. 训练 & 评估
trainer = Trainer(model=model, epochs=20, device="cuda")
trainer.train()
trainer.evaluate()
PyHealth 优势:
- 一站式:数据加载 → 任务定义 → 模型 → 评估指标(医疗专用如 AUPRC、F1@K)
- 支持 10+ 医疗任务(药物推荐、诊断预测、住院时长等)
案例 3:pydicom + SimpleITK 读取 & 处理 DICOM 系列
import pydicom
import SimpleITK as sitk
import numpy as np
# 读取单张 DICOM
ds = pydicom.dcmread("IM-0001-0001.dcm")
print(ds.PatientName, ds.Modality, ds.pixel_array.shape)
# 读取整个系列 → 3D 体积
reader = sitk.ImageSeriesReader()
dicom_names = reader.GetGDCMSeriesFileNames("dicom_folder/")
reader.SetFileNames(dicom_names)
image = reader.Execute()
# 转 numpy
array_3d = sitk.GetArrayFromImage(image) # shape: (slices, height, width)
小结:
- 医疗影像首选 MONAI + TorchIO + pydicom(深度学习)
- 经典处理用 SimpleITK + nibabel
- EHR / 预测建模首选 PyHealth
- 临床文本 / 生物医学 NLP 用 Hugging Face 的 Bio_ClinicalBERT / PubMedBERT 等
你现在最感兴趣的是哪个方向?
- 3D 器官分割(肝/肺/肿瘤)
- DICOM 预处理 pipeline
- EHR 预测模型(死亡/再入院)
- 影像组学(radiomics)特征提取
告诉我你的具体目标,我可以给你更精细的代码模板或完整 pipeline 示例~