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 (see Components).

Components

Mouthpiece Teeth attachment Headpiece Digitizing pointer
2BA thread Dart point Reflective fiber Temporary dental glue

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 licensed under the Attribution-NonCommercial-ShareAlike 4.0 International (CC BY-NC-SA 4.0). See the LICENSE file for details.

Citation

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

@software{mueller2025jts,
  author = {Paul-Otto Müller and Sven Suppelt and Mario Kupnik and Oskar von Stryk},
  title = {JawTrackingSystem (JTS): A customizable, low-cost, optical jaw tracking system},
  year = {2025},
  url = {https://github.com/paulotto/jaw-tracking-system},
  version = {1.0.0},
  license = {CC BY-NC-SA 4.0}
}

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.2.tar.gz (8.2 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.2-py3-none-any.whl (85.6 kB view details)

Uploaded Python 3

File details

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

File metadata

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

File hashes

Hashes for jaw_tracking_system-1.0.2.tar.gz
Algorithm Hash digest
SHA256 a04adaca5d1c129dff5585e2669aeebe0e1e277041a411220e5d2b6cf3f13724
MD5 a97b4687d6f941d31038cb6792414c94
BLAKE2b-256 2fa4e3d8abdc3e7ed1c3b5122e16623a5360d840c59593ce56919401cbf83b2e

See more details on using hashes here.

Provenance

The following attestation bundles were made for jaw_tracking_system-1.0.2.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.2-py3-none-any.whl.

File metadata

File hashes

Hashes for jaw_tracking_system-1.0.2-py3-none-any.whl
Algorithm Hash digest
SHA256 e0fd02fd52861c2ca24589d0bf492e94e0e392048528a94bd89ceaca6b6b577a
MD5 bff0bbdae8629c7793644b8e29247891
BLAKE2b-256 0ea92d2d699a9e4b4b16b146b2f4f819ba1b0c66ba66517ded329b5c6e81c93d

See more details on using hashes here.

Provenance

The following attestation bundles were made for jaw_tracking_system-1.0.2-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