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:

@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.3},
  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.3.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.3-py3-none-any.whl (86.0 kB view details)

Uploaded Python 3

File details

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

File metadata

  • Download URL: jaw_tracking_system-1.0.3.tar.gz
  • Upload date:
  • Size: 8.5 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.3.tar.gz
Algorithm Hash digest
SHA256 1e9d0c1f705337e4af9f24226d791e49cd3c653abfbdeab37c7ba55a47a62272
MD5 7ed13b34e5de6417650e17015c8d0659
BLAKE2b-256 f770bea4d4157e904f76c384bd093c317d75212a7f6074cc64a67a470325e7ae

See more details on using hashes here.

Provenance

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

File metadata

File hashes

Hashes for jaw_tracking_system-1.0.3-py3-none-any.whl
Algorithm Hash digest
SHA256 3a910d67687d6b9bceb3434c4bab44294250769094b9c6d79bd1679a9ad05c1c
MD5 be422fe12ae785aea47d43194fabed09
BLAKE2b-256 774dd81be3f22eca0a56fe2c9dbbcf17f0e1ecf938456acb075f97a8d7a7dee8

See more details on using hashes here.

Provenance

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