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
- Import Stage: Select your raw image directory and an output destination. OpticTriage utilizes SHA-256 chunked hashing to instantly flag duplicate files.
- Metadata & RTK: Scans DJI/Autel XMP payloads. Automatically corrects the
GPSAltitudeEXIF 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). - 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.
- 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. - Export & Finalize: Copies images non-destructively to
passed/andflagged/folders. It generates a Python script to instantly spin up Agisoft Metashape, preparesimage_groups.txtandcameras.jsonfor ODM, and scaffoldsdatabase.dbwith 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)
| File | Size | Uploaded | Provenance | |
|---|---|---|---|---|
| optictriage-0.1.0.tar.gz | 296.8 kB | With provenance | Details |
Built distribution (wheel)
| File | Interpreter | ABI | Platform | Reset |
|---|---|---|---|---|
| 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 logRelease 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 logSecurity 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.
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 logA 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.