PRO Production

Workflow-grade Pro analysis with audit-ready outputs.

workflow pro

## Workflow Narrative

UAV Image Intake QA

### Problem It Solves

Is this image set good enough to proceed into expensive downstream processing, and what should be fixed first if not?

### Who It Is For

- UAV mission operators, photogrammetry technicians, and geospatial production teams.

### Primary User

Drone services teams, geomatics operations managers, and data-engineering teams responsible for production intake quality.

### What It Does

- Scans UAV imagery and builds a metadata/coverage inventory.
- Computes intake QA metrics (GPS/EXIF completeness, overlap estimate, image-count sufficiency).
- Extracts per-image blur scores and flags blurry images with warnings.
- Parses RTK fix status and gimbal/flight orientation priors from DJI XMP metadata where available.
- Returns workflow status (`pass`, `review`, `fail`) with warnings suitable for operator triage.

### How It Works

- Recursively discovers supported image files (`jpg`, `jpeg`, `tif`, `tiff`, `png`).
- Parses EXIF fields for timestamp and GPS coordinates; parses DJI XMP sidecar fields for RTK fix status and gimbal yaw/pitch/roll and flight yaw.
- Estimates overlap from GPS nearest-neighbor spacing against a nominal footprint heuristic.
- Computes a per-image blur score from a Laplacian variance kernel (configurable as `off`, `fast`, or `full` mode) with wide-SIMD acceleration.
- Metadata extraction and blur scoring run in parallel across all images using Rayon thread pools.
- Applies profile thresholds to classify readiness and emit actionable warnings.
- Indicative heuristic: overlap_proxy ~= 1 - (nn_spacing_m / nominal_footprint_m), clipped to [0, 1].

### Why It Wins

- Converts ad hoc manual preflight checks into a single reproducible QA workflow with machine-readable outputs, including blur quality, RTK status, and orientation priors alongside the standard GPS and overlap diagnostics.

### Typical Buying Trigger

Frequent failed/rework-heavy photogrammetry or registration runs caused by avoidable intake quality issues.

### Typical Presets

- fast: permissive intake thresholds with fast-mode blur scoring for rapid field feedback.
- balanced: default operations profile with fast-mode blur scoring.
- strict: tighter quality gate with full-mode blur scoring before production processing.

## Inputs

Parameter | Optional | Description
--- | --- | ---
images_dir | no | Input directory containing UAV images to screen.
profile: fast | balanced | strict | yes | [pro] QA profile controlling overlap, metadata readiness, and blur thresholds; drives pass/review/fail classification. Defaults to `balanced`.
recursive | yes | If true, scans subdirectories under images_dir. Defaults to `true`.
output_prefix | yes | Prefix used to name all output artifacts.
blur_mode: off | fast | full | yes | Blur scoring mode. `off` skips blur scoring; `fast` downsamples before scoring; `full` scores at original resolution. Defaults to `fast`.

## Outputs

Parameter | Type | Description
--- | --- | ---
image_inventory | CSV | Per-image inventory with metadata flags, GPS coordinates, capture fields, blur score, and gimbal/RTK orientation columns (`*_image_inventory.csv`).
qa_report | JSON | Structured QA checks and warning details for intake triage, including blur and orientation hint sections (`*_intake_qa_report.json`).
summary | JSON | Workflow summary contract with status and aggregate metrics including blur coverage and RTK coverage fractions (`*_intake_summary.json`).
html_report | HTML | Human-readable customer-facing report generated from the summary contract for stakeholder review and QA traceability.
image_centers | GeoJSON | Image center points from EXIF GPS with per-feature blur score and orientation properties (`*_image_centers.geojson`).
flight_path_lines | GeoJSON | Flight path line geometry built from ordered image centers with GPS (`*_flight_path_lines.geojson`).

## Python Example

    import whitebox_workflows as wbw

    wbe = wbw.WbEnvironment(include_pro=True, tier="pro")

    result = wbe.guided_uav_image_intake_workflow(
        images_dir="data/uav_mission/images",
        profile="balanced",
        recursive=True,
        output_prefix="output/uav_intake",
        blur_mode="fast",
    )

    print(result)

## License Notice

Use of this function requires a license for Whitebox Workflows Professional (WbW-Pro). Please visit www.whiteboxgeo.com to purchase a license.

## Project Links

WbW Homepage User Manual Support WbW