OpenLPT - Open-source Lagrangian Particle Tracking GUI
OpenLPT is a powerful, user-friendly open-source software for 3D Lagrangian Particle Tracking (LPT), designed for experimental fluid dynamics and flow visualization. Developed by the Ni Research Lab at Johns Hopkins University (JHU), it provides a comprehensive GUI-based workflow for high-precision particle tracking and reconstruction.
🚀 Key Capabilities
- 3D Particle Tracking: Robust Lagrangian tracking (LPT) and Shake-the-Box (STB) methods.
- Multi-Camera Calibration: Easy-to-use tools for wand and plate calibration (intrinsic & extrinsic parameters).
- Note: The current calibration implementation assumes no refraction. For experimental setups involving observation windows, it is critical that the cameras are oriented as close to the surface normal (orthogonal) as possible.
- Cross-Platform: Full support for Windows, macOS, and Linux.
- Performance: High-performance C++ core with Python Python bindings for flexibility and speed.
Keywords: Lagrangian Particle Tracking (LPT), Shake-the-Box (STB), 3D Flow Visualization, PIV, Particle Reconstruction, Multi-camera Calibration, Experimental Fluid Dynamics, JHU Ni Research Lab.
Quick Start
[!TIP] Ensure you have activated your environment before running these commands:
conda activate OpenLPT(On Windows, we recommend using Command Prompt (CMD) as PowerShell may have execution policy restrictions).
1. Graphical User Interface (GUI)
# Launch the interactive GUI
openlpt-gui
2. Command Line Interface (CLI)
# Run STB tracking directly with a config file
openlpt path/to/config.txt
# Show image preprocessing CLI help
openlpt preprocess --help
3. Python API
import openlpt as lpt
# Run tracking programmatically
lpt.run('path/to/config.txt')
# Or launch GUI from within a script
lpt.launch_gui()
Demo
https://github.com/user-attachments/assets/60579007-4f24-4989-8b36-3de2224c9797
Features
- User-friendly interface in python
- Lagrangian particle tracking for multiple objects (point-like particles, spherical particles, etc.)
- Support stereomatching with multiple cameras (at least 2)
- Include multiple test cases for users to test and understand the code
- Better structure for adding new functions
Installation
Method 1: One-Click Installation (Recommended for developers)
We provide automated scripts that set up everything for you (including Conda, environment, and dependencies).
-
Download the code:
git clone https://github.com/JHU-NI-LAB/OpenLPT_GUI.git cd OpenLPT_GUI
-
Run the Installer:
-
Windows: Double-click
install_windows.bat(Or run in terminal:install_windows.bat) -
macOS: Run in terminal:
bash install_mac.command -
Linux: Run in terminal:
bash install_linux.sh
-
-
Launch the GUI: After installation, simply run:
openlpt-gui
Method 2: Direct Pip Installation (Easiest)
You can install OpenLPT directly from PyPI:
- For GUI Support (Recommended):
pip install "openlpt[gui]"
- For CLI-only:
pip install "openlpt"
Method 3: Manual Installation (Click to expand)
If you prefer to set up the environment manually:
-
Prerequisites:
-
Create Environment and Install:
# Create environment conda create -n OpenLPT python=3.10 conda activate OpenLPT # Build and install the package pip install .
Troubleshooting
| Problem | Solution |
|---|---|
| Windows: Build fails | Install VS Build Tools and Win11 SDK |
macOS: omp.h not found |
See macOS OpenMP Fix section below |
| macOS: Architecture | python -c "import platform; print(platform.machine())" |
| Linux: Permissions | Use chmod +x or sudo |
| All: Stale cache | Delete build/ folder and retry |
| Installation: Build isolation | If compilation fails due to network, try pip install . --no-build-isolation |
macOS OpenMP Fix
If you get fatal error: 'omp.h' file not found:
export CC="$CONDA_PREFIX/bin/clang"
export CXX="$CONDA_PREFIX/bin/clang++"
export CPPFLAGS="-I$CONDA_PREFIX/include"
export LDFLAGS="-L$CONDA_PREFIX/lib -lomp"
pip install -e .
Samples and Tests
Please see the sample format of configuration files, camera files and image files in /test/test_STB or /test/test_STB_Bubble.
To run the sample:
- Open OpenLPT GUI.
- Load the project configuration from the sample folders.
- Click 'Run tracking'.
CLI Image Preprocessing
Use openlpt preprocess to convert TIFF image lists, direct TIFF files, or Phantom CINE files into processed TIFF outputs plus OpenLPT image lists.
Auto-detect cameras from a data root
openlpt preprocess \
--input-root I:/VONSET/Data/20230123/T2 \
--frames 0 999
--input-root auto-detects cameras in natural order. It first looks for CINE files in ROOT/Cam1/*.cine, ROOT/Cam2/*.cine, ... (case-insensitive directory names are fine), and also supports flat roots such as ROOT/cam1.cine, ROOT/cam2.cine. If --output-dir is omitted in this mode, output defaults to ROOT/imgFile.
TIFF list preprocessing
openlpt preprocess \
--input-list cam1_images.txt \
--input-list cam2_images.txt \
--output-dir processed_tiffs
CINE preprocessing on a cluster
openlpt preprocess \
--input-root /scratch/run01 \
--frames 0 999 \
--background mean
You can still use direct --cine paths when needed:
openlpt preprocess \
--cine /scratch/cam1.cine \
--cine /scratch/cam2.cine \
--frames 0 999 \
--output-dir /scratch/preprocessed \
--background mean
Mean background, invert, and output image lists
openlpt preprocess \
--input-list cam1_images.txt \
--output-dir processed_tiffs \
--background mean \
--bg-count 50 \
--bg-stride 5 \
--invert
Parallel processing with multiple workers
openlpt preprocess \
--input-list cam1_images.txt \
--input-list cam2_images.txt \
--output-dir processed_tiffs \
--workers 4
Use --workers 0 to use all available CPU cores, which is convenient for cluster jobs:
openlpt preprocess \
--cine /scratch/cam1.cine \
--frames 0 999 \
--output-dir /scratch/preprocessed \
--workers 0
Processed TIFFs are written under OUTPUT_DIR/camN/, and per-camera image lists are written as OUTPUT_DIR/camN_image_list.txt.
For --input-root, TIFF camera folders under the root are also auto-detected and processed in natural camera order. TIFF root mode currently expects per-camera subdirectories; flat TIFF roots are not auto-grouped.
In the GUI preprocessing panel, use Generate CLI below Process Image (Batch Export) to create a command from the current GUI settings. When all loaded CINE files share a common ROOT/CamN/ layout, the generated command prefers --input-root ROOT and uses ROOT/imgFile rather than imgFile_processed.
[!NOTE] CINE preprocessing requires pycine, which is listed in this repository's
requirements.txtandpyproject.toml. The preprocessing CLI modules are headless/Qt-free, but some full-repository install routes also include GUI dependencies such as PySide6.
Citation
If you use OpenLPT in your research, please cite our publications:
- Tan, S., Salibindla, A., Masuk, A.U.M. and Ni, R., 2020. Introducing OpenLPT: new method of removing ghost particles and high-concentration particle shadow tracking. Experiments in Fluids, 61(2), p.47.
- Tan, S., Zhong, S. and Ni, R., 2023. 3D Lagrangian tracking of polydispersed bubbles at high image densities. Experiments in Fluids, 64(4), p.85.
License
This repository contains a mix of original code and MATLAB Coder-generated files under a MathWorks Academic License.
⚠️ Restricted Paths (MATLAB Coder-generated)
The following paths contain code generated by MATLAB Coder and are NOT covered by the general MIT/Open-source license of this repository:
/src/srcObject/BubbleCenterAndSizeByCircle/src/srcObject/BubbleCenterAndSizeByCircle/CircleIdentifier.cpp/src/srcObject/BubbleResize/inc/libObject/BubbleCenterAndSizeByCircle/inc/libObject/CircleIdentifier.h/inc/libObject/BubbleResize
📜 Terms and Conditions
For the paths listed above:
- ACADEMIC INTERNAL OPERATIONS ONLY: Usage is restricted to teaching, academic research, and course requirements.
- NO Commercial Use: Government, commercial, or other organizational use is NOT permitted.
- Header Preservation: Do not modify or remove the "Academic License" header comments in these files.
- No Sublicensing: These files are not sublicensed under this repository's open-source license.
- Redistribution: If you redistribute this repository, you must keep the original Academic License headers in the generated files.
- Modification: If you need to modify the generated code, you must hold a valid MathWorks MATLAB Coder license.
All other files in this repository are original work and are distributed under the MIT License (see LICENSE).
Contact & Contribution
- Issues: Please report bugs or request features via GitHub Issues.
- Contact: For questions, please contact szhong12@jhu.edu or tanshiyong84@gmail.com.
- Organization: Ni Research Lab, Johns Hopkins University.
- Support: If you find this tool helpful, please give us a ⭐ on GitHub!
Metadata
Release files for openlpt 2.2.4
For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.
Source distribution (sdist)
| File | Size | Uploaded | |
|---|---|---|---|
| openlpt-2.2.4.tar.gz | 5.2 MB | Details |
Built distributions (wheels)
Total release size: 80.4 MB
Release files / openlpt-2.2.4.tar.gz
| Download URL | openlpt-2.2.4.tar.gz |
|---|---|
| Size | 5.2 MB |
| Tags | Source |
|
SHA-256 checksum How to use checksums |
46a45e8c1a645a09e71ffbae8efe144e1b077aa34ebbe4b90768023de8fed9eb
|
|
BLAKE2b-256 checksum How to use checksums |
146b533a1d97223e18d02558a50eb286583038a09d759c306a8257f360ca1d64
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / openlpt-2.2.4-cp313-cp313-win_amd64.whl
| Download URL | openlpt-2.2.4-cp313-cp313-win_amd64.whl |
|---|---|
| Size | 6.0 MB |
| Tags | CPython 3.13 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
4e402d1a005db9ee94fac4a7c7e9b0bdca8f20489a3bbedf1515dc9e38695538
|
|
BLAKE2b-256 checksum How to use checksums |
3e9e4e92f91536d39edabf13ec71c7d52ff56102940307baed7b34509eee700a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / openlpt-2.2.4-cp313-cp313-manylinux_2_28_x86_64.whl
| Download URL | openlpt-2.2.4-cp313-cp313-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.13 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
3a17e12cb6818c8a52788fb774fe5cd665997f497e89d7457db04a19f2a9c3bd
|
|
BLAKE2b-256 checksum How to use checksums |
3cf02c5d6683a5996c3427ab5deca1c6d2a701488c7ae1afcd85bce2d9a9e167
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / openlpt-2.2.4-cp313-cp313-macosx_15_0_arm64.whl
| Download URL | openlpt-2.2.4-cp313-cp313-macosx_15_0_arm64.whl |
|---|---|
| Size | 6.3 MB |
| Tags | CPython 3.13 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
66ec35f692f0a9f6d92d4cad8c53193df534d447a2957cefe7f9f783da6817ae
|
|
BLAKE2b-256 checksum How to use checksums |
d2aac3018aa5445825af0cd0872a611cc1d682051bff4429d982d27eb0c15e3d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / openlpt-2.2.4-cp312-cp312-win_amd64.whl
| Download URL | openlpt-2.2.4-cp312-cp312-win_amd64.whl |
|---|---|
| Size | 6.0 MB |
| Tags | CPython 3.12 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
f510f54045f195a9dc2a816cc275a84dfcbb96be5e36a1ae00518c611dcc855a
|
|
BLAKE2b-256 checksum How to use checksums |
8caced73fbf8d3c2de8df20a6edde496759781db2cede5431d4a2381ee8ffe37
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / openlpt-2.2.4-cp312-cp312-manylinux_2_28_x86_64.whl
| Download URL | openlpt-2.2.4-cp312-cp312-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.12 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
e57486fb31d03f265d51989be69c9f74934b59f61335f45e0b2fc10a4cecad64
|
|
BLAKE2b-256 checksum How to use checksums |
848f6b7334c76900599d62a77a888aabbd762a49b4db997e2c226f64edf54a79
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / openlpt-2.2.4-cp312-cp312-macosx_15_0_arm64.whl
| Download URL | openlpt-2.2.4-cp312-cp312-macosx_15_0_arm64.whl |
|---|---|
| Size | 6.3 MB |
| Tags | CPython 3.12 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
14158969bbedd5719e73350434a7cb3e27f227731c6499008822a471b4516373
|
|
BLAKE2b-256 checksum How to use checksums |
3cbe98e8ebfc7e79f80e3370afc65eb272bbe9e42d1374a680ebcb8f90b0cadb
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / openlpt-2.2.4-cp311-cp311-win_amd64.whl
| Download URL | openlpt-2.2.4-cp311-cp311-win_amd64.whl |
|---|---|
| Size | 6.0 MB |
| Tags | CPython 3.11 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
ffddfeddce76718a69e50c74968ea464049772c8610900072c21ee5ac86d889f
|
|
BLAKE2b-256 checksum How to use checksums |
eaa3ac30ff4a72be129a946519096187da711d4a99e58346b16b2c104b9ff69d
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / openlpt-2.2.4-cp311-cp311-manylinux_2_28_x86_64.whl
| Download URL | openlpt-2.2.4-cp311-cp311-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.11 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
6214da65136864a4b2abb12c375b24a038828a79933025fcc7f4d79715b8ccee
|
|
BLAKE2b-256 checksum How to use checksums |
8e7af61b1cb48362e0cc2238f68de1b8f14db0afec7aa7d6ff8ee0201018fa63
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / openlpt-2.2.4-cp311-cp311-macosx_15_0_arm64.whl
| Download URL | openlpt-2.2.4-cp311-cp311-macosx_15_0_arm64.whl |
|---|---|
| Size | 6.3 MB |
| Tags | CPython 3.11 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
560e4132d643d6fede153e42792e951624fe815aea33bcf9c5ab40d5a5635085
|
|
BLAKE2b-256 checksum How to use checksums |
340c614ca24f9ec0413d634742ff14ace9d000dc5ad6a6558df0ed9949b2729a
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / openlpt-2.2.4-cp310-cp310-win_amd64.whl
| Download URL | openlpt-2.2.4-cp310-cp310-win_amd64.whl |
|---|---|
| Size | 6.0 MB |
| Tags | CPython 3.10 Windows x86-64 |
|
SHA-256 checksum How to use checksums |
2aa07ed76bc90df12955ee2ffdace33e00c55334234a556477c92c9367327526
|
|
BLAKE2b-256 checksum How to use checksums |
e0ba5e7d257c5ce3eaca0b4d70461dd6f430b7a19cc17ae137cbf1377d0ba8b0
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / openlpt-2.2.4-cp310-cp310-manylinux_2_28_x86_64.whl
| Download URL | openlpt-2.2.4-cp310-cp310-manylinux_2_28_x86_64.whl |
|---|---|
| Size | 6.5 MB |
| Tags | CPython 3.10 Linux glibc 2.28+ x86-64 |
|
SHA-256 checksum How to use checksums |
0e42fe7203e52916880b4ad83342a93556934f05c3707098e43aa513a5b5506d
|
|
BLAKE2b-256 checksum How to use checksums |
e78950826fb78231e6e55994a68c4a6ecfb662037993044e9963ebdc15096a41
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|
Release files / openlpt-2.2.4-cp310-cp310-macosx_15_0_arm64.whl
| Download URL | openlpt-2.2.4-cp310-cp310-macosx_15_0_arm64.whl |
|---|---|
| Size | 6.3 MB |
| Tags | CPython 3.10 macOS 15.0+ ARM64 |
|
SHA-256 checksum How to use checksums |
93b57a6094198cbc088af74e14cc276c6733cd386bca57813637ca0d01264e3e
|
|
BLAKE2b-256 checksum How to use checksums |
c665499913d41a30fd421dfc42fc96c49a3bd91dfa74b2c891b0152226bade06
|
| Upload date | |
|
Uploaded using Trusted Publishing? What is trusted publishing? |
No |
| Uploaded via |
twine/6.1.0 CPython/3.13.12
|