Skip to main content

Accelerometry Annotation Tool

PyPI version License: MIT Live Demo Documentation Python 3.9+ DOI

A web app for viewing and annotating tri-axial accelerometry data. Research teams use it to label activity segments in long recordings together. Built with Panel and Bokeh. Sensor-agnostic: any HDF5 file with timestamp, x, y, z columns works.

Full application view

Live Demo

A publicly accessible demo is hosted on Hugging Face Spaces:

Launch Demo

Username Password Role
demo_admin demo Admin (can manage users, impersonate)
demo_user demo Annotator

Note: The demo uses real accelerometer data from the dataset below, resampled and composed into short recordings (~10 min at 85 Hz). It does not contain real participant data. Example annotations are pre-populated to show labeling, flags, and inter-annotator variability.

AlSahly, A. (2022). Accelerometer Gyro Mobile Phone Dataset [Dataset]. UCI Machine Learning Repository. https://doi.org/10.3390/s22176513

Shared Server Deployment (HPC / Slurm)

On HPC, one Slurm job hosts the app for the whole team. Each member connects through an SSH tunnel.

Connect (submits a job automatically if one isn't running):

bash hpc_utils/connect.sh

Stop the server:

bash hpc_utils/stop_server.sh

What it does

Researchers collect tri-axial accelerometry signals and need to mark where specific activities happen in long recordings. This tool lets annotators inspect the signal, box-select a time range, and label it.

The built-in labels target four physical performance tests, but the app loads any HDF5 file with the right schema.

  • Chair Stand Test. Five sit-to-stand cycles. Measures lower-extremity strength.
  • Timed Up and Go (TUG). Rise, walk 3 m, turn, walk back, sit. Measures functional mobility.
  • 3-Meter Walk Test. Short-distance gait speed.
  • 6-Minute Walk Test. Submaximal endurance.

Features

  • LTTB downsampling. Renders 500K+ points smoothly by reducing each axis to ~10,000 visually representative points (Largest Triangle Three Buckets).
  • Server-side HDF5 filtering. Loads only the visible time window via PyTables where clauses. Under 20 ms on 1 GB+ files.
  • Fast navigation. Previous/Next patches the plot data in place; no full figure rebuild.
  • Network latency indicator. Header shows live round-trip latency to the server, color-coded by speed.
  • Range selector. Minimap to navigate long recordings without losing context.
  • Box-select annotation. Drag a time range, click an activity button.
  • Segment, scoring, and review flags. Three hatch patterns on top of the activity overlay.
  • Vector magnitude overlay. Toggle a fourth trace (√(x²+y²+z²)). Orientation-independent, so periodic motion and impacts pop out.
  • Walking detection (Urbanek 2015). FFT-based scan for sustained harmonic walking. Candidates show as dashed orange overlays, persist across refresh in a shared xlsx, and can be dismissed or reinstated per segment. No ML — classical signal processing.
  • Notes. Free text attached to any annotation.
  • Multi-user collaboration. Each annotator sees their own file assignments. Admins can impersonate users and manage accounts.
  • Authentication. Basic auth out of the box; OAuth for production.
  • Excel export. One annotation file per user.

Installation

Prerequisites

  • Python 3.9+
  • Conda (recommended) or pip

Setup

# Clone the repository
git clone git@github.com:TavoloPerUno/py_visualize_accelerometry.git
cd py_visualize_accelerometry

# Create and activate conda environment
conda create -n panel_app python=3.12
conda activate panel_app

# Install dependencies
pip install -r requirements.txt

Data setup

Place HDF5 accelerometry files (.h5) in:

visualize_accelerometry/data/readings/

Each file should contain a readings table with columns: timestamp, x, y, z.

Credentials

Create a credentials.json file in the project root:

{
    "username1": "password1",
    "username2": "password2"
}

See credentials.json.example for reference.

Running the app

Local development

panel serve visualize_accelerometry/app.py \
    --port 5601 \
    --basic-auth credentials.json \
    --cookie-secret $(python -c "import secrets; print(secrets.token_hex(32))") \
    --allow-websocket-origin localhost:5601 \
    --basic-login-template visualize_accelerometry/templates/login.html

Then open http://localhost:5601/app in your browser.

HPC (SLURM)

See Shared server startup for the self-service shared server workflow, or Slurm deployment guide for the full deployment guide.

Project structure

py_visualize_accelerometry/
├── visualize_accelerometry/
│   ├── app.py                  # Main Panel application and layout
│   ├── callbacks.py            # UI event handlers and annotation logic
│   ├── config.py               # Colors, paths, user lists, constants
│   ├── data_loading.py         # HDF5 I/O, annotation and walking-suggestion file management
│   ├── plotting.py             # Bokeh plots with LTTB downsampling and VM overlay
│   ├── state.py                # Per-session state management
│   ├── walking_detection.py    # Urbanek 2015 sustained-harmonic-walking detector
│   ├── templates/              # Login/logout HTML templates
│   ├── static/                 # Favicon, logo
│   └── data/
│       ├── readings/           # HDF5 accelerometry files
│       └── output/             # Per-user annotation Excel files + shared walking_suggestions.xlsx
├── hpc_utils/                  # HPC deployment scripts (Slurm, SSH tunneling)
│   ├── connect.sh              # Self-service connect script
│   ├── start_server.sh         # Slurm job script
│   ├── stop_server.sh          # Stop running server
│   └── logs/                   # Job and server logs
├── requirements.txt
└── credentials.json            # Auth credentials (not in repo)

Documentation

Full documentation is available at https://tavoloperuno.github.io/py_visualize_accelerometry/.

To build documentation locally:

pip install sphinx furo sphinx-copybutton myst-parser
cd docs
make html
open _build/html/index.html

Versioning and releases

This project uses Semantic Versioning. The canonical version lives in visualize_accelerometry/__init__.py as __version__.

Cutting a release

  1. Update __version__ in visualize_accelerometry/__init__.py
  2. Update CHANGELOG.md with the new version's changes
  3. Commit the changes:
    git add visualize_accelerometry/__init__.py CHANGELOG.md
    git commit -m "release: v<VERSION>"
    
  4. Create and push the tag:
    git tag v<VERSION>
    git push origin v<VERSION>
    
  5. The release.yml GitHub Actions workflow will automatically create a GitHub Release with auto-generated notes from commits since the last tag.

License

MIT License. This project is developed by the National Social Life, Health, and Aging Project (NSHAP) lab at the University of Chicago.

Metadata

Release files for accelerometry-annotator 3.5.3

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

Source distribution (sdist)

Source distribution for accelerometry-annotator 3.5.3
File Size Uploaded Provenance Actions
accelerometry_annotator-3.5.3.tar.gz 143.1 kB With provenance Details for accelerometry_annotator-3.5.3.tar.gz

Built distribution (wheel)

Table of built distributions (wheels) for accelerometry-annotator 3.5.3
File Interpreter ABI Platform Actions
accelerometry_annotator-3.5.3-py3-none-any.whl Python 3 none any Details for accelerometry_annotator-3.5.3-py3-none-any.whl

Total release size: 289.7 kB

Release files / accelerometry_annotator-3.5.3.tar.gz

Download URL accelerometry_annotator-3.5.3.tar.gz
Size 143.1 kB
Tags Source
SHA-256 checksum
How to use checksums
f2c236737e02bc2b5bfb089e87c668f361e3f76f2ff287d97064b3bb2c086e5b
BLAKE2b-256 checksum
How to use checksums
0ce9e7b089e422ca94196e15c8f2453d74d6b59750207a75d89324a66ed2f024
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 14, 2026.

Transparency log

Release files / accelerometry_annotator-3.5.3-py3-none-any.whl

Download URL accelerometry_annotator-3.5.3-py3-none-any.whl
Size 146.6 kB
Tags Python 3
SHA-256 checksum
How to use checksums
76a9a32d8b32998f1fe1f38a260b368dd9ed5ff5344df17d04af9ec7412cf693
BLAKE2b-256 checksum
How to use checksums
003e9295642ddbdcb540ad493c21793dca0277be563faf87f0a6ca76a4b4ee9e
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 14, 2026.

Transparency log

Security for accelerometry-annotator 3.5.3

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for accelerometry_annotator-3.5.3.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on May 14, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

3.5.3 This release

2 release files Full provenance

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