跳转到主要内容

使用docbook格式从DICOM规范中获取输入的Python DICOM验证器

项目描述

dicom-validator

PyPI version Test Suite Python version

dicom-validator提供了命令行工具validate_iods,该工具检查DICOM文件中是否存在缺失或意外的属性。检查是通过将DICOM文件的内容与给定数据集的SOP类所需的DICOM标准模块和属性进行比较来完成的。

该工具从ACR NEMA提供的最新版本的DICOM标准(或作为命令行参数指定的特定版本)获取输入,该标准以docbook格式提供。pydicom用于读取和解析DICOM文件。

此外,还提供了一个命令行工具 dump_dcm_info,它可以以可读的格式显示一个或多个DICOM文件的标签值。它是直接从DICOM标准获取信息的概念验证。

免责声明:不保证结果的正确性。这是一个alpha阶段的软件,主要被视为概念验证。另外,请查看下面描述的validate_iods的限制。

注意:包的原始名称(《dcm-spec-tools》)已更改为《dicom-validator》,随着迁移到《pydicom》组织,以反映没有计划其他工具,并且DICOM验证器是相关工具。

安装

最新版本可在pypi上获取,可以通过以下方式安装:

pip install dicom-validator

用法

validate_iods.py [-h] [--standard-path STANDARD_PATH]
                      [--revision REVISION] [--force-read] [--recreate-json]
                      [--verbose]
                      dicomfiles [dicomfiles ...]

dump_dcm_info.py [-h] [--standard-path STANDARD_PATH]
                      [--revision REVISION] [--max-value-len MAX_VALUE_LEN]
                      [--show-tags [SHOW_TAGS [SHOW_TAGS ...]]]
                      [--show-image-data] [--recreate-json]
                      dicomfiles [dicomfiles ...]

使用每个脚本的--help选项来获取用法信息。

访问DICOM标准

在工具首次启动时,将下载DICOM标准的最新版本的部分(特别是3.3、3.4和3.6部分),以docbook格式解析,并将所需信息保存到json文件中。如果未提供--src参数,则文件将下载到并检索到<用户主目录>/dicom-validator/。然后,这些文件由工具使用。定期(每月一次),工具将检查DICOM标准的更新版本,并在找到时下载它。

还可以通过命令行选项--revision-r使用标准的旧版本,前提是它们可供下载(在撰写本文时,标准自2014a修订版以来可用)。在工具第一次调用后,可以在/dicom-validator/editions.json中找到当前可用的版本列表。

validate_iods

此功能检查给定的DICOM文件,或递归地在给定目录中检查所有DICOM文件的正确标签,以匹配相关SOP类。检查标签的存在或不存在以及标签值的存在,并在定义了值的枚举的情况下,检查值的有效性。可能还会添加更多检查。这是通过查找此SOP类所需的所有必需和可选模块,并检查这些模块的标签来完成的。列出不允许或缺少在模块中的标签。使用DICOM标准的第3和第4部分收集所需信息。如果可能,评估类型1C和2C模块和标签的条件。如果评估失败,则认为相应的模块和标签是可选的。函数的返回值表示检查期间找到的错误数。

单个文件的输出可能如下所示

(py3_test) c:\dev\GitHub\dicom-validator>validate_iods "c:\dev\DICOM Data\WG02\Enhanced-XA\ENHXA"

Using DICOM revision 2023c
SOP class is "1.2.840.10008.5.1.4.1.1.12.1.1" (Enhanced XA Image IOD)

Errors
======
Module "Enhanced XA/XRF Image":
Tag (0018,9410) (Planes in Acquisition) is missing

Module "Mask":
Tag (0028,6100) (Mask Subtraction Sequence) is missing

Module "X-Ray Frame Acquisition":
Tag (0018,9328) (Exposure Time in ms) is unexpected in  Multi-frame Functional Groups > (5200,9230) > (0018,9417)
Tag (0018,9332) (Exposure in mAs) is unexpected in  Multi-frame Functional Groups > (5200,9230) > (0018,9417)

Module "X-Ray Geometry":
Tag (0018,9476) (X-Ray Geometry Sequence) is missing in  Multi-frame Functional Groups > (5200,9230)

Module "XA/XRF Multi-frame Presentation":
Tag (0028,1090) (Recommended Viewing Mode) is missing in  XA/XRF Multi-frame Presentation > (0008,9458)
Tag (0028,9411) (Display Filter Percentage) is missing in  XA/XRF Multi-frame Presentation > (0008,9458)

