Skip to main content

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

Metadata

Release files for optictriage 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for optictriage 0.1.0
File Size Uploaded Provenance
optictriage-0.1.0.tar.gz 296.8 kB With provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for optictriage 0.1.0
File Interpreter ABI Platform
optictriage-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 354.9 kB

Release files / optictriage-0.1.0.tar.gz

Download URL optictriage-0.1.0.tar.gz
Size 296.8 kB
Tags Source
SHA-256 checksum
How to use checksums
df641c188ca415a57f608ed61797b6b89cd3f9ab7532ad0f66a58971b69623d2
BLAKE2b-256 checksum
How to use checksums
9d5734371ce46b9c939d0c06bd1ecbf94e9c546435b42320277f1e762134a534
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 14, 2026.

Transparency log

Release files / optictriage-0.1.0-py3-none-any.whl

Download URL optictriage-0.1.0-py3-none-any.whl
Size 58.2 kB
Tags Python 3
SHA-256 checksum
How to use checksums
e39eac013bdb1e769a9604db97cefcc765a68f4889d0aabeac448fb4ec71eead
BLAKE2b-256 checksum
How to use checksums
b07a77cb3909c38da250069e6acee6c6bccb6204558e0eb9a884aeff89d10dcd
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/6.1.0 CPython/3.13.12

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 14, 2026.

Transparency log

Security for optictriage 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

Full provenance

All 2 files in this release have been uploaded with provenance metadata.

Select from 2 files

Attestation for optictriage-0.1.0.tar.gz

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Jun 14, 2026.

Transparency log

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files Full provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page