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

2024-05-15 23:36
文章标签 案例 gradio 转为 dicom nii

本文主要是介绍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()

这篇关于Gradio 案例——将 dicom 文件转为 nii文件的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/993237

相关文章

利用Python把路径转为绝对路径的方法

《利用Python把路径转为绝对路径的方法》在Python中,如果你有一个相对路径并且想将其转换为绝对路径,你可以使用Path对象的resolve()方法,Path是Python标准库pathlib中... 目录1. os.path.abspath 是什么?怎么用?基本用法2. os.path.abspat

Java中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例解析

《Java中的分布式系统开发基于Zookeeper与Dubbo的应用案例解析》本文将通过实际案例,带你走进基于Zookeeper与Dubbo的分布式系统开发,本文通过实例代码给大家介绍的非常详... 目录Java 中的分布式系统开发基于 Zookeeper 与 Dubbo 的应用案例一、分布式系统中的挑战二

Java 中的 equals 和 hashCode 方法关系与正确重写实践案例

《Java中的equals和hashCode方法关系与正确重写实践案例》在Java中,equals和hashCode方法是Object类的核心方法,广泛用于对象比较和哈希集合(如HashMa... 目录一、背景与需求分析1.1 equals 和 hashCode 的背景1.2 需求分析1.3 技术挑战1.4

java时区时间转为UTC的代码示例和详细解释

《java时区时间转为UTC的代码示例和详细解释》作为一名经验丰富的开发者,我经常被问到如何将Java中的时间转换为UTC时间,:本文主要介绍java时区时间转为UTC的代码示例和详细解释,文中通... 目录前言步骤一:导入必要的Java包步骤二:获取指定时区的时间步骤三:将指定时区的时间转换为UTC时间步

Java中实现对象的拷贝案例讲解

《Java中实现对象的拷贝案例讲解》Java对象拷贝分为浅拷贝(复制值及引用地址)和深拷贝(递归复制所有引用对象),常用方法包括Object.clone()、序列化及JSON转换,需处理循环引用问题,... 目录对象的拷贝简介浅拷贝和深拷贝浅拷贝深拷贝深拷贝和循环引用总结对象的拷贝简介对象的拷贝,把一个

Java中最全最基础的IO流概述和简介案例分析

《Java中最全最基础的IO流概述和简介案例分析》JavaIO流用于程序与外部设备的数据交互,分为字节流(InputStream/OutputStream)和字符流(Reader/Writer),处理... 目录IO流简介IO是什么应用场景IO流的分类流的超类类型字节文件流应用简介核心API文件输出流应用文

MyBatis分页查询实战案例完整流程

《MyBatis分页查询实战案例完整流程》MyBatis是一个强大的Java持久层框架,支持自定义SQL和高级映射,本案例以员工工资信息管理为例,详细讲解如何在IDEA中使用MyBatis结合Page... 目录1. MyBATis框架简介2. 分页查询原理与应用场景2.1 分页查询的基本原理2.1.1 分

深度解析Java @Serial 注解及常见错误案例

《深度解析Java@Serial注解及常见错误案例》Java14引入@Serial注解,用于编译时校验序列化成员,替代传统方式解决运行时错误,适用于Serializable类的方法/字段,需注意签... 目录Java @Serial 注解深度解析1. 注解本质2. 核心作用(1) 主要用途(2) 适用位置3

Java 正则表达式的使用实战案例

《Java正则表达式的使用实战案例》本文详细介绍了Java正则表达式的使用方法,涵盖语法细节、核心类方法、高级特性及实战案例,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录一、正则表达式语法详解1. 基础字符匹配2. 字符类([]定义)3. 量词(控制匹配次数)4. 边

Python Counter 函数使用案例

《PythonCounter函数使用案例》Counter是collections模块中的一个类,专门用于对可迭代对象中的元素进行计数,接下来通过本文给大家介绍PythonCounter函数使用案例... 目录一、Counter函数概述二、基本使用案例(一)列表元素计数(二)字符串字符计数(三)元组计数三、C