Web-based tool for visualizing and annotating accelerometry data from physical performance assessments.
Project description
Accelerometry Annotation Tool
A web-based application for visualizing and annotating accelerometry data. Built with Panel and Bokeh, it enables research teams to collaboratively label activity segments in large time-series recordings. The app is sensor-agnostic — it works with any tri-axial accelerometry data stored in HDF5 format.
Live Demo
A publicly accessible demo is hosted on Hugging Face Spaces:
| 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 recordings. Example annotations are pre-populated to showcase 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)
For HPC environments, you can run a single shared instance via Slurm that all team members connect to through SSH tunneling.
Connect (each user — submits job automatically if not running):
bash hpc_utils/connect.sh
Stop the server:
bash hpc_utils/stop_server.sh
What it does
Researchers collect tri-axial accelerometry signals (x, y, z) and need to identify and label activity segments within those recordings. This tool lets annotators visually inspect signals and mark the time boundaries of activities of interest.
The built-in activity labels are configured for standardized physical performance tests, but the app can load and visualize accelerometry data from any setting:
- Chair Stand Test — Repeated sit-to-stand cycles measuring lower-extremity strength
- Timed Up and Go (TUG) — Rise, walk 3 m, turn, walk back, sit — assesses functional mobility
- 3-Meter Walk Test — Short-distance gait speed as a proxy for mobility and physical function
- 6-Minute Walk Test — Submaximal endurance test for aerobic capacity
Features
- LTTB downsampling — Renders 500K+ data points smoothly by reducing to ~10,000 visually representative points using the Largest Triangle Three Buckets algorithm
- Server-side HDF5 filtering — Loads only the visible time window from disk using PyTables
whereclauses, keeping load times under 20 ms even for 1 GB+ files - Fast navigation — Previous/Next updates plot data in place (no full figure rebuild), so transitions are near-instant
- Network latency indicator — Header displays live round-trip latency to the server, color-coded by speed
- Range selector — Minimap for navigating long recordings without losing context
- Box-select annotation — Select a time range and label it with one click
- Segment, scoring, and review flags — Mark annotations for segmentation, scoring, or review with distinct hatch-pattern overlays
- Notes — Attach free-text notes to any annotation
- Multi-user collaboration — Each annotator sees their own file assignments; admins can impersonate users and manage accounts
- Authentication — Built-in basic auth (or OAuth for production deployments)
- Auto-save to Excel — Per-user annotation files for easy downstream analysis
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 file management
│ ├── plotting.py # Bokeh plots with LTTB downsampling
│ ├── state.py # Per-session state management
│ ├── templates/ # Login/logout HTML templates
│ ├── static/ # Favicon, logo
│ └── data/
│ ├── readings/ # HDF5 accelerometry files
│ └── output/ # Per-user annotation Excel files
├── 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
- Update
__version__invisualize_accelerometry/__init__.py - Update
CHANGELOG.mdwith the new version's changes - Commit the changes:
git add visualize_accelerometry/__init__.py CHANGELOG.md git commit -m "release: v<VERSION>"
- Create and push the tag:
git tag v<VERSION> git push origin v<VERSION>
- The
release.ymlGitHub 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.
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file accelerometry_annotator-3.4.2.tar.gz.
File metadata
- Download URL: accelerometry_annotator-3.4.2.tar.gz
- Upload date:
- Size: 133.1 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
07f37bac3b166e0d8529bb07fd495623a73b7bb18b3870b72df44cdbe4e76022
|
|
| MD5 |
1aba082e2fbcc8b99f271135bf11175c
|
|
| BLAKE2b-256 |
36c12a778028f8721b70fb0ad70fb1fb3ff1b22330a8c098dfdc9367c9b1a98b
|
Provenance
The following attestation bundles were made for accelerometry_annotator-3.4.2.tar.gz:
Publisher:
publish-pypi.yml on TavoloPerUno/py_visualize_accelerometry
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
accelerometry_annotator-3.4.2.tar.gz -
Subject digest:
07f37bac3b166e0d8529bb07fd495623a73b7bb18b3870b72df44cdbe4e76022 - Sigstore transparency entry: 1105768235
- Sigstore integration time:
-
Permalink:
TavoloPerUno/py_visualize_accelerometry@e58e3d7402180ce8e5e9dbbdb5e5feefb60aa46f -
Branch / Tag:
refs/tags/v3.4.2 - Owner: https://github.com/TavoloPerUno
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@e58e3d7402180ce8e5e9dbbdb5e5feefb60aa46f -
Trigger Event:
release
-
Statement type:
File details
Details for the file accelerometry_annotator-3.4.2-py3-none-any.whl.
File metadata
- Download URL: accelerometry_annotator-3.4.2-py3-none-any.whl
- Upload date:
- Size: 136.8 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.7
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ec578e0889e8ec8089d4ec9c34af139ac122e3981d0a2fdc80b31a629ec7a134
|
|
| MD5 |
14a1f7e4db13be32acb77171ad1f59a0
|
|
| BLAKE2b-256 |
7eab10afcc41de039417ea508b3d4d379bf8aa09898f6568333e78b519f7261c
|
Provenance
The following attestation bundles were made for accelerometry_annotator-3.4.2-py3-none-any.whl:
Publisher:
publish-pypi.yml on TavoloPerUno/py_visualize_accelerometry
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
accelerometry_annotator-3.4.2-py3-none-any.whl -
Subject digest:
ec578e0889e8ec8089d4ec9c34af139ac122e3981d0a2fdc80b31a629ec7a134 - Sigstore transparency entry: 1105768386
- Sigstore integration time:
-
Permalink:
TavoloPerUno/py_visualize_accelerometry@e58e3d7402180ce8e5e9dbbdb5e5feefb60aa46f -
Branch / Tag:
refs/tags/v3.4.2 - Owner: https://github.com/TavoloPerUno
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish-pypi.yml@e58e3d7402180ce8e5e9dbbdb5e5feefb60aa46f -
Trigger Event:
release
-
Statement type: