Skip to main content

Open-source Lagrangian Particle Tracking (LPT) with GUI and CLI

Project description

OpenLPT - Open-source Lagrangian Particle Tracking GUI

GitHub Stars Python Version License PyPI Downloads

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).

  1. Download the code:

    git clone https://github.com/JHU-NI-LAB/OpenLPT_GUI.git
    cd OpenLPT_GUI
    
  2. 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
      
  3. 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:

  1. Prerequisites:

    • Miniforge or Anaconda
    • C++ Compiler (Visual Studio 2022 for Windows, Clang for macOS/Linux)
  2. 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:

  1. Open OpenLPT GUI.
  2. Load the project configuration from the sample folders.
  3. 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.txt and pyproject.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!

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

openlpt-2.2.4.tar.gz (5.2 MB view details)

Uploaded Source

Built Distributions

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

openlpt-2.2.4-cp313-cp313-win_amd64.whl (6.0 MB view details)

Uploaded CPython 3.13Windows x86-64

openlpt-2.2.4-cp313-cp313-manylinux_2_28_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.13manylinux: glibc 2.28+ x86-64

openlpt-2.2.4-cp313-cp313-macosx_15_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.13macOS 15.0+ ARM64

openlpt-2.2.4-cp312-cp312-win_amd64.whl (6.0 MB view details)

Uploaded CPython 3.12Windows x86-64

openlpt-2.2.4-cp312-cp312-manylinux_2_28_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.12manylinux: glibc 2.28+ x86-64

openlpt-2.2.4-cp312-cp312-macosx_15_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.12macOS 15.0+ ARM64

openlpt-2.2.4-cp311-cp311-win_amd64.whl (6.0 MB view details)

Uploaded CPython 3.11Windows x86-64

openlpt-2.2.4-cp311-cp311-manylinux_2_28_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.11manylinux: glibc 2.28+ x86-64

openlpt-2.2.4-cp311-cp311-macosx_15_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.11macOS 15.0+ ARM64

openlpt-2.2.4-cp310-cp310-win_amd64.whl (6.0 MB view details)

Uploaded CPython 3.10Windows x86-64

openlpt-2.2.4-cp310-cp310-manylinux_2_28_x86_64.whl (6.5 MB view details)

Uploaded CPython 3.10manylinux: glibc 2.28+ x86-64

openlpt-2.2.4-cp310-cp310-macosx_15_0_arm64.whl (6.3 MB view details)

Uploaded CPython 3.10macOS 15.0+ ARM64

File details

Details for the file openlpt-2.2.4.tar.gz.

File metadata

  • Download URL: openlpt-2.2.4.tar.gz
  • Upload date:
  • Size: 5.2 MB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openlpt-2.2.4.tar.gz
Algorithm Hash digest
SHA256 46a45e8c1a645a09e71ffbae8efe144e1b077aa34ebbe4b90768023de8fed9eb
MD5 2f49082fa3d69bb10dc5f01255c288f2
BLAKE2b-256 146b533a1d97223e18d02558a50eb286583038a09d759c306a8257f360ca1d64

See more details on using hashes here.

File details

Details for the file openlpt-2.2.4-cp313-cp313-win_amd64.whl.

File metadata

  • Download URL: openlpt-2.2.4-cp313-cp313-win_amd64.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.13, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openlpt-2.2.4-cp313-cp313-win_amd64.whl
Algorithm Hash digest
SHA256 4e402d1a005db9ee94fac4a7c7e9b0bdca8f20489a3bbedf1515dc9e38695538
MD5 435bc0075ea22f847d8eb00864bb3bc1
BLAKE2b-256 3e9e4e92f91536d39edabf13ec71c7d52ff56102940307baed7b34509eee700a

See more details on using hashes here.

File details

Details for the file openlpt-2.2.4-cp313-cp313-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for openlpt-2.2.4-cp313-cp313-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 3a17e12cb6818c8a52788fb774fe5cd665997f497e89d7457db04a19f2a9c3bd
MD5 719fd79f25fe66ad82a1393d8b38c566
BLAKE2b-256 3cf02c5d6683a5996c3427ab5deca1c6d2a701488c7ae1afcd85bce2d9a9e167

See more details on using hashes here.

File details

Details for the file openlpt-2.2.4-cp313-cp313-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for openlpt-2.2.4-cp313-cp313-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 66ec35f692f0a9f6d92d4cad8c53193df534d447a2957cefe7f9f783da6817ae
MD5 f0bba6bf1384fa1618534983deb1e23a
BLAKE2b-256 d2aac3018aa5445825af0cd0872a611cc1d682051bff4429d982d27eb0c15e3d

See more details on using hashes here.

File details

Details for the file openlpt-2.2.4-cp312-cp312-win_amd64.whl.

