Inspiration

Coal seams under the Jharia coalfield in Jharkhand caught fire in 1916 and some are still burning. The ground above them sinks, and haul roads, homes and rail lines sit on top. We study at BIT Mesra, a few hours away, and the closures happen too late: someone notices smoke or a crack, and a road gets shut after the ground has already given way.

Landsat flies over Jharia every 8 days and its thermal band can see hot ground. Nobody was turning that into a decision about which road to close. That was the gap we went after.

What it does

Jharia Fire Watch reads every Landsat 8 and 9 pass over the coalfield and:

  • converts the thermal band to land surface temperature and masks cloud, shadow and water
  • finds ground that is hotter than it should be, ignoring coke ovens and other industrial heat
  • follows each fire from pass to pass and projects where it can spread over the next 48 days
  • runs an agent that closes a road on its own only when a fire is high-risk, close by, and it is at least 70% sure. Everything else goes to a person with a recommendation. Only a person can reopen a road.

Mine-safety officers use the dashboard to approve or refuse the agent's calls. Residents and truck drivers get a public page listing closed roads and the nearest fire, no login needed. Every decision is logged with its evidence.

It is live on AWS Graviton, with a simulated season to click through and a read-only run on 23 real Landsat scenes from Nov 2025 to Oct 2026.

How we built it

Each pass goes through five steps:

  1. Temperature. Band 10 radiance becomes brightness temperature, then land surface temperature with NDVI-based emissivity. QA_PIXEL gives us cloud and water.
  2. Alignment. SIFT with USAC_ACCURATE aligns the pass to a reference. ALIKED + LightGlue on OpenCV 5's new DNN engine aligns it independently, and if they disagree the agent can call DISK around the hotspot.
  3. Anomalies. Dark coal and bare dumps heat up in sunlight, so we predict how hot each pixel should be from its albedo and NDVI, and subtract that and the local background from the measured temperature. Whatever heat is left over can't be explained by the surface, so it's likely a fire. Hysteresis thresholds and OpenCV contours turn that leftover heat into hotspot outlines.
  4. Tracking and forecast. DIS optical flow measures how the hot front moved since the last pass. An advection-diffusion ensemble projects a 48-day spread cone.
  5. Decision. Each hotspot gets a risk and confidence score, plus precedent from similar past fires found with cv2.ANNIndex. Then the agent acts.

Every map layer carries its provenance as XMP metadata written with OpenCV 5's imencodeWithMetadata. The AWS stack is S3, DynamoDB, SNS email alerts, SQS on the USGS new-scene topic, CloudWatch traces and an optional Amazon Nova Lite planner on Bedrock, deployed with one script. There are 115 tests.

Challenges we ran into

  • Hot coal that isn't on fire. Without the albedo/NDVI correction, precision dropped to 0.16. Sunlit coal dumps looked exactly like fires.
  • A pond shore showed up as a fire in our held-out test world. That led to matching the 100 m thermal footprint and adding a water mask.
  • Our first agent rules were wrong. The scenario suite caught it closing a road for a fire 500 m away based on the projection alone, and ignoring a real fire on the edge of a coke plant. Both are fixed.
  • Real roads are packed around the mines. On real data we had to raise thresholds, cut the closure distance to 100 m, and only let the agent close mine haul roads by itself. Public roads always go to a person.
  • AWS Free plan limits. The live instance is a t4g.small with 2 GB, so a full pass takes 42 s there versus 7.3 s on two x86 vCPUs.

Accomplishments that we're proud of

On synthetic coalfields where every fire is known:

  • Temperature retrieval: 0.10 K mean absolute error
  • Hotspot detection: precision 1.00, recall 0.97 on the tuned world and 0.86 on the held-out one
  • 48-day spread cone: covers 92% of the ground a fire later burned, against 78% for a circle of the same area
  • Reach-a-road forecast: Brier score 0.038, against 0.145 for the baseline
  • Precedent search: ROC AUC 0.97, leaving one fire out at a time
  • Agent, 36 scripted situations: 35 match a safety officer's call, with no unneeded closures and no fire dismissed

On the real 2025-26 season, the median hot area on clear passes was 2.9 km². NRSC reported 1.89 km² for 2020, so the detector lands in the right range.

What we learned

A fire detector that is right most of the time is not enough when its output closes a road that people earn a living on. Most of our effort went into deciding when the system should not act alone. Writing down failures also paid off: every scenario the agent got wrong became a rule we fixed.

We also learned to separate what is proven from what isn't. The synthetic results have ground truth. The real scenes don't.

What's next for Jharia Fire Watch

  • Validate the real-scene hotspots against NASA FIRMS and BCCL field surveys
  • Tighten the spread cone, which is still about 2.5 times wider than the area fires actually reach
  • Run the PaliGemma 2 vision-language model for real so unmapped plants stop reaching people as false alarms (the loop is tested, the full 3B model hasn't run yet)
  • Benchmark on OpenCV's COOL build on Graviton4 c8g instances
  • Per-person logins and a staffed review queue before any real deployment, then extend to Raniganj and other burning coalfields

Built With

Share this project:

Updates

Submission history