Skip to main content

Rigorous photogrammetric pipeline for wind turbine 3D height estimation via satellite imagery.

Project description

🌪️ Academic Wind Turbine Height Estimator

A rigorous photogrammetric deep learning pipeline designed to automatically detect wind turbines and invert their physical 3D heights from single-view optical satellite imagery.

🌟 Core Architectural Breakthroughs

Developed for metrology-grade accuracy, this architecture resolves standard optical illusion issues prevalent in conventional remote sensing estimations.

  • Rigorous Geometric Inversion (Case 1-3): Implements a comprehensive spatial projection model. Computes true physical height by evaluating the azimuthal divergence between solar illumination and satellite observation vectors, effectively resolving direct shadow and collinear occlusion scenarios.
  • Dynamic GSD Resolution: Features an Auto-Sense + Manual Fallback mechanism. Extracts Ground Sample Distance directly from GeoTIFF spatial metadata (rasterio.res), with CLI overrides for non-georeferenced imagery.
  • Robust Inference Pipeline: Deploys a custom Center-Distance NMS to suppress overlapping bounding boxes on rotary blades, coupled with an Exception Suppression module to maintain pipeline continuity during keypoint occlusion.

📄 Metadata Requirements (XML Parsing)

The system features a generalized XML parser designed to be compatible with various satellite platforms (e.g., Gaofen, Ziyuan). To utilize the automatic geometry extraction, your metadata .xml file must contain tags matching any of the following conventions (case-insensitive):

Geometric Parameter Accepted XML Tag Names (Fuzzy Matching)
Solar Elevation <SunElevation>, <SolarElevation>
Solar Azimuth <SunAzimuth>, <SolarAzimuth>
Satellite Elevation <SatelliteElevation>, <ViewingElevation>
Satellite Azimuth <SatelliteAzimuth>, <ViewingAzimuth>

If these tags are entirely missing, the system will execute with a safe default (Nadir viewing) unless manually overridden via CLI.

🚀 Quick Start & CLI Execution

1. Environment Initialization

pip install -r requirements.txt
2. Execution Protocols
Execute the inference pipeline via CLI based on your spatial data availability.

Option A: Standard GeoTIFF (Auto-GSD & Auto-Geometry)

Bash
python main.py --tiff data/demo.tif --xml data/demo.xml
Option B: Non-Georeferenced Imagery (Manual GSD Injection)

Bash
python main.py --tiff data/demo.tif --xml data/demo.xml --gsd 0.8
Option C: Missing Metadata (Full Geometric Override)
Note: Use the following protocol for explicit parameter injection if the XML lacks the required tags.

Bash
python main.py --tiff data/demo.tif --xml data/demo.xml \
  --sun_ele 60.5 --sun_azi 120.0 \
  --sat_ele 85.0 --sat_azi 0.0 \
  --gsd 0.8
📊 Output Artifacts
Upon successful execution, verified artifacts are generated in the output/ directory:

final_heights.csv: Contains extracted Geocoordinates (Lon/Lat) and Calculated Physical Height (m).

visualizations/: Radiometrically normalized image chips featuring topological measurement vectors for academic verification.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

wind_turbine_academic_zt-1.0.0.tar.gz (9.7 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

wind_turbine_academic_zt-1.0.0-py3-none-any.whl (9.8 kB view details)

Uploaded Python 3

File details

Details for the file wind_turbine_academic_zt-1.0.0.tar.gz.

File metadata

File hashes

Hashes for wind_turbine_academic_zt-1.0.0.tar.gz
Algorithm Hash digest
SHA256 0b8da4f9c8f457eaa88c372125e6c4cf8ffddc90b67babc9d69fcd13c8d290eb
MD5 2a2d363137251252cc46a24473f61674
BLAKE2b-256 f390894d64a4605a3bb0cad8e7d2ce36f47c32e166feaec2e18d20841d76d2d9

See more details on using hashes here.

File details

Details for the file wind_turbine_academic_zt-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for wind_turbine_academic_zt-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 61ed541cc80d590ebf0309cba48bf5bba63c45f803316763077244e7f6ae598b
MD5 cf25cda950464aff2d8294bf2fe140cd
BLAKE2b-256 896e0733d1ae20fc262010bfee5e54444e6e323289c1cb2ec7aca5defa69565e

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page