Skip to main content

A tool for checking DICOM compliance against a template

Project description

dicompare

dicompare is a DICOM validation tool designed to ensure compliance with study-specific imaging protocols and domain-specific guidelines while preserving data privacy. It provides multiple interfaces, including support for validation directly in the browser at dicompare-web.vercel.app, leveraging WebAssembly (WASM), Pyodide, and the underlying pip package dicompare. dicompare is suitable for multi-site studies and clinical environments without requiring software installation or external data uploads.

dicompare supports DICOM session validation against templates based on:

  • Reference sessions: JSON schema files can be generated based on a reference MRI scanning session;
  • [TESTING] domain guidelines: Flexible guidelines for specific domains (currently QSM);
  • [FUTURE] landmark studies: Schema files based on landmark studies such as the HCP, ABCD, and UK BioBank projects.

Command-line interface (CLI) and application programming interface (API)

While you can run dicompare in your browser now without any installation, you may also use the underlying dicompare pip package if you wish to use the command-line interface (CLI) or application programming interface (API).

pip install dicompare

Command-line interface (CLI)

The package provides the following CLI entry points:

  • dcm-gen-session: Generate JSON schemas for DICOM validation from a reference session
  • dcm-check-session: Validate DICOM sessions against JSON or Python schemas

1. Generate a JSON schema from a reference session

dcm-gen-session \
    --in_session_dir /path/to/dicom/session \
    --out_json_schema schema.json \
    --reference_fields EchoTime RepetitionTime FlipAngle

This creates a JSON schema describing the session based on the specified reference fields.

2. Validate a DICOM session

dcm-check-session \
    --in_session /path/to/dicom/session \
    --json_schema schema.json \
    --out_json compliance_report.json

The tool will output a compliance summary, indicating deviations from the schema.

Python API

The dicompare package provides a comprehensive Python API for programmatic schema generation, validation, and DICOM processing.

Loading DICOM data

Load a DICOM session:

from dicompare import load_dicom_session

session_df = load_dicom_session(
    session_dir="/path/to/dicom/session",
    show_progress=True
)

Load individual DICOM files:

from dicompare import load_dicom

dicom_data = load_dicom(
    dicom_paths=["/path/to/file1.dcm", "/path/to/file2.dcm"],
    show_progress=True
)

Load Siemens .pro files:

from dicompare import load_pro_session

pro_session = load_pro_session(
    session_dir="/path/to/pro/files",
    show_progress=True
)

Generate a JSON schema

from dicompare import load_dicom_session, create_json_schema
import json

# Load the reference session
session_df = load_dicom_session(
    session_dir="/path/to/dicom/session",
    show_progress=True
)

# Create a JSON schema
reference_fields = ["EchoTime", "RepetitionTime", "FlipAngle"]
json_schema = create_json_schema(
    session_df=session_df,
    reference_fields=reference_fields
)

# Save the schema
with open("schema.json", "w") as f:
    json.dump(json_schema, f, indent=4)

Validate a session against a JSON schema

from dicompare import (
    load_json_schema,
    load_dicom_session,
    check_session_compliance_with_json_schema,
    map_to_json_reference
)

# Load the JSON schema
reference_fields, json_schema = load_json_schema(json_schema_path="schema.json")

# Load the input session
in_session = load_dicom_session(
    session_dir="/path/to/dicom/session",
    show_progress=True
)

# Map acquisitions to schema
session_map = map_to_json_reference(in_session, json_schema)

# Check compliance
compliance_summary = check_session_compliance_with_json_schema(
    in_session=in_session,
    ref_session=json_schema,
    session_map=session_map
)

# Display results
for entry in compliance_summary:
    print(entry)

Additional utilities

Assign acquisition and run numbers:

from dicompare import assign_acquisition_and_run_numbers

session_df = assign_acquisition_and_run_numbers(
    session_df=session_df,
    acquisition_fields=["ProtocolName"],
    reference_fields=["EchoTime", "RepetitionTime"]
)

Get DICOM tag information:

from dicompare import get_tag_info, get_all_tags_in_dataset

# Get info about a specific tag
tag_info = get_tag_info("EchoTime")
print(tag_info)  # {'tag': '(0018,0081)', 'name': 'Echo Time', 'type': 'float'}

# Get all tags in a dataset
all_tags = get_all_tags_in_dataset(dicom_metadata)

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

dicompare-0.1.33.tar.gz (120.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

dicompare-0.1.33-py3-none-any.whl (141.1 kB view details)

Uploaded Python 3

File details

Details for the file dicompare-0.1.33.tar.gz.

File metadata

  • Download URL: dicompare-0.1.33.tar.gz
  • Upload date:
  • Size: 120.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.23

File hashes

Hashes for dicompare-0.1.33.tar.gz
Algorithm Hash digest
SHA256 e4c0f272c693d499fdbd07daebac32ca2c829429c033ac7706276aa0b0508194
MD5 cdd9e0bbd53f5493e162f56724961e56
BLAKE2b-256 17cab74a7476e53dcbd5231eede67ec09a6c5d8d7e8a300bc49432e6f14c9abe

See more details on using hashes here.

File details

Details for the file dicompare-0.1.33-py3-none-any.whl.

File metadata

  • Download URL: dicompare-0.1.33-py3-none-any.whl
  • Upload date:
  • Size: 141.1 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.2.0 CPython/3.9.23

File hashes

Hashes for dicompare-0.1.33-py3-none-any.whl
Algorithm Hash digest
SHA256 4258ee42b097824a5cabc02bda239bd295931e5d406047fb4d29a4c7f5fd5c37
MD5 155556b0531e379c8cdde155f97a96f9
BLAKE2b-256 f2788be42244ed4a06886ba8eb1899f8c47cd6248d0889c5223b6594bc814d10

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page