BRKMYR/ AI Builder Portfolio/ SAR Intelligence Pipeline
A five-notebook Sentinel-1 SAR workflow. From ordering satellite tiles through UP42, to change detection, ship detection with AIS fusion, InSAR-based damage assessment, and a fused GeoJSON intelligence product. Public ESA Copernicus data only, no restricted imagery.
Problem
Synthetic aperture radar is the only earth-observation modality that works around the clock and through weather. That is why the last several years of open-source geospatial work have leaned into Sentinel-1. But the tooling to turn a raw SAR tile into a decision-ready intelligence product is scattered across academic notebooks and single-purpose research code. A product team that wants to answer "did anything change at this port between Tuesday and Friday" ends up gluing together six libraries and reading four papers before they get an answer.
The bar for a shippable pipeline is not novelty. It is that a single Sentinel-1 scene ID goes in and a shareable GeoJSON comes out, with the steps in between reviewable by a domain analyst.
Solution
Each notebook is a link in the chain. Notebook 1 orders and prepares the SAR stack. Notebooks 2, 3, and 4 run the three main analytics (change detection, ship detection, InSAR damage). Notebook 5 fuses their outputs into an interactive map plus a structured GeoJSON feed. All inputs are Sentinel-1 tiles via the UP42 Python SDK; no restricted or licensed imagery is required.
Notebooks
Reference code
Two-parameter constant-false-alarm-rate detector. Ships appear as bright targets against darker ocean; CFAR adapts to local sea clutter statistics so a fixed threshold does not miss subtle contacts or drown in swell.
def cfar_ship_detector(sar_image: np.ndarray,
guard: int = 5,
background: int = 15,
pfa: float = 1e-6) -> np.ndarray:
"""Two-parameter CFAR detector optimized for ship targets in SAR.
Ships appear as bright targets against darker ocean background.
CFAR adapts to local sea clutter statistics.
"""
from scipy.ndimage import uniform_filter
# ... local mean + variance from background ring,
# threshold from Gaussian tail at the specified pfa
...
Success criteria
Metrics, KPIs, evals
| KPI | Type | What it tells the PM |
|---|---|---|
| Ship-detection precision | %, AIS-labeled | Fraction of CFAR contacts that AIS says are vessels. Complements a dark-vessel score, which is the interesting cell. |
| Dark-vessel rate | count | Contacts with no AIS match. This is what the pipeline exists for: vessels the co-op tracking system does not know about. |
| Change-detection FAR | 1/km² | False-alarm rate per square kilometer at a fixed pfa. Analyst tunes to their attention budget. |
| Coherence baseline | 0-1 | Pre-event mean InSAR coherence. Sets the "quiet" baseline against which damage is a drop, not an absolute threshold. |
| Time-to-product | minutes | Wall time from scene ID to fused GeoJSON. Bounded by download speed; analysis is CPU-cheap once the stack is local. |
| Product size | MB per scene | GeoJSON + map tiles for one scene. Determines how many scenes a browser client can carry. |