简介:Weasis 是一款免费开源的医疗 DICOM 查看器,既可作为桌面应用运行于 Windows、Mac OS X 与 Linux,也能通过 weasis 协议在 Web 端访问,适用于医院、健康网络、多中心研究试验及患者个人医疗场景。它支持灵活集成到 HIS 或 PHR 系统,具备多国语言界面、服务端与客户端偏好配置、自定义插件 API,以及 DICOM 发送(storeSCU、STOW-RS)、查询检索(C-GET、C-MOVE、WADO-URI)与 DICOMWeb 等能力,还可嵌入 CD/DVD 等便携介质作为随身查看器。本资源为 zip 压缩包,整体约 2.54MB,包内文件总数与类型明细上游暂未提供,从标签看主要涉及 dicom-images、dicom-rt、dicom-pr 等医学影像与 Java 相关文件。目前已有 1089 人浏览学习,适合医学影像开发、PACS 集成及 Java 桌面/Web 应用方向的读者参考,可借此了解 Weasis 的构建分支(master 为 3.xx 需 Java 8+,旧分支 2.5.x/2.0.x/1.2.x 需 Java 6+)与整体功能架构。
1. 从一台阅片工作站说起:Weasis 到底解决了什么问题
影像科或临床科室的日常里,经常出现这样的场景:设备导出的 DICOM 文件散落在移动硬盘、PACS 导出目录或某个共享盘里,需要快速打开、比对、测量、导出,但手头只有一台普通办公电脑,装不了厂商那套笨重的专用工作站。这时候一个能直接跑在桌面、也能嵌进浏览器里的 DICOM 查看器就非常关键。Weasis 就是干这个的:它是一套基于 Java 的医学影像查看器,既能作为桌面应用独立运行,也能以 Web 应用的形式部署,支持 DICOM、DICOM RT、DICOM PR 等常见对象,还能做导出、测量、多序列布局。它适合影像科工程师、PACS 运维、医学影像软件开发者和需要做 DICOM 二次处理的从业者。下面我按“能干什么 → 怎么跑起来 → 怎么接自己的数据 → 坑在哪 → 怎么进阶”的顺序,把这份资源拆开讲清楚。
2. Weasis 的架构与运行方式:桌面端和 Web 端怎么选
2.1 为什么是 Java + OSGi,而不是一个单体程序
Weasis 的核心是一套基于 Java 的模块化框架,底层用 OSGi 做插件管理。这个选型直接决定了它的两个特性:第一,跨平台,Windows、Linux、macOS 上只要有合适的 JRE 就能跑;第二,功能可以按插件拆,比如 DICOM 解析、影像渲染、测量工具、导出模块都是独立 bundle,需要裁剪或扩展时不用动整个工程。常见做法是:桌面端直接下载带 JRE 的安装包,开箱即用;Web 端则用 JNLP 或 WebStart 方式把客户端拉起来,浏览器只负责启动和传参。这里要注意,Web 端并不是把影像渲染放在服务端,而是把查看器下发到本地执行,所以对客户端 Java 环境有要求。如果你只是临时看几个 DICOM 文件,桌面端最省事;如果要集成到自己的 Web 平台里,才需要研究 Web 启动参数和 URL 传参。
2.2 桌面端启动与基础配置
桌面端最直接的用法是下载对应平台的安装包,解压后运行启动脚本。以 Linux 为例,常见做法是给启动脚本加执行权限再运行:
# 进入解压后的目录 cd weasis-portable # 给启动脚本加执行权限 chmod +x weasis.sh # 启动,-Xmx 控制 JVM 最大堆,影像多时建议调大 ./weasis.sh -Xmx2048m逻辑说明:weasis.sh是官方便携包里的启动入口,内部会拼 JVM 参数并加载 OSGi 框架。参数说明:-Xmx2048m把最大堆设到 2GB,处理多序列或大尺寸 CT/MR 时能减少频繁 GC 导致的卡顿;如果机器内存小,可以降到 1024m,但打开多序列会明显变慢。Windows 下对应的是weasis.exe或weasis.bat,配置方式类似。启动后第一件事是进偏好设置,把 DICOM 节点、缓存目录和默认布局调好,否则每次打开都要重新拖布局。
2.3 Web 端部署与 URL 传参
Web 端的典型做法是把 Weasis 的 Web 包部署到自己的 HTTP 服务下,然后通过 URL 把要打开的检查或文件传进去。常见参数包括$dicom:get指定 DICOM 来源,$dicom:close控制关闭行为。下面是一个示意性的启动 URL 结构:
# 假设 Web 包部署在 /weasis 下 # 通过 URL 传入一个 DICOM 文件地址 http://your-host/weasis/weasis.html?$dicom:get=http://your-pacs/wado?requestType=WADO&studyUID=1.2.3&seriesUID=4.5.6逻辑说明:浏览器打开这个地址后,Weasis 的 Web 启动器会解析$dicom:get后面的地址,向 PACS 发起 WADO 请求拉取影像。参数说明:studyUID和seriesUID是 DICOM 唯一标识,必须和 PACS 里的实际值一致;requestType=WADO表示走 DICOM Web 的 WADO 接口。这里最容易翻车的是跨域和认证:如果 PACS 和 Weasis 不在同一个域,浏览器会拦请求,需要在服务端配 CORS 或改用同源代理。另外,Web 端依赖客户端 Java,如果终端没装或版本不对,页面只会白屏,不会给太明确的提示。
3. 接入自己的 DICOM 数据:从本地目录到 PACS 查询
3.1 本地 DICOM 目录的导入与索引
Weasis 支持直接打开本地文件夹或单个 DICOM 文件。常见做法是先把文件按检查/序列整理好,再用“导入”功能指向目录。它内部会解析 DICOM 标签,按 StudyInstanceUID、SeriesInstanceUID 分组,然后生成缩略图和序列列表。这里有个细节:如果目录里混了非 DICOM 文件,导入过程会跳过并记日志,不会直接崩,但日志里会有一堆警告,别被吓到。对于 DICOM RT 和 DICOM PR 这类对象,Weasis 也能识别,但前提是标签完整,尤其是 RT 的 ROI 和 PR 的图形注释,缺标签就会显示为空。
3.2 配置 DICOM 节点做查询检索
如果要连 PACS,需要在偏好设置里加 DICOM 节点。关键参数如下表:
| 参数 | 说明 | 常见取值 |
|---|---|---|
| AE Title | 本地 AE 名称 | WEASIS |
| Host | PACS 地址 | 10.0.0.10 |
| Port | DICOM 端口 | 104 或 11112 |
| Query/Retrieve | 是否启用查询检索 | 勾选 |
| Transfer Syntax | 传输语法 | 默认即可,特殊压缩需额外插件 |
配置完后,在查询面板里按患者 ID、检查日期或模态检索,找到检查后直接拉取。逻辑上走的是 DICOM C-FIND 和 C-MOVE,所以 PACS 端要允许你的 AE Title 发起请求。参数说明:AE Title 必须和 PACS 白名单里登记的一致,否则会被拒绝;端口别填成 Web 端口,DICOM 和 HTTP 是两套。如果检索能出结果但拉取失败,多半是 C-MOVE 的目标 AE 没配对,需要检查 PACS 那边的配置。
3.3 导出 DICOM 与格式转换
Weasis 的导出功能支持把当前序列导出为 DICOM 文件,也支持导出图像为常见格式。常见做法是:选中序列,右键导出,选择目标目录和格式。导出 DICOM 时会保留原始标签,但如果你做过测量或注释,这些会作为 DICOM PR 对象单独导出,不会直接烧进像素。参数上要注意:导出图像时可以选择是否包含测量标注,如果用于科研或汇报,建议保留标注层;如果只是做插图,可以只导像素。导出路径不要选在正在被 PACS 同步的目录里,否则可能触发重复入库。
4. 避坑与排查:那些让我返工过的细节
4.1 启动报 Java 版本不兼容
现象:双击启动脚本后闪退,日志里出现 UnsupportedClassVersionError。原因:Weasis 的不同版本对 JRE 有最低要求,系统里默认的 Java 太旧。解决:先java -version确认版本,然后要么升级系统 Java,要么在启动脚本里显式指定JAVA_HOME指向新版 JRE。我一般会在脚本开头加一行export JAVA_HOME=/path/to/jre,避免依赖系统默认。
4.2 Web 端打开白屏或一直转圈
现象:浏览器访问 Weasis Web 地址后页面空白,或者卡在加载界面。原因:客户端没有 Java 运行环境,或者浏览器禁用了相关插件机制。解决:先确认终端能跑桌面版;如果桌面版正常,再检查浏览器设置。另外,Web 启动器对 URL 参数很敏感,参数拼错不会报错,只会静默失败,建议先用最简单的$dicom:get指向一个本地文件测试。
4.3 DICOM 文件能导入但显示花屏或全黑
现象:序列列表里有图像,但预览是黑的或者颜色异常。原因:多半是传输语法或像素数据编码不被当前插件支持,比如某些压缩格式需要额外的解码器。解决:先用其他工具确认文件本身没问题,然后在 Weasis 里看日志,通常会提示不支持的 Transfer Syntax。常见做法是装对应的解码插件,或者让 PACS 以未压缩格式重发。
4.4 测量数据导出后丢失
现象:在 Weasis 里画的 ROI 和测量值,导出后在新环境打开不见了。原因:测量和注释默认存为 DICOM PR 对象,如果导出时只选了图像序列,PR 对象没被一起导出。解决:导出时勾选包含注释和测量,或者单独导出 PR 序列。另外,有些查看器不识别 PR,需要确认目标环境支持。
4.5 多序列布局每次都要重拖
现象:每次打开新检查,布局都回到默认,之前调好的 2x2 或 1x3 没了。原因:布局配置没有保存为默认,或者缓存被清。解决:在偏好设置里把当前布局设为默认,并确认缓存目录可写。如果是在 Web 端,布局可能跟会话绑定,需要检查启动参数里有没有传布局配置。
5. 进阶用法:把 Weasis 嵌进自己的流程里
5.1 用命令行参数做批量打开
Weasis 支持通过命令行直接传入 DICOM 文件或目录,适合做批量检查。比如:
# 直接打开指定目录下的所有 DICOM ./weasis.sh -Xmx2048m /data/dicom/study_001 # 同时打开多个目录 ./weasis.sh /data/dicom/study_001 /data/dicom/study_002逻辑说明:启动脚本会把路径参数传给 Weasis 的导入模块,自动扫描并分组。参数说明:路径可以是文件或目录,多个路径用空格隔开;如果路径里有空格,记得加引号。这个用法在写自动化脚本时很有用,比如从 PACS 拉完检查后直接调 Weasis 打开。
5.2 自定义插件与扩展点
Weasis 的 OSGi 架构允许你写自己的 bundle 来扩展功能,比如加一个自定义的测量工具或导出格式。常见做法是参考官方插件工程,实现对应的接口,然后打包成 bundle 放进 plugins 目录。这里要注意版本匹配:Weasis 主版本升级时,插件接口可能变,旧插件不一定能直接用。我一般会先在测试环境验证,再推到生产。
5.3 验证部署是否成功的几个检查点
| 检查项 | 方法 | 预期结果 |
|---|---|---|
| 桌面端启动 | 运行启动脚本 | 出现主界面,无报错 |
| 本地导入 | 打开一个 DICOM 目录 | 序列列表和预览正常 |
| PACS 查询 | 配置节点后检索 | 能查到检查并拉取 |
| Web 启动 | 浏览器访问 Web 地址 | 查看器加载,能打开指定检查 |
| 导出 | 导出序列和 PR | 目标目录有文件,标签完整 |
这些检查点走一遍,基本能覆盖大部分部署问题。如果某一步失败,先看日志,Weasis 的日志通常在用户目录下的.weasis文件夹里,里面会记录详细的错误堆栈。
5.4 一个我常犯的错误
早期我总以为 Web 端就是把桌面端搬到浏览器里,后来才发现它其实是把客户端下发到本地执行,所以客户端的 Java 环境、缓存目录、权限都会影响体验。从那以后我每次部署 Web 端,都会先在一台干净终端上跑一遍桌面版,确认 Java 没问题,再去看 Web 启动参数。希望帮到你。
本文还有配套的精品资源,点击获取