Kit Schnelle
← Projects
─ ACTIVE / GEOINT

OSINT Geolocation Engine

Multi-signal pipeline that estimates the geographic origin of a photograph from EXIF metadata and visual content. When EXIF GPS is present and consistent with terrain, the engine returns coordinates directly. When metadata has been stripped or spoofed, independent visual signals (signage, scene type, shadow geometry, road topology, satellite tile correlation) get fused into a ranked candidate list.

─ DEMO
pre-computed pipeline outputs
Test Cases
3 samples
Input
JPEG
[demo image: Intact EXIF]
iPhone photo with full EXIF metadata. Pipeline short-circuits at intake with confidence 1.00.
[ok]Pipeline Output
short-circuit @ intake
Candidates
30.4299, -97.7004exif_gps1.00
Extracted Metadata
timestamp2020-11-24T21:44:40
deviceApple iPhone 11 Pro Max
altitude249.3 m
bearing209.2°
software14.1
Geolocation
30.4299, -97.7004
loading map...
─ ARCHITECTURE
Pipeline Modules
10 total
intake— EXIF metadata + altitude consistency check
DONE
ocr— Text extraction → geocoding
WIP
scene— Biome / architecture classification (CLIP)
PLANNED
shadow— Solar inverse solving from shadow azimuth
PLANNED
tile_fetcher + feature_match— Satellite tile retrieval and correlation
PLANNED
road_match— OSM road bearing histogram matching
PLANNED
env_features— Environmental priors (scope TBD)
PLANNED
candidate_search— Candidate generation and pruning
PLANNED
fusion— Multi-signal weighted clustering
PLANNED
─ STACK
Implemented
  • Python 3.10+, pytest
  • exifread, Pillow, requests
  • FastAPI (orchestrator scaffolding)
  • Open-Elevation (terrain validation)
Planned
  • HuggingFace transformers (CLIP)
  • EasyOCR
  • OSMnx + NetworkX
  • OpenCV (tile correlation)
  • Folium (output visualization)
─ KNOWN LIMITATIONS

Heuristic confidence. Confidence values are rule-based, not calibrated against a labeled benchmark. Treat them as ordinal rankings.

EXIF is editable. The altitude check catches one specific spoofing pattern. A spoofer who picks plausible coordinates AND a plausible altitude will still get 1.00 from intake.

External API dependency. Altitude validation depends on Open-Elevation. When unreachable, the check passes through silently — a spoofed altitude could slip through during an outage.

No ground-truth eval yet. Visual modules will need benchmarking against a labeled image dataset. Accuracy claims are speculative until then.