Installation

Requirements

IMPORTANT: Our code requires system level dependencies gdal, zbar, exiftool, and opencv. It is the most straightforward to install them through conda-forge.

Install from environment.yml

  1. Clone the repository or download the environment.yml file.

  2. Create a conda environment using the environment.yml file:

conda env create -f environment.yml
  1. Activate the environment:

conda activate dronewq

Install from Source

If you want to install from source:

git clone https://github.com/aewindle110/DroneWQ.git
cd DroneWQ
conda create -n {your project name} python=3.13 exiftool gdal zbar opencv -c conda-forge
conda activate {your project name}
pip install .

System Requirements

DroneWQ requires Python >=3.10. Some dependencies require additional system libraries which is installed through conda:

  • GDAL: Required for geospatial operations

  • ExifTool: Required for reading MicaSense image metadata

  • ZBar: Required for QR code reading from calibration panels

On Ubuntu/Debian:

sudo apt-get update
sudo apt-get install gdal-bin libgdal-dev exiftool opencv zbar-tools python3-gdal python3-cartopy

IMPORTANT: Pip on macOS currently doesn’t search through the place homebrew installations go to. Thus, you have to specify it using this method.

On macOS (using Homebrew):

brew install gdal exiftool zbar opencv

Note: We have included a modified version of the MicaSense imageprocessing scripts in this repo. Our modifications include:

  • Radiance data type expressed as Float32 instead of Uint16

  • Image radiance output in milliwatts (mW) instead of watts (W)

  • Modified capture.save_capture_as_stack() to not scale and filter data

These modifications impact the panel_ed calculation. If MicaSense releases a package with user-specified radiance data types, we will revert to their official package.

Quick Start

Organize Your Data

DroneWQ requires MicaSense images organized in a specific folder structure:

<main_directory>/
    ├── panel/              # Calibrated reflectance panel images (before/after flight)
    ├── raw_sky_imgs/       # Sky images (40° from zenith, ~135° azimuth)
    ├── raw_water_imgs/     # Water images from flight
    └── align_img/          # One image capture (5 .tif files) for alignment

Directory descriptions:

  • panel: Contains image captures of the MicaSense calibrated reflectance panel

  • raw_sky_imgs: Contains sky images taken at 40° from zenith and ~135° azimuthal viewing direction

  • raw_water_imgs: Contains all water images captured during the flight

  • align_img: Contains one image capture (5 .tif files, one per band) from raw_water_imgs used to compute the warp matrix for aligning all images

A sample drone dataset consisting of images collected over western Lake Erie is available on Zenodo and is 5.84 GB unzipped. Depending on your computer’s speed, you may want to subset the data before running the full workflow.

Configure Settings

Before processing, configure the main directory path:

import dronewq

# Configure the main directory containing your organized images
dronewq.configure(main_dir="/path/to/your/main_directory")

The configure() function automatically sets up all subdirectory paths based on the main directory.