General:
Tag (0008,0022) (Acquisition Date) is unexpected
Tag (0008,0032) (Acquisition Time) is unexpected
Tag (0028,9411) (Display Filter Percentage) is unexpected
Tag (0018,1164) (Imager Pixel Spacing) is unexpected


Process finished with exit code 6

限制

条件评估

如前所述,如果条件评估失败,则认为相关的模块或标签是可选的,这可能会隐藏一些非一致性。条件评估可能会失败,如果

  • 所需信息不包含在DICOM文件中(例如,像“如果患者是动物”这样的详细描述)
  • 信息与其他DICOM文件相关(例如,引用的图像)
  • 解析失败,因为条件太复杂、意外或由于错误(如果遇到此类问题,请写入问题)

已弃用标签

请注意,仅使用给定标准来评估文件。如果DICOM文件使用旧标准编写,则它可能符合该标准,但不符合最新版本。在解析使用的标准版本中已弃用的标签根本不考虑。

不支持的情况(可能在未来的版本中添加支持)

  • 例如,呈现状态等不在PS3.3表中列出的SOP类不被处理

dump_dcm_info

这是一个非常简单的DICOM转储工具,它使用标准第6部分读取的DICOM字典。它打印给定DICOM文件的DICOM头信息,或者递归地打印给定目录中所有DICOM文件的DICOM头信息。输出如下所示

(py3_test) c:\dev\GitHub\dicom-validator>dump_dcm_info "c:\dev\DICOM
Data\SR\image12.dcm"

c:\dev\DICOM Data\SR\image12.dcm
(0005,0010) [Unknown]                                LO    1  [AEGIS_DICOM_2.00]
(0005,1000) [Unknown]                                UN    1  [\x00\x05 \x08\x00\x00\x00\n  RIGHT   \x00\x05\xc1X\x00\x00\x00\x06 0.09 \x00\x05...]
(0008,0008) Image Type                               CS    0  []
(0008,0016) SOP Class UID                            UI    1  [Ultrasound Image Storage (Retired)]
(0008,0018) SOP Instance UID                         UI    1  [1.2.840.113680.3.103.775.2873347909.282313.2]
(0008,0020) Study Date                               DA    1  [19950119]
(0008,0030) Study Time                               TM    1  [092854.0]
(0008,0050) Accession Number                         SH    1  [ACN000001]
(0008,0060) Modality                                 CS    1  [US]
(0008,0070) Manufacturer                             LO    1  [Acuson]
(0008,0090) Referring Physician's Name               ON    1  []
(0008,1010) Station Name                             SH    1  [QV-00775]
(0008,1030) Study Description                        LO    1  [ABDOMEN]
(0008,1050) Performing Physician's Name              ON    1  [DOE,JOHN]
(0008,1060) Name of Physician(s) Reading Study       ON    1  []
(0008,1070) Operators' Name                          ON    1  [DO]
(0008,1080) Admitting Diagnoses Description          LO    1  [RSNA'95 Data Not Delete]
(0009,0010) [Unknown]                                LO    1  [AEGIS_DICOM_2.00]
...

如果您只想显示特定标签,可以使用选项--show-tags

(py3_test) c:\dev\GitHub\dicom-validator>dump_dcm_info "c:\dev\DICOM Data\SR\image12.dcm" --show-tags 0010,0010 PatientID

c:\dev\DICOM Data\SR\image12.dcm
(0010,0010) Patient's Name                           ON    1  [DOE^JANE]
(0010,0020) Patient ID                               LO    1  [ACN000001]

在Windows上构建可执行文件

以下是一个示例工作流程

# Clone the repository
git clone git@github.com:pydicom/dicom-validator.git

# Create a virtual environment and activate it
cd dicom-validator
virtualenv venv
venv\Scripts\activate

# Install dependencies for development
pip install -r requirements-dev.txt

# Build executables. They will be placed in the `dist` subfolder.
pyinstaller dicom-validator.spec -y

项目详情


下载文件

下载适合您平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源代码分发

dicom_validator-0.6.2.tar.gz (55.9 kB 查看哈希值)

上传时间 源代码

构建分发

dicom_validator-0.6.2-py3-none-any.whl (64.2 kB 查看哈希值)

上传时间 Python 3

由以下机构支持