Skip to main content

signal-digitizer logo

signal-digitizer

signal-digitizer is a Python library for converting scanned charts and grid-based plots into calibrated one-dimensional signals. It is designed for applications such as ECG traces, laboratory recorder outputs, and other plotted signals stored as PDF documents.

The library processes a chart by rendering the page, correcting skew, detecting the grid, extracting the signal trace, and converting pixel coordinates into calibrated signal values.

Package Information

Python Versions PyPI Version

Installation

pip install signal-digitizer

Quick Start

import signal_digitizer as sd

x, y = sd.digitize(
    "chart.pdf",
    unit_per_vgap=1.0,
    unit_per_hgap=1.0,
)

The returned x and y arrays contain the extracted and calibrated signal coordinates.

Command Line Usage

signal-digitizer chart.pdf -o signal.csv

This processes the input PDF and saves the extracted signal to a CSV file.

How It Works

The digitization workflow consists of the following stages:

  1. Page rendering – The input PDF page is converted into an image.
  2. Skew correction – Page rotation is estimated and corrected.
  3. Grid detection – Grid lines are identified using image-processing techniques.
  4. Calibration – Grid spacing is used to convert pixel coordinates into data units.
  5. Trace extraction – The plotted signal is separated from the chart image.
  6. Signal generation – The extracted trace is converted into calibrated x and y values.

Main API

digitize()

Processes a PDF file through the complete signal digitization pipeline.

x, y = sd.digitize(
    "chart.pdf",
    unit_per_vgap=1.0,
    unit_per_hgap=1.0,
)

digitize_page()

Processes an already opened PyMuPDF page.

import pymupdf
import signal_digitizer as sd

document = pymupdf.open("chart.pdf")

x, y = sd.digitize_page(
    document[0],
    unit_per_vgap=1.0,
    unit_per_hgap=1.0,
)

digitize_image()

Processes an image that has already been loaded as a NumPy array.

x, y = sd.digitize_image(
    image_array,
    unit_per_vgap=1.0,
    unit_per_hgap=1.0,
)

Core Functionality

The library includes functionality for:

  • PDF page rendering
  • Skew estimation and correction
  • Grid-line detection
  • Axis calibration
  • Signal trace extraction
  • Conversion of extracted traces into calibrated signals
  • Signal validation using Pearson correlation and RMSE

Signal Validation

If a reference signal is available, the extracted signal can be evaluated using:

result = sd.validate_signal(y, reference_signal)
print(result)

The validation result includes correlation and error-based measures for comparing the extracted signal with the reference.

Requirements

signal-digitizer requires Python 3.9 or later.

Its core dependencies include:

  • PyMuPDF
  • NumPy
  • OpenCV
  • SciPy

These dependencies are installed automatically with the package.

Authors

  • Manoj Kumar C S
  • V N Manjunath Aradhya
  • Nikhil D Bharadwaj

Maintainers

  • Manoj Kumar C S
  • Nikhil D Bharadwaj

License

This project is distributed under the MIT License. See the License file for details.

Metadata

Release files for signal-digitizer 0.1.13

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for signal-digitizer 0.1.13
File Size Uploaded
signal_digitizer-0.1.13.tar.gz 13.7 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for signal-digitizer 0.1.13
File Interpreter ABI Platform
signal_digitizer-0.1.13-py3-none-any.whl Python 3 none any Details

Total release size: 25.9 kB

Release files / signal_digitizer-0.1.13.tar.gz

Download URL signal_digitizer-0.1.13.tar.gz
Size 13.7 kB
Tags Source
SHA-256 checksum
How to use checksums
abbf3319985ea1cf422ddf45029c2dbc733b579b6d096bed77a4007f5454d372
BLAKE2b-256 checksum
How to use checksums
2c88395e755a867ca9a19c2339a464ee5b96134f7590c216bb9d96b642dd585c
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.11.16

Release files / signal_digitizer-0.1.13-py3-none-any.whl

Download URL signal_digitizer-0.1.13-py3-none-any.whl
Size 12.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
da2defe05ce22374655f405cd63554779c26cc2bafbabbbdfd8af407c0d054a0
BLAKE2b-256 checksum
How to use checksums
4ca41b159456273ca83524dddeb0d58fbbe792eecdffe8ce1ae71c60b1549370
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.11.16

Release history Release notifications | RSS feed

0.2.0

2 release files

This release

0.1.13 This release

2 release files

0.1.12

2 release files

0.1.11

2 release files

0.1.10

2 release files

0.1.9

2 release files

0.1.8

2 release files

0.1.7

2 release files

0.1.6

2 release files

0.1.5

2 release files

0.1.4

2 release files

0.1.3

2 release files

0.1.2

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page