1 Star 0 Fork 31

随风嵌入夜/DicomSCP

forked from fightroad/DicomSCP 
加入 Gitee
与超过 1200万 开发者一起发现、参与优秀开源项目,私有仓库也完全免费 :)
免费加入
克隆/下载
贡献代码
同步代码
取消
提示: 由于 Git 不支持空文件夾,创建文件夹后会生成空的 .keep 文件
Loading...
README
MIT

DICOM 管理系统

携手Cursor重磅发布,打造中文开源社区最完善轻量PACS系统,医学影像必备DICOM工具箱!

  • 基于 .NET Core 的 DICOM SCP(Service Class Provider)服务器,提供 DICOM 存储、工作列表、查询检索服务,打印服务,WADO/DicomWeb服务,集成了功能强大的DICOM 桌面和Web查看器。

  • 项目支持跨平台,windows直接下载发布版本运行,linux直接使用Docker部署 。 weasis查看影像需要客户端电脑安装了才能调用。

  • 推荐使用 Docker部署 推送会自动更新镜像。其他版本可以自行拉取dev分支构建,发行版不定期发布。

  • 项目用爱发电,作者多年医学影像从业者,旨在为中文医学影像圈贡献点力量。不限制使用,但请遵守MIT许可证

  • 项目Gitee仓库

  • 项目GitHub仓库

支持项目

如果这个项目对您有帮助,欢迎赞助支持我们继续改进!

微信赞助
微信赞助
支付宝赞助
支付宝赞助

您的每一份支持都将帮助我们:

  • 🚀 开发新功能
  • 🐛 修复已知问题
  • 📚 完善项目文档
  • 🎨 优化用户体验

赞助时请备注您的 Gitee/GitHub ID,我们会将您添加到赞助者名单中。

功能预览

登录 影像管理 weasis预览 3d预览 OHIF预览 序列预览 工作列表
查询检索 发送图像
打印
胶片
配置 日志 监控 swagger