File metadata

  • Download URL: openlpt-2.2.4-cp312-cp312-win_amd64.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.12, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openlpt-2.2.4-cp312-cp312-win_amd64.whl
Algorithm Hash digest
SHA256 f510f54045f195a9dc2a816cc275a84dfcbb96be5e36a1ae00518c611dcc855a
MD5 140f42bd5c7c0c94d2226d3d5dbef1ce
BLAKE2b-256 8caced73fbf8d3c2de8df20a6edde496759781db2cede5431d4a2381ee8ffe37

See more details on using hashes here.

File details

Details for the file openlpt-2.2.4-cp312-cp312-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for openlpt-2.2.4-cp312-cp312-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 e57486fb31d03f265d51989be69c9f74934b59f61335f45e0b2fc10a4cecad64
MD5 9ceb283c3c59c233a358793b91500e69
BLAKE2b-256 848f6b7334c76900599d62a77a888aabbd762a49b4db997e2c226f64edf54a79

See more details on using hashes here.

File details

Details for the file openlpt-2.2.4-cp312-cp312-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for openlpt-2.2.4-cp312-cp312-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 14158969bbedd5719e73350434a7cb3e27f227731c6499008822a471b4516373
MD5 99ba7325d5648065c4ab68f6eb4de0ac
BLAKE2b-256 3cbe98e8ebfc7e79f80e3370afc65eb272bbe9e42d1374a680ebcb8f90b0cadb

See more details on using hashes here.

File details

Details for the file openlpt-2.2.4-cp311-cp311-win_amd64.whl.

File metadata

  • Download URL: openlpt-2.2.4-cp311-cp311-win_amd64.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.11, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openlpt-2.2.4-cp311-cp311-win_amd64.whl
Algorithm Hash digest
SHA256 ffddfeddce76718a69e50c74968ea464049772c8610900072c21ee5ac86d889f
MD5 3aa609db3fe64872a8d0ceae0fb708b9
BLAKE2b-256 eaa3ac30ff4a72be129a946519096187da711d4a99e58346b16b2c104b9ff69d

See more details on using hashes here.

File details

Details for the file openlpt-2.2.4-cp311-cp311-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for openlpt-2.2.4-cp311-cp311-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 6214da65136864a4b2abb12c375b24a038828a79933025fcc7f4d79715b8ccee
MD5 299ac11b403a95eebc651e6c19605f47
BLAKE2b-256 8e7af61b1cb48362e0cc2238f68de1b8f14db0afec7aa7d6ff8ee0201018fa63

See more details on using hashes here.

File details

Details for the file openlpt-2.2.4-cp311-cp311-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for openlpt-2.2.4-cp311-cp311-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 560e4132d643d6fede153e42792e951624fe815aea33bcf9c5ab40d5a5635085
MD5 f6449f151db26355368067173d388310
BLAKE2b-256 340c614ca24f9ec0413d634742ff14ace9d000dc5ad6a6558df0ed9949b2729a

See more details on using hashes here.

File details

Details for the file openlpt-2.2.4-cp310-cp310-win_amd64.whl.

File metadata

  • Download URL: openlpt-2.2.4-cp310-cp310-win_amd64.whl
  • Upload date:
  • Size: 6.0 MB
  • Tags: CPython 3.10, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for openlpt-2.2.4-cp310-cp310-win_amd64.whl
Algorithm Hash digest
SHA256 2aa07ed76bc90df12955ee2ffdace33e00c55334234a556477c92c9367327526
MD5 a97cfa5e76a94ab9f81f949c27ec1cb5
BLAKE2b-256 e0ba5e7d257c5ce3eaca0b4d70461dd6f430b7a19cc17ae137cbf1377d0ba8b0

See more details on using hashes here.

File details

Details for the file openlpt-2.2.4-cp310-cp310-manylinux_2_28_x86_64.whl.

File metadata

File hashes

Hashes for openlpt-2.2.4-cp310-cp310-manylinux_2_28_x86_64.whl
Algorithm Hash digest
SHA256 0e42fe7203e52916880b4ad83342a93556934f05c3707098e43aa513a5b5506d
MD5 7ad2b6c314278b5bac341031819269f1
BLAKE2b-256 e78950826fb78231e6e55994a68c4a6ecfb662037993044e9963ebdc15096a41

See more details on using hashes here.

File details

Details for the file openlpt-2.2.4-cp310-cp310-macosx_15_0_arm64.whl.

File metadata

File hashes

Hashes for openlpt-2.2.4-cp310-cp310-macosx_15_0_arm64.whl
Algorithm Hash digest
SHA256 93b57a6094198cbc088af74e14cc276c6733cd386bca57813637ca0d01264e3e
MD5 82b24a625ac66f60923de75d78723e05
BLAKE2b-256 c665499913d41a30fd421dfc42fc96c49a3bd91dfa74b2c891b0152226bade06

See more details on using hashes here.

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