This project provides an open-source orchestration engine designed to automate and scale the transformation of raw Unmanned Aerial Systems (UAS) imagery into structured, AI-ready datasets for agricultural research.
- Digital-Agriculture
Paper: An Orchestration Engine for Scalable, On-Demand AI Phenotyping from UAS Imagery in Agriculture Lucas Waltz (The Ohio State University), Sarikaa Sridhar (The Ohio State University), Ryan Waltz (The Ohio State University), Paul Rodriguez (University of California, San Diego), Chaeun Hong (The Ohio State University), Armeen Ghoorkhanian (The Ohio State University), Nicole DiMarco (The Ohio State University) Raghu Machiraju (The Ohio State University), and Sami Khanal (The Ohio State University). Proceedings of the 33rd ACM SIGSPATIAL International Conference on Advances in Geographic Information Systems (SIGSPATIAL '25)
Project Website: https://go.osu.edu/aerialagriviewer_sigspatial2025
Live Demo: https://go.osu.edu/aerialagriviewer_sigspatial2025
Demo Dataset: https://app.globus.org/file-manager?origin_id=87b3fbdc-2d9d-4fad-93ca-e3828ae2f37d&origin_path=%2F
Note: The demo dataset includes a 2025_poc/stashed/ folder containing reference outputs from the orchestration engine. You can use these outputs to validate your pipeline results when running the orchestration engine
National Science Foundation (NSF) funded AI institute for Intelligent Cyberinfrastructure with Computational Learning in the Environment (ICICLE) (OAC 2112606)
Contact:
For questions or support:
Luke Waltz: waltz.12@osu.edu
This project provides an open-source orchestration engine designed to automate and scale the transformation of raw Unmanned Aerial Systems (UAS) imagery into structured, AI-ready datasets for agricultural research. The pipeline supports both High-Performance Computing (HPC) environments using SLURM and cloud platforms like Google Cloud Platform (GCP) Batch, enabling flexible deployment for different research needs.
The engine addresses the critical bottleneck of data processing for researchers, enabling them to move from raw aerial images to actionable, AI-driven phenotypic insights with minimal manual intervention.
For SLURM/HPC Deployment:
- HPC cluster with SLURM workload manager
- Singularity/Apptainer for container execution
- Conda for environment management
For GCP Deployment:
- Google Cloud Platform account with Batch API enabled
gcloudCLI configured- Docker for building container images
rcloneconfigured for Google Cloud Storage
For Both:
- Python 3.9+
- Sufficient storage for imagery and processing outputs
The orchestration engine supports the following processing steps:
- step1: Orthomosaic generation using OpenDroneMap (RGB and multispectral)
- step2: Orthomosaic alignment across time points using template matching
- step3: Plot tile extraction from aligned orthomosaics
- step7: Plot tile to patch conversion for AI models
- step9: Growth stage inference (Vision Transformer model)
- step10: Canopy cover inference (K-means clustering)
- step11: Spectral reflectance inference (Random Forest)
- step14: GeoJSON generation with phenotypic attributes
- step15: Map tile generation for web visualization
- step4: Direct georeferencing (DGR) of individual images
- step5: Image registration (IR) for temporal alignment
- step6: Plot tile extraction from registered images
- step8: Plot tile to patch conversion for AI models (DGR/IR pathway)
- step12: Growth stage inference from DGR/IR pathway
- step13: Canopy cover and spectral inference from DGR/IR pathway
Each step can be run independently or as part of a complete workflow pipeline. Steps can depend on outputs from previous steps (e.g., step2 requires step1, step9 requires step7).
This project provides an open-source orchestration engine designed to automate and scale the transformation of raw Unmanned Aerial Systems (UAS) imagery into structured, AI-ready datasets for agricultural research. The pipeline supports both High-Performance Computing (HPC) environments using SLURM and cloud platforms like Google Cloud Platform (GCP) Batch, enabling flexible deployment for different research needs.
The engine addresses the critical bottleneck of data processing for researchers, enabling them to move from raw aerial images to actionable, AI-driven phenotypic insights with minimal manual intervention.
-
Clone the repository:
git clone https://github.com/ICICLE-ai/UAS-Orchestration-Engine.git cd UAS-Orchestration-Engine -
Create the conda environment:
# For local development/SLURM conda env create -f environment_local.yml conda activate harvest # For Docker containers conda env create -f environment_docker.yml
-
Configure rclone for cloud storage (GCP only):
rclone config # Set up Google Cloud Storage remote named 'gcs'
-
Create a YAML configuration file based on your deployment platform:
- For SLURM: Use
yaml/uas_config.yamlas a template - For GCP: Use
yaml/uas_config_gcp.yamlas a template
- For SLURM: Use
-
Key configuration sections:
platform: 'gcp' # or 'slurm' base_folder: ':gcs:data-uas/2025_poc/' # Storage location flight_list: # Define your fields and flights field_name: orthomosaic_name: [] # Empty list or boundary shapefile path plot_shapefiles: # Shapefile locations for plot boundaries field_name: crop_type: 'path/to/shapefile.shp' shapefiles_alignment_folder: 'shapefiles/alignment/' # Required for step2 shapefiles_alignment_format: '{om}_pts/{om}_pts.shp' uas_pipeline: # Configure each processing step step1: resources: cpus: 16 memory: 120 machine_type: 'n2-highmem-16' # GCP only
-
Prepare required shapefiles:
- Plot boundary shapefiles (required): Define individual plot boundaries for each field and crop type
- Alignment point shapefiles (required for step2): Control points for temporal registration of orthomosaics
- Boundary polygon shapefiles (optional): Only needed when a single field contains multiple orthomosaics that need to be separated
-
Build the worker container:
docker build -t us-central1-docker.pkg.dev/your-project/orchestration-images/uas-worker:latest . -
Push to container registry:
docker push us-central1-docker.pkg.dev/your-project/orchestration-images/uas-worker:latest
-
Build the ODM container:
docker build -f Dockerfile.odm -t us-central1-docker.pkg.dev/your-project/orchestration-images/odm:latest . docker push us-central1-docker.pkg.dev/your-project/orchestration-images/odm:latest
-
Initialize the environment:
source ~/miniconda3/etc/profile.d/conda.sh conda activate harvest
-
Test individual steps:
cd execution python orchestrate.py \ --config_file ../yaml/uas_config.yaml \ --platform slurm \ --steps step1 step2 \ --dry_run -
Run the orthomosaic-based pipeline:
python orchestrate.py \ --config_file ../yaml/uas_config.yaml \ --platform slurm \ --steps step1 step2 step3 step7 step9 step10 step11 step14 step15 -
Run the direct georeferencing pipeline:
python orchestrate.py \ --config_file ../yaml/uas_config.yaml \ --platform slurm \ --steps step4 step5 step6 step8 step12 step13 step14 step15 -
Enable continuous processing (folder watcher):
# Edit orchestrate_ondemand.sh with your configuration sbatch orchestrate_ondemand.sh
-
Configure GCP credentials:
gcloud auth login gcloud config set project your-project-id -
Run the orchestration:
cd execution python orchestrate.py \ --config_file ../yaml/uas_config_gcp.yaml \ --platform gcp \ --steps step1 step2 step3 step7 step9 step10 step11 step14 step15Note: Direct georeferencing steps (4, 5, 6, 8, 12, 13) are currently only supported on SLURM
-
Monitor job status:
# View generated job tracking python ../utils/displayjson_jobid.py \ --json_file ../profiling/job_id.json \ --output_html_file ../profiling/report_job_status.html # Open the HTML report in a browser
The demo dataset listed at the beginning of this readme includes pre-trained models for:
- Growth Stage Classification (
models/growth_stage/): Vision Transformer model for corn growth stage prediction - Canopy Cover Estimation (
models/canopy_coverage/): K-means clustering model for canopy coverage - Spectral Reflectance (
models/spectral_reflectance/): Random Forest model for NDVI and spectral indices
Models are automatically loaded by the inference scripts.
The orchestration engine provides built-in monitoring:
- Job Status Tracking: Documentation of pipeline execution status (
profiling/job_id.json) - Flight Processing Status: Track which flights have completed which steps (
profiling/flight_dict.json) - Performance Logging: Execution time and resource usage metrics (
processing/logs_perf/) - HTML Reports: Auto-generated status dashboards (
utils/displayjson_*.py)
- "Config file not found": Ensure the
--config_filepath is correct and the YAML is valid - "Model not found": Check that model files exist in
models/directory or are embedded in Docker container - GCP authentication errors: Run
gcloud auth application-default login - Memory errors: Increase memory allocation in config
resources.memorysection - Storage path errors: For GCP, ensure paths use
:gcs:prefix; for SLURM, use absolute paths - Missing alignment points: Ensure alignment point shapefiles exist for step2 temporal registration
- User-Specific Configuration: Depending on your system's resource allocation, you may need to adjust certain parameters in the uas_config.yaml file:
- partition: This value is cluster-specific and may need to be changed to match the partitions available on your HPC system.
- memory: The default memory setting may not be compatible with all environments. If you encounter system or scheduler errors, adjust the memory value based on what your user allocation supports.
Each step includes validation to check if outputs were created successfully. Check logs in:
- SLURM:
processing/logs_*/ - GCP: Google Cloud Console → Batch → Jobs → Logs
UAS Imagery is increasingly being used by farmers and agricultural researchers. While farmers commonly rely on commercial scouting services that have their own proprietary pipelines, these are unavailable to agricultural researchers who are looking to create novel approaches to weed detection, nutrient management, and plant disease utilizing AI phenotyping. In our case, a UAS pilot was able to conduct more than 400 flights across a total of 700 fields in the summer of 2025 across small-plot and on-farm research fields, generating nearly 4 TB of imagery utilizing both RGB and multispectral sensors. Our workflow for generating AI phenotypes of canopy cover, spectral reflectance, and growth stage included 15 unique Python scripts. To process these manually would have involved thousands of unique interdependent jobs. We created a UAS orchestration engine to solve our problem of processing many terabytes of aerial imagery and running thousands of jobs using a directed acyclic graph (DAG) approach which maximizes parallel processing capability. While originally developed for SLURM HPC, it also contains an implementation for Google Cloud Platform and could be extended to other cloud platforms as needed. The UAS Orchestration Engine was built by researchers for researchers. It is open-source and modular, so that researchers can use many of the common building blocks such as orthomosaic creation and plot tile image extraction while adding steps that are unique to their own use case.
- Multi-Platform Support: Run on HPC clusters (SLURM) or cloud platforms (GCP Batch, with AWS/Azure support in development)
- Scalable Architecture: Process hundreds or thousands of flights in parallel using containerized workflows
- On-Demand Processing: Folder-watching capability automatically initiates processing as new imagery arrives
- Modular Pipeline: 15+ configurable processing steps from raw imagery to AI inference and visualization
- Dual Georeferencing Pathways: Supports both orthomosaic-based workflow and direct georeferencing with image registration
- Automated Orthomosaic Generation: Integration with OpenDroneMap for creating georeferenced mosaics
- Temporal Alignment: Automatic registration of multi-temporal imagery for consistent AI training datasets
- AI Phenotyping: Inference modules for crop growth stage, canopy cover, and spectral reflectance
- GeoJSON Generation: Automated creation of plot-level phenotypic data for visualization
- Web-based Visualization: Map tile generation for interactive web viewers
- Docker Containerization: Consistent execution environments across platforms
