BackActive development
Active development2025 — presentAuthor

OpenDroneKit

Offline drone inspection — mission planning, flight, geospatial reconstruction and defect intelligence

An offline-first inspection system that plans the flight, flies it, reconstructs the asset, finds the defects, and refuses to answer when it cannot answer honestly.

167

Documented capabilities

As enumerated in the repository's own documentation.

~40,000

Defect images processed

Metal, brick and mixed defect imagery through detection and segmentation.

Problem

Infrastructure inspection happens where the connectivity is not. A system that assumes a cloud backend is useless on a bridge, a tower or a remote site, which is where the inspections are.

The second problem is trust. An inspection tool that guesses produces reports nobody can act on — a fabricated defect wastes a crew's day, and a missed one is a structural risk. Deciding what the system does when it is uncertain is a design question, not an implementation detail.

What I built

An offline-first desktop system covering the whole inspection loop, from planning a flight to producing a report.

  • Mission planning, including terrain-aware planning
  • MAVLink flight, validated against SITL
  • COLMAP reconstruction with georeferencing
  • Orthomosaic, DSM, DTM and hillshade generation
  • Defect analytics with georeferenced defect projection
  • Coverage QA, so gaps in the survey are visible rather than assumed away
  • Crack propagation estimation and asset health scoring
  • Multiple export formats and operator workspaces
  • PostGIS storage, distributed processing, model provenance tracking
  • Report generation

Architecture

Plan, fly, reconstruct, analyse, report — with each stage producing artefacts the next can verify rather than trust. Georeferencing is applied at reconstruction so defects land in world coordinates rather than image coordinates, which is what makes coverage QA and asset health scoring meaningful across repeat surveys.

Model provenance is tracked explicitly: which model produced a given finding is recorded with the finding, so a later model change does not silently rewrite history.

Refuse rather than fabricate

The governing design rule. Where the system is not confident — insufficient coverage, a reconstruction that did not converge, a model operating outside its validated domain — it declines to produce a finding instead of producing a low-confidence one.

This costs recall and buys the only thing that matters in an inspection report, which is that a stated finding can be acted on.

Model evaluation as a first-class concern

Several model families were evaluated rather than one being adopted: crack presence classification, crack segmentation, structural damage detection, corrosion severity segmentation and semantic land cover.

Models were rejected. Known failure modes, dataset limitations, model identity checks and holdout design issues are recorded alongside the ones that were kept — a rejected model with a documented reason is more useful to the next person than a leaderboard.

An inspection, end to end

Each stage produces artefacts the next one can verify rather than trust. The branches are where the system declines to continue — which is the design, not a failure of it.

  1. Plan the mission

    Terrain-aware planning over the asset.

  2. Fly it

    MAVLink, validated against SITL before anything real.

  3. Reconstruct

    COLMAP, then georeferencing so results land in world coordinates.

    Reconstruction did not converge — stop, and say so
    Converged — produce orthomosaic, DSM, DTM, hillshade
  4. Coverage QA

    Gaps in the survey — declared, not silently averaged over
    Coverage sufficient — run defect analytics
  5. Detect and project defects

    Findings projected into world coordinates, with the model that produced each one recorded alongside it.

    Model outside its validated domain — refuse the finding
    Confident — keep it, and estimate crack propagation
  6. Asset health score and report

Models evaluated

Several families were tried and some were rejected. A rejected model with a documented reason is more useful to the next person than a leaderboard position.

TaskOutcome
Crack presence classificationEvaluated
Crack segmentationEvaluated
Structural damage detectionEvaluated — confusion matrix published, including the classes it misses
Corrosion severity segmentationEvaluated
Semantic land coverExperimental
Rejected modelsKept on record with their failure modes, dataset limitations and holdout design issues

Experiments

Model selection across inspection tasks

Question
Which models are trustworthy enough to put behind an inspection report?
Method
Evaluation across crack presence classification, crack segmentation, structural damage detection, corrosion severity segmentation and semantic land cover, with model identity checks and holdout design review.
Result
Some models were adopted and others explicitly rejected, with failure modes and dataset limitations recorded for both.

Reconstruction and flight validation

Question
Does the pipeline hold up outside of curated inputs?
Method
Real reconstruction verification and SITL validation of the flight stack.
Result
Verified end to end against simulated flight and real reconstruction outputs.

Limitations and failure modes

  • Holdout design issues were identified during model evaluation and constrain how far the reported model results generalise.
  • Dataset limitations are documented per model; several families were rejected outright rather than shipped with caveats.
  • The refuse-rather-than-fabricate rule means coverage gaps surface as declined findings, not as completed reports.

Gallery

Detector output on held-out CODEBRIM bridge imagery — efflorescence and spallation, with confidences
Detector output on held-out CODEBRIM bridge imagery — efflorescence and spallation, with confidences
Normalised confusion matrix, structural detector. The background row is the honest part: most defect classes are still missed more often than caught, which is why models get rejected rather than shipped
Normalised confusion matrix, structural detector. The background row is the honest part: most defect classes are still missed more often than caught, which is why models get rejected rather than shipped

Not yet captured

  • Current operator UI
  • Terrain-aware mission planning
  • Reconstruction outputs — orthomosaic, DSM, hillshade

Attribution

Built by me
OpenDroneKit is mine — planning, flight integration, reconstruction pipeline, geospatial outputs, defect analytics and the evaluation work.
Based on external research
COLMAP, MAVLink, YOLO, U-Net and FEniCSx are upstream tools and models, integrated here rather than authored.
Experiment performed by me
The model evaluation and rejection decisions across the inspection task families.

Related