Skip to main content

Modular and flexible jaw motion analysis framework (motion capture, calibration, registration, and analysis)

Project description

JawTrackingSystem (JTS): A customizable, low-cost, optical jaw tracking system

A modular and extensible Python package for analyzing jaw motion using motion capture data. Designed for research and clinical applications, it provides a flexible pipeline for calibration, coordinate transformations, registration, smoothing, visualization, and export of jaw kinematics. The models for the hardware components are provided as STL files and inside a FreeCAD project file.


Table of Contents


Features

  • Customizable, 3D-printable hardware components
  • Offline or real-time jaw motion analysis (online processing in development)
  • Abstract base classes for motion capture data (supports Qualisys, extensible to others)
  • Calibration routines for anatomical landmark registration
  • Modular pipeline: calibration, relative motion, coordinate transformation, smoothing, visualization, export
  • Support for data export in HDF5 format
  • Easy configurable via JSON files
  • Visualization utilities for 2D/3D trajectories
  • Comprehensive logging and error handling
  • Test suite for core functionality

Hardware

The hardware components are designed to be low-cost and customizable. The models for the hardware components are provided as STL files and inside a FreeCAD project file. You can find the files in the models directory.

The mouthpiece, teeth attachment, headpiece, and digitizing pointer are designed to be 3D-printed. Since it isn't easy to 3D-print a sharp point for the digitizing pointer, a dart point is used, which can be attached to a 2BA thread connected to the digitizing pointer's tip. For the reflective markers, you can use reflective fibers or reflective tape. The headpiece can be attached and fastened to the head using hook-and-loop tape (see Components).

Components

Mouthpiece Teeth attachment Headpiece Digitizing pointer
2BA thread Dart point Reflective fiber Temporary dental glue Hook-and-loop tape

Installation

Install the package using pip:

python -m pip install jaw-tracking-system

From GitHub:

python -m pip install git+https://github.com/paulotto/jaw_tracking_system.git

Or just clone the repository, copy the jts directory to your project, and install the dependencies:

git clone https://github.com/paulotto/jaw_tracking_system.git 
cd jaw_tracking_system
cp -r jts your_project_directory/
python -m pip install -r requirements.txt

Optional Dependencies

python -m pip install plotly==6.0.1 qtm_rt

Quick Start

  1. Prepare a configuration JSON file (see README for examples).
  2. Run the analysis pipeline:
python -m jts.core path/to/config.json
  1. Results (trajectories, plots, exports) will be saved to the output directory specified in your config.

Configuration

All analysis parameters are specified in a JSON config file. Key sections include:

  • data_source: Type (e.g., "qualisys"), filename, and system-specific parameters
  • analysis: Calibration, experiment intervals, smoothing, coordinate transforms
  • output: Output directory, file formats, export options
  • visualization: Plotting options

See config.json for a template.

Setup and Usage

TODO: Describe experimental setup, hardware assembly, and how to run the system.

As a Script

python -m jts.core path/to/config.json

Optional flags:

  • --verbose for detailed logging
  • --plot to show plots interactively

As a Library

from jts.core import JawMotionAnalysis, ConfigManager

config = ConfigManager.load_config('path/to/config.json')
analysis = JawMotionAnalysis(config)
results = analysis.run_analysis()

Extending the Framework

  • Add new motion capture system support by subclassing MotionCaptureData.
  • Implement new calibration or analysis routines by extending JawMotionAnalysis.
  • Add new visualization or export utilities in helper.py.

Directory Structure

jaw_tracking_system/
├── jts/
│   ├── __init__.py
│   ├── calibration_controllers.py
│   ├── core.py
│   ├── helper.py
│   ├── plotly_visualization.py
│   ├── precision_analysis.py
│   ├── qualisys_streaming.py
│   ├── qualisys.py
│   ├── streaming.py
├── config/
│   ├── README.md
│   └── config.json
├── models/
├── tests/
│   ├── __init__.py
│   ├── test_core.py
│   ├── test_helper.py
│   ├── test_precision_analysis.py
│   └── test_qualisys.py
├── LICENSE
├── MANIFEST.in
├── README.md
├── requirements.txt
├── setup.py

Testing

Run the test suite with:

pytest tests

License

This project is only intended for research and educational purposes and is licensed under the Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0). See the LICENSE file for details.

This license allows you to use, adapt, and distribute the material for non-commercial purposes, provided the following conditions are met:

  1. Attribution: You must give appropriate credit to the original authors, provide a link to the license, and indicate if changes were made.
  2. Non-Commercial: You may not use the material for commercial purposes (e.g., selling or profiting from it, directly or indirectly).
  3. ShareAlike: If you create derivative works (e.g., modify or adapt the material), you must distribute them under the same CC BY-NC-SA 4.0 license.
  4. No Additional Restrictions: You may not impose additional legal or technological restrictions that prevent others from exercising the rights granted by the license.

Citation

If you use this package in your research, please cite:

@InProceedings{mueller2025jts,
  title={An Optical Measurement System for Open-Source Tracking of Jaw Motions},
  author={Müller, Paul-Otto and Suppelt, Sven and Kupnik, Mario and {von Stryk}, Oskar},
  booktitle = {2025 IEEE Sensors, Vancouver, Canada},
  year={2025},
  publisher = {IEEE},
  doi={10.48550/arXiv.2510.01191},
  note={Accepted}
}

For more information, see the project website.

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

jaw_tracking_system-1.0.4.tar.gz (8.5 MB view details)

Uploaded Source

Built Distribution

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

jaw_tracking_system-1.0.4-py3-none-any.whl (86.9 kB view details)

Uploaded Python 3

File details

Details for the file jaw_tracking_system-1.0.4.tar.gz.

File metadata

  • Download URL: jaw_tracking_system-1.0.4.tar.gz
  • Upload date:
  • Size: 8.5 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.7

File hashes

Hashes for jaw_tracking_system-1.0.4.tar.gz
Algorithm Hash digest
SHA256 be531a5d321b13790784d28db0a6a3d56d30ffc30fa766c9936ea691e5ad4b17
MD5 dfa2de6c7a0210f1f62e051518179c20
BLAKE2b-256 e2769acc4503a129399e780a73c980d792a706b7c100ce258669d8d626bdb60c

See more details on using hashes here.

Provenance

The following attestation bundles were made for jaw_tracking_system-1.0.4.tar.gz:

Publisher: publish.yml on paulotto/jaw_tracking_system

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file jaw_tracking_system-1.0.4-py3-none-any.whl.

File metadata

File hashes

Hashes for jaw_tracking_system-1.0.4-py3-none-any.whl
Algorithm Hash digest
SHA256 44bd44bd0079caf0b6dbbfe9ebece94616d9da5fb44fa5f961038ff3ac127870
MD5 1c5278ecdf76f5d2540ad4db7b554ab7
BLAKE2b-256 70cbfe1be95bf20ba859ef3bafde17dba31f2d63d1f1e5747d2c8d9657a33e26

See more details on using hashes here.

Provenance

The following attestation bundles were made for jaw_tracking_system-1.0.4-py3-none-any.whl:

Publisher: publish.yml on paulotto/jaw_tracking_system

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

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