Gradio 案例——将 dicom 文件转为 nii文件

文章目录

  • Gradio 案例——将 dicom 文件转为 nii文件
    • 界面截图
    • 依赖安装
    • 项目目录结构
    • 代码

Gradio 案例——将 dicom 文件转为 nii文件

  • 利用 SimpleITK 库,将 dicom 文件转为 nii文件
  • 更完整、丰富的示例项目见 GitHub - AlionSSS/dcm2niix-webui: The web UI for dcm2niix (DICOM to NIfTI converter)

界面截图

image.png

依赖安装

  • 新建一个虚拟环境 Python 3.9.16
  • 依赖
    • $ pip install gradio==4.29 -i "https://pypi.doubanio.com/simple/"
    • $ pip install SimpleITK==2.3.1 -i "https://pypi.doubanio.com/simple/"

项目目录结构

dicom2nii-webui       # 目录
--/lib_SimpleITK.py   # py文件
--/main.py            # py文件,入口

代码

  • lib_SimpleITK.py
import SimpleITK as sitk
import osdef dicom_to_nii(dicom_dir_path: str, nii_file_path: str):"""dicom文件转nii文件"""# 读取 dicomreader = sitk.ImageSeriesReader()img_name = reader.GetGDCMSeriesFileNames(dicom_dir_path)reader.SetFileNames(img_name)image = reader.Execute()# 转为 nii.gzimage_array = sitk.GetArrayFromImage(image)image_out = sitk.GetImageFromArray(image_array)image_out.SetOrigin(image.GetOrigin())image_out.SetSpacing(image.GetSpacing())image_out.SetDirection(image.GetDirection())# 保存nii.gz文件到配置的目录下example_nii_dir_path = os.path.dirname(nii_file_path)if not os.path.exists(example_nii_dir_path) or not os.path.isdir(example_nii_dir_path):os.mkdir(example_nii_dir_path)sitk.WriteImage(image, nii_file_path)
  • main.py
import gradio as gr
import os
import zipfile
import lib_SimpleITKexample_dicom_dir_path = 'D:/project/xxx/Task/ABC_Test_02/xxx'
example_nii_file_path = 'D:/project/res/result_image.nii.gz'def service_local_dicom_to_nii(dicom_dir_path: str, nii_file_path: str):# 校验if not dicom_dir_path or dicom_dir_path.strip() == "":gr.Warning(f"请填入[dicom文件目录路径],例如'{example_dicom_dir_path}'")returnif not nii_file_path or nii_file_path.strip() == "":nii_file_path = os.path.join(dicom_dir_path, "result_image.nii.gz")try:lib_SimpleITK.dicom_to_nii(os.path.abspath(dicom_dir_path), os.path.abspath(nii_file_path))except Exception as e:raise gr.Error("dicom 转 nii 时,发生异常:" + str(e))return nii_file_path, nii_file_path local_iface = gr.Interface(fn=service_local_dicom_to_nii,inputs=[gr.Textbox(label="dicom文件目录路径", info=f"例如'{example_dicom_dir_path}'"),gr.Textbox(label="生成的nii文件路径", info=f"例如'{example_nii_file_path}'。如果不填,会输出到dicom目录下。")],outputs=[gr.Textbox(label="生成的nii文件路径"), gr.File(label="生成的nii文件")],description="在本地电脑端启动时使用。利用 SimpleITK 库,将 dicom 文件转为 nii文件。",
)def unzip_file(zip_file_path: str, save_dir_path: str):with zipfile.ZipFile(zip_file_path, "r") as zfile:# 中文有乱码问题zfile.extractall(save_dir_path)def service_server_dicom_to_nii(file):# 解压save_dir_path = os.path.dirname(file.name)print(save_dir_path)unzip_file(file.name, save_dir_path)# dicom 转 niidicom_dir_path = save_dir_pathnii_file_path = os.path.join(save_dir_path, "result_image.nii.gz") try:lib_SimpleITK.dicom_to_nii(dicom_dir_path, nii_file_path)except Exception as e:raise gr.Error("dicom 转 nii 时,发生异常:" + str(e))# return nii_file_path, nii_file_pathreturn file.name, file.name server_iface = gr.Interface(fn=service_server_dicom_to_nii,inputs=[gr.File(label="dicom文件目录的压缩包(建议不要带中文)")],outputs=[gr.Textbox(label="生成的nii文件路径"), gr.File(label="生成的nii文件")],description="在服务器端启动时使用。利用 SimpleITK 库,将 dicom 文件转为 nii文件。",
)tabbed_interface = gr.TabbedInterface(interface_list = [local_iface, server_iface], tab_names = ["本地端", "通用端"],title="dicom 转 nii"
)
tabbed_interface.launch()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/704898.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

谷歌全力反击 OpenAI:Google I/O 2024 揭晓 AI 新篇章,一场激动人心的技术盛宴

🚀 谷歌全力反击 OpenAI:Google I/O 2024 揭晓 AI 新篇章,一场激动人心的技术盛宴! 在这个人工智能的全新时代,只有谷歌能让你眼前一亮!来自全球瞩目的 Google I/O 2024 开发者大会,谷歌用一场…

C++学习一(主要对cin的理解)

#include<iostream> int main() {int sum 0, value 0;//读取数据直到遇到文件尾&#xff0c;计算所有读入的值的和while (std::cin >> value){ //等价于sumsumvaluesum value;}std::cout << "Sum is :" << sum << std::endl;sum …

基于Springboot的学生心理压力咨询评判(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的学生心理压力咨询评判&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系…

[链表专题]力扣141, 142

1. 力扣141 : 环形链表 题 : 给你一个链表的头节点 head &#xff0c;判断链表中是否有环。 如果链表中有某个节点&#xff0c;可以通过连续跟踪 next 指针再次到达&#xff0c;则链表中存在环。 为了表示给定链表中的环&#xff0c;评测系统内部使用整数 pos 来表示链表尾…

SPI通信(使用SPI读写W25Q64)

SPI通信协议 • SPI&#xff08;Serial Peripheral Interface&#xff09;是由Motorola公司开发的一种通用数据总线 • 四根通信线&#xff1a; SCLK:串行时钟线&#xff0c;用来提供时钟信号的。 MOSI:主机输出&#xff0c;从机输入 MISO:从机输出&#xff0c;主机输入 SS:…

音乐的力量

常听音乐的好处可以让人消除工作紧张、减轻生活压力、避免各类慢性疾病等等&#xff0c;其实这些都是有医学根据的。‍ 在医学研究中发现&#xff0c;经常的接触音乐节 奏、旋律会对人体的脑波、心跳、肠胃蠕动、神经感应等等&#xff0c;产生某些作用&#xff0c;进而促进身心…

【前端】CSS基础(4)

文章目录 前言1、CSS常用属性1.1 文本属性1.1.1 文本对齐1.1.2 文本装饰1.1.3 文本缩进1.1.5 行高 前言 这篇博客仅仅是对CSS的基本结构进行了一些说明&#xff0c;关于CSS的更多讲解以及HTML、Javascript部分的讲解可以关注一下下面的专栏&#xff0c;会持续更新的。 链接&…

计网面试干货---带你梳理常考的面试题

顾得泉&#xff1a;个人主页 个人专栏&#xff1a;《Linux操作系统》 《C从入门到精通》 《LeedCode刷题》 键盘敲烂&#xff0c;年薪百万&#xff01; 一、HTTP和HTTPS的区别 1.安全性&#xff1a;HTTPS通过SSL/TLS协议对数据进行加密处理&#xff0c;有效防止数据在传输过…

收藏与品鉴:精酿啤酒的艺术之旅

啤酒&#xff0c;这一古老的酒精饮品&#xff0c;不仅是人们生活中的日常饮品&#xff0c;更是一种艺术和文化的载体。对于Fendi club啤酒而言&#xff0c;收藏与品鉴更是一门深入骨髓的艺术之旅。 Fendi club啤酒的收藏&#xff0c;不仅仅是简单的存放和保管&#xff0c;而是一…

node.js的Express框架的介绍 与 安装详细教程

一、Express框架介绍 &#xff08;1&#xff09;Express定义&#xff1a; Express 是一个简洁而灵活的 node.js Web应用框架, 提供了一系列强大特性帮助你创建各种 Web 应用&#xff0c;和丰富的 HTTP 工具。 使用 Express 可以快速地搭建一个完整功能的网站。 &#xff08…

垃圾分类管理系统java项目

文章目录 垃圾分类管理系统一、项目演示二、项目介绍三、系统部分功能截图四、部分代码展示五、底部获取项目&#xff08;9.9&#xffe5;带走&#xff09; 垃圾分类管理系统 一、项目演示 垃圾分类管理系统 二、项目介绍 系统角色&#xff1a;管理员、用户 1、登录、注册功能…

javaEE进阶——SpringBoot与SpringMVC第一讲

文章目录 什么是springMVCSpringMVC什么是模型、视图、控制器MVC和SpringMVC的关系SpringMVC的使用第一个SpringMVC程序RestController什么是注解 那么RestController到底是干嘛的呢&#xff1f;RequestMapping 如何接收来自请求中的querystryingRequestParamRequestMapping(&q…