功能特性

  • 存储服务 (C-STORE SCP)

    • 按照4个级别的标签入库和归档
    • 按照级别标签自动组织存储目录结构
    • 支持 JPEG、JPEG2000、JPEG-LS、RLE 等压缩
    • 对不标准的字符集中文字符进行乱码处理
  • 工作列表服务 (Worklist SCP)

    • 提供标准 DICOM Modality Worklist 服务
    • 支持多种查询条件(患者ID、检查号、日期等)
    • 支持请求字符集协商自动中英文转换
  • 查询检索服务 (QR SCP)

    • 提供 C-FIND、C-MOVE、C-GET 服务
    • 可配置多个目标节点
    • 支持多种查询级别(Study/Series/Image)
    • 支持JPEG、JPEG2000、JPEG-LS、RLE 传输语法实时转码
  • 打印服务 (Print SCP)

    • 打印任务队列管理
    • 支持多种打印格式
    • 打印任务状态跟踪
    • 归档打印的原始文件和标签
  • WADOURI 服务 (Web Access to DICOM Objects)

    • 必需参数

      • requestType: 必须为 "WADO"
      • studyUID: 研究实例 UID
      • seriesUID: 序列实例 UID
      • objectUID: 实例 UID
    • 可选参数

      • contentType: 返回内容类型 不传默认 image/jpeg

        • application/dicom: 返回 DICOM 格式
        • image/jpeg: 返回 JPEG 格式
      • transferSyntax: DICOM 传输语法 UID 不传默认不转码

        • 1.2.840.10008.1.2: Implicit VR Little Endian
        • 1.2.840.10008.1.2.1: Explicit VR Little Endian
        • 1.2.840.10008.1.2.4.50: JPEG Baseline
        • 1.2.840.10008.1.2.4.57: JPEG Lossless
        • 1.2.840.10008.1.2.4.70: JPEG Lossless SV1
        • 1.2.840.10008.1.2.4.90: JPEG 2000 Lossless
        • 1.2.840.10008.1.2.4.91: JPEG 2000 Lossy
        • 1.2.840.10008.1.2.4.80: JPEG-LS Lossless
        • 1.2.840.10008.1.2.5: RLE Lossless
      • anonymize: 是否匿名化

        • yes: 执行匿名化处理
        • 其他值或不传: 不进行匿名化
    • 完整请求参数例子

      http://localhost:5000/wado?requestType=WADO&studyUID=1.2.840.113704.1.111.5096.1719875982.1&seriesUID=1.3.46.670589.33.1.13252761201319485513.2557156297609063016&objectUID=1.3.46.670589.33.1.39304787935332940.2231985654917411587&contentType=application/dicom&transferSyntax=1.2.840.10008.1.2.4.70&anonymize=yes
      
  • CSTORE-SCU (CSTORE-SCU)

    • 支持发送DICOM图像到DICOM SCP
    • 可配置多个目标节点
  • Print-SCU (Print-SCU)

    • 支持将PRINTSCP接收到的图像打印到其他打印机或PRINTSCP服务
    • 构建打印图像会保留原始图像的标签信息
  • Log Service (日志服务)

    • 支持查看、下载、删除日志
    • 个服务日志独立配置
    • 多日志级别配置
    • 服务预置详细日志 方便对接查找问题
  • WADO-RS 服务 (Web Access to DICOM Objects - RESTful Services)

    • 实例检索 (Instance Retrieval)

      GET /dicomweb/studies/{studyUID}
      GET /dicomweb/studies/{studyUID}/series/{seriesUID}
      GET /dicomweb/studies/{studyUID}/series/{seriesUID}/instances/{instanceUID}
      
      • 支持原始 DICOM 格式检索
      • 支持传输语法转换
      • 支持 multipart/related 响应
      • 支持 Accept 头指定返回格式
      • 支持检查/序列/实例三个级别的检索
      • 支持 transfer-syntax 参数指定传输语法
    • 元数据检索 (Metadata Retrieval)

      GET /dicomweb/studies/{studyUID}/series/{seriesUID}/metadata
      
      • 返回 DICOM JSON 格式
      • 包含完整的 DICOM 标签信息
      • 支持 VR 和 Value 的标准格式
      • 符合 DICOMweb 规范的空值处理
    • 帧检索 (Frame Retrieval)

      GET /dicomweb/studies/{studyUID}/series/{seriesUID}/instances/{instanceUID}/frames/{frames}
      
      • 支持单帧/多帧提取
      • 保持原始像素数据
      • 支持传输语法转换
    • 缩略图服务 (Thumbnail)

      GET /dicomweb/studies/{studyUID}/series/{seriesUID}/thumbnail?size={size}
      GET /dicomweb/studies/{studyUID}/series/{seriesUID}/thumbnail?viewport={viewport}
      
      • 支持自定义尺寸
        • size: 指定输出图像大小(可选,默认 128)
        • viewport: 指定视口大小(可选,与 size 参数互斥)
      • 保持图像宽高比
      • JPEG 格式输出
      • 示例:
        /dicomweb/studies/1.2.3/series/4.5.6/thumbnail?size=256
        /dicomweb/studies/1.2.3/series/4.5.6/thumbnail?viewport=512
        
  • QIDO-RS 服务 (Query based on ID for DICOM Objects - RESTful Services)

    • 研究级查询 (Study Level Query)

      # DICOMweb 标准格式
      GET /dicomweb/studies?00100020={patientID}&00100010={patientName}&00080020={date}&00200010={accessionNumber}&0020000D={studyUID}&00080060={modality}&offset={offset}&limit={limit}&fuzzy=true
      
      # 友好格式(兼容)
      GET /dicomweb/studies?PatientID={patientID}&PatientName={patientName}&StudyDate={date}&AccessionNumber={accessionNumber}&StudyInstanceUID={studyUID}&Modality={modality}&offset={offset}&limit={limit}&fuzzy=true
      
      • 支持多种查询参数:
        • 标准 DICOM 标签格式:
          • 00100020: 患者 ID
          • 00100010: 患者姓名
          • 00080020: 检查日期
          • 00200010: 检查号
          • 0020000D: 检查实例 UID
          • 00080060: 检查类型/模态
        • 友好格式(等效):
          • PatientID: 精确匹配或模糊匹配 (例如: "P123*" 匹配所有以 P123 开头的ID)
          • PatientName: 支持通配符 (例如: "" 匹配包含"张"的姓名)
          • StudyDate: 支持日期范围 (例如: "20240101-20240131" 表示1月份的数据)
          • AccessionNumber: 检查号匹配
          • StudyInstanceUID: 检查实例 UID 精确匹配
          • Modality: 检查类型/模态 (例如: "CT" 或 "CT\MR" 支持多值)
          • fuzzy: 设置为 true 时启用模糊匹配
      • 支持分页功能(offset/limit)
      • 支持模糊匹配
      • 返回符合 DICOMweb 标准的 JSON 格式
    • 序列级查询 (Series Level Query)

      GET /dicomweb/studies/{studyUID}/series?SeriesInstanceUID={seriesUID}&Modality={modality}
      
      • 支持序列 UID 过滤
      • 支持模态过滤 (例如: "CT*" 匹配所有 CT 相关模态)
      • 返回序列详细信息
      • 符合 DICOMweb JSON 格式规范
    • 实例级查询 (Instance Level Query)

      GET /dicomweb/studies/{studyUID}/series/{seriesUID}/instances?SOPInstanceUID={instanceUID}
      
      • 支持 SOP 实例 UID 过滤
      • 返回实例详细信息
      • 包含图像参数信息

系统要求

  • Windows 10/11 或 Windows Server 2016+
  • .NET 8.0 或更高版本
  • SQLite 3.x
  • 4GB+ RAM
  • 10GB+ 可用磁盘空间
  • 现代浏览器(Chrome/Firefox/Edge)

快速开始

  1. 下载最新发布版本
  2. 修改 appsettings.json 配置文件
  3. 运行 DicomSCP.exe
  4. 访问 http://localhost:5000
  5. 默认账号 admin / admin

Docker部署

appsettings.json需要先在宿主机目录下创建好!

docker run -d --name DicomSCP --restart unless-stopped \
  -p 5000:5000 \
  -p 11112-11115:11112-11115 \
  -v /opt/docker/dicomscp/keys:/root/.aspnet/DataProtection-Keys \
  -v /opt/docker/dicomscp/logs:/app/logs \
  -v /opt/docker/dicomscp/received_files:/app/received_files \
  -v /opt/docker/dicomscp/temp_files:/app/temp_files \
  -v /opt/docker/dicomscp/appsettings.json:/app/appsettings.json \
  -v /opt/docker/dicomscp/db:/app/db \
  fightroad/dicomscp:latest

Nginx反向代理

proxy_pass http://127.0.0.1:5000;
proxy_set_header Host $host:$server_port;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header REMOTE-HOST $remote_addr;
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "Upgrade";
proxy_http_version 1.1;

技术栈

  • 后端框架:.NET Core
  • 前端框架:原生 JavaScript
  • DICOM 处理:fo-dicom、Cornerstone.js
  • 数据库:SQLite
  • HTTP 客户端:Axios
  • UI 组件:Bootstrap

使用的开源项目

本项目使用了以下优秀的开源项目:

后端

前端

感谢这些优秀的开源项目,让本项目得以实现!

赞助者

感谢以下赞助者的支持(排名不分先后):

  • 平凡之路
  • QQ名:生活
  • GITEE名:mmkangaroo

参与贡献

我们非常欢迎您的贡献!如果您有任何想法或建议:

  1. Fork 本仓库
  2. 创建您的特性分支
  3. 提交您的更改
  4. 推送到分支
  5. 打开一个 Pull Request

您也可以通过以下方式参与:

  • 提交 Bug 报告
  • 提出新功能建议
  • 改进文档
  • 分享使用经验

每一份贡献都将受到重视和感谢!

许可证

MIT License

MIT License Copyright (c) 2024 平凡之路 Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the "Software"), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions: The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software. THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

简介

打造中文开源社区最完善轻量PACS系统,医学影像必备DICOM工具箱! 展开 收起
C#
MIT
取消

发行版

暂无发行版

贡献者

全部

近期动态

不能加载更多了
马建仓 AI 助手
尝试更多
代码解读
代码找茬
代码优化
C#
1
https://gitee.com/NIP-f0rest/DicomSCP.git
git@gitee.com:NIP-f0rest/DicomSCP.git
NIP-f0rest
DicomSCP
DicomSCP
master

搜索帮助