Skip to main content

A lightweight, non-destructive diagnostic utility that pre-processes batches of field photographs before they enter SfM pipelines.

Project description

OpticTriage

OpticTriage is an advanced pre-processing and quality control pipeline for large-scale drone photogrammetry datasets. It filters out blurry, glary, or poorly-overlapped images, extracts EXIF/RTK telemetry, detects ArUco/ChArUco/ColorChecker targets, and exports instantly ready structures for Metashape, OpenDroneMap, and COLMAP.

Installation

Dependencies

OpticTriage relies on several system binaries which must be installed:

  • ExifTool: Required for writing corrected telemetry back into DJI files.
  • libexiv2: C++ library underneath pyexiv2 for fast EXIF extraction.
  • libjpeg-turbo: Required for PyTurboJPEG to extract embedded raw previews quickly.

Ensure these are accessible in your system PATH. If using the bundled version (via PyInstaller), the appropriate ExifTool binary is included in the bin/ directory.

Quick Start

# Clone the repository
git clone https://github.com/your-org/optictriage.git
cd optictriage

# Install dependencies (uv recommended)
uv pip install -e .

# Run the app
python src/optictriage/app.py

Workflow Tutorial

  1. Import Stage: Select your raw image directory and an output destination. OpticTriage utilizes SHA-256 chunked hashing to instantly flag duplicate files.
  2. Metadata & RTK: Scans DJI/Autel XMP payloads. Automatically corrects the GPSAltitude EXIF tag by utilizing RelativeAltitude + Base Station Elevation, directly rewriting the source file to prevent vertical bowing in SfM reconstructions. Flags any images with lost RTK Fixed states (Float/Single Point).
  3. Quality Stage: Assesses focus/blur via a Gridded Laplacian (top 5% sharpest patches), exposure clipping, and glare estimation via true HSI color conversion. Images falling below your thresholds are flagged.
  4. Target Detection: Runs a computer vision pipeline (LAB CLAHE equalisation, Bilateral Filtering) to locate ArUco, ChArUco, and ColorChecker targets. Corners are refined to subpixel precision (cornerSubPix) and serialized.
  5. Export & Finalize: Copies images non-destructively to passed/ and flagged/ folders. It generates a Python script to instantly spin up Agisoft Metashape, prepares image_groups.txt and cameras.json for ODM, and scaffolds database.db with an exact 64-byte OPENCV parameter blob for COLMAP.

GPU Acceleration

OpticTriage will probe your system on launch. If an Nvidia GPU with CUDA is detected (via OpenCV), it will engage a two-tier GPU path:

  • Tier 1 (Compute Heavy): Grayscale/LAB conversion, Laplacian filters, and CLAHE.
  • Tier 2 (Filtering): Bilateral Edge-Preserving noise reduction.

Note: The first GPU call permanently reserves approximately 100MB of VRAM for the CUDA context. Please terminate OpticTriage before launching downstream pipelines like Metashape or COLMAP to fully release this VRAM back to your solver.

Hardware Guidance

Minimum:

  • CPU: Intel Core i7 / AMD Ryzen 7
  • RAM: 32 GB
  • GPU: Nvidia RTX 3060
  • Storage: 1TB NVMe Gen3

Recommended:

  • CPU: Intel Core i9 / AMD Ryzen 9
  • RAM: 64 GB
  • GPU: Nvidia RTX 4080 (Desktop or 150W+ Laptop Chassis. Note: Thin laptop chassis variants running at 80W TGP will drastically underperform on CUDA pipelines).
  • Storage: 2TB NVMe Gen4

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

optictriage-0.1.0.tar.gz (296.8 kB view details)

Uploaded Source

Built Distribution

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

optictriage-0.1.0-py3-none-any.whl (58.2 kB view details)

Uploaded Python 3

File details

Details for the file optictriage-0.1.0.tar.gz.

File metadata

  • Download URL: optictriage-0.1.0.tar.gz
  • Upload date:
  • Size: 296.8 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optictriage-0.1.0.tar.gz
Algorithm Hash digest
SHA256 df641c188ca415a57f608ed61797b6b89cd3f9ab7532ad0f66a58971b69623d2
MD5 4590a47423f04ba17a92af9ce385893c
BLAKE2b-256 9d5734371ce46b9c939d0c06bd1ecbf94e9c546435b42320277f1e762134a534

See more details on using hashes here.

Provenance

The following attestation bundles were made for optictriage-0.1.0.tar.gz:

Publisher: release.yml on mabo-du/optictriage

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

File details

Details for the file optictriage-0.1.0-py3-none-any.whl.

File metadata

  • Download URL: optictriage-0.1.0-py3-none-any.whl
  • Upload date:
  • Size: 58.2 kB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for optictriage-0.1.0-py3-none-any.whl
Algorithm Hash digest
SHA256 e39eac013bdb1e769a9604db97cefcc765a68f4889d0aabeac448fb4ec71eead
MD5 d739e562650f1740a44cc516d30773ed
BLAKE2b-256 b07a77cb3909c38da250069e6acee6c6bccb6204558e0eb9a884aeff89d10dcd

See more details on using hashes here.

Provenance

The following attestation bundles were made for optictriage-0.1.0-py3-none-any.whl:

Publisher: release.yml on mabo-du/optictriage

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