Skip to content

munish0838/parali

Repository files navigation

Parali — Satellite Crop Burn Detection

Parali is a real-time stubble burning detection platform for northern India. It combines Sentinel-2 satellite imagery, a fine-tuned Vision Language Model, and live NASA FIRMS fire data to give district officers, enforcement teams, and researchers a tool that actually works — instead of a government dashboard that misses 96% of fires.

Built for the Liquid Space Hack · May 2026

📺 Watch the demo


Quickstart

git clone https://github.com/munish0838/parali
cd parali
npm install

Create .env.local:

FIRMS_MAP_KEY=your_key          # free at https://firms.modaps.eosdis.nasa.gov/api/
CDSE_CLIENT_ID=your_client_id   # https://dataspace.copernicus.eu/
CDSE_CLIENT_SECRET=your_secret
LLAMA_URL=http://localhost:8080  # llama-server running LFM2.5-VL
npm run dev
# open http://localhost:3000

That's it for the frontend + live FIRMS data. Sentinel-2 imagery analysis additionally needs CDSE_CLIENT_ID / CDSE_CLIENT_SECRET. VLM inference needs llama-server (see VLM Setup below).


The Problem

India's official fire monitoring relies on VIIRS and MODIS satellites that pass at 10:30 AM and 1:30 PM. By 2025, over 90% of large crop fires in Punjab were being lit after 3 PM — after every government satellite had already passed. A 2025 CEEW field study found 169 burnt fields in Sangrur district over two days. The government's system detected 7.

Three approaches exist. None of them scale:

Approach Why it fails
Satellite monitoring (VIIRS/MODIS) Fixed overpass times — farmers burn at 3 PM, satellites already gone
Ground deployment Punjab alone has 30+ lakh hectares of paddy — impossible to staff at all hours
Farmer incentives (₹2,500/acre) Unenforceable without verified burn data

The research proving all of this was published. The Supreme Court cited it. There was just no software.


What We Built

A VLM that reads satellite imagery like a remote sensing expert

Every existing tool uses spectral index math (BAIS2, NBR, MIRBI): if a pixel value crosses a threshold, it's called burnt. We fine-tuned LFM2.5-VL-450M on Sentinel-2 SWIR imagery instead. It understands what burn scars vs bare soil vs active fire look like in infrared — and produces a structured assessment:

{
  "burn_detected": true,
  "burn_severity": "high",
  "burn_fraction_estimate": 0.65,
  "burn_freshness": "fresh",
  "active_smoke_visible": false,
  "vegetation_phase": "post_harvest"
}

This is, to our knowledge, the first VLM applied to crop burn detection on Sentinel-2. A 2025 ScienceDirect review of remote sensing fire detection methods explicitly identified VLMs as "promising but not yet applied." We applied one.

Burn scars don't disappear after 3 PM

Sentinel-2 passes every 5 days at 10m resolution. Even if a fire happens after every VIIRS overpass, the scar is still there on the next Sentinel-2 pass. Our model reads it automatically across all 23 tracked districts.

Live fire hotspots via NASA FIRMS

We pull dual-satellite FIRMS data (VIIRS SNPP + NOAA-20) — the same feed the government uses — but display it alongside our burn scar analysis so the coverage gaps are visible rather than hidden.

Why this should run in orbit

Sentinel-2 generates ~1.6 TB of imagery per day. Downlinking all of it to detect a few hundred burn patches is massively wasteful. Running our ONNX-exported model directly on a satellite (e.g. NVIDIA Orin) means only a 200-byte JSON alert is transmitted per detected burn — not a 5MB tile. The ONNX export (munish0838/parali-v1-onnx) is satellite-ready today.


Architecture

┌─────────────────────────────────────────────────────────────┐
│                     Next.js Frontend                        │
│  /           Hero + Problem/Solution landing page           │
│  /dashboard  MapLibre interactive map + point analysis      │
│  /monitor    Live FIRMS fire hotspot map                    │
│  /trends     6-year burn trend charts (CREAMS + live)       │
└──────────────┬──────────────────────────────────────────────┘
               │ API Routes
   ┌───────────┼───────────────┐
   ▼           ▼               ▼
/api/firms  /api/imagery    /api/analyse
NASA FIRMS  Copernicus CDSE  LFM2.5-VL
live CSV    Sentinel-2 tiles  VLM inference
                     │
          ┌──────────┴──────────┐
          │  orchestrator/      │
          │  main.py (FastAPI)  │
          │  Python alternative │
          └─────────────────────┘

Imagery pipeline:

  1. User clicks a point on the map
  2. /api/imagery authenticates with Copernicus Data Space, fetches RGB + SWIR + fire composites for the nearest cloud-free Sentinel-2 pass (up to 60 days back)
  3. /api/analyse sends both composites to LFM2.5-VL via llama-server with a structured remote sensing prompt
  4. VLM returns a JSON burn assessment in ~2–4 seconds
  5. Results render on the map with severity overlay

Model & Training

Base model LiquidAI/LFM2.5-VL-450M
Fine-tuned weights munish0838/crop-burn-detector-v2
ONNX export munish0838/parali-v1-onnx
Training notebook training/01_finetune.ipynb
Evaluation notebook training/02_evaluate_v7.ipynb
License CC-BY-4.0

Benchmark — Base vs Fine-tuned

Evaluated on 178 clear-sky held-out test tiles.

Model burn_detected burn_severity smoke_visible veg_phase Overall
Base LFM2.5-VL-450M 73.6% 11.8% 0.0% 24.2% 21.9%
Fine-tuned (ours) 73.6% 53.9% 100.0% 46.6% 74.8%
Δ +42.1pp +100pp +22.4pp +52.9pp

Primary metric (burn_detected + burn_severity): 42.7% → 63.8% (+21.1pp)

The base model produces valid JSON on every sample but collapses severity predictions to a single dominant class and scores 0% on smoke visibility. Fine-tuning on domain-specific Sentinel-2 pairs corrects the severity distribution and fully unlocks every output field.

Training configuration

Hyperparameter Value
Method LoRA (rank 32, alpha 32, dropout 0.05)
Trainable parameters 16.3M / 465M (3.5%)
Epochs 5
Learning rate 2e-5 (cosine decay + 5% warmup)
Effective batch size 16 (batch=1, grad_accum=16)
Precision BF16
Loss Class-balanced cross-entropy (no-burn weight ×1.86)
GPU NVIDIA RTX A4000 (16 GB)
Training time ~16 min

Dataset

Raw imagery munish0838/crop-burn-detection-raw
Labelled (training) munish0838/crop-burn-detection-labeled
Total samples 1,370 (1,103 train / 267 test)
Coverage 55 districts · 5 Indian states · 22–31.7°N, 73.6–83.7°E
Date range March – November 2025
Tile size 5km × 5km Sentinel-2 tiles (RGB + SWIR)
Source DPhi SimSat API → ESA Copernicus

Full Setup

VLM inference server

# Download the fine-tuned ONNX model
huggingface-cli download munish0838/parali-v1-onnx

# Or run via llama-server with the merged weights
llama-server \
  --model path/to/lfm2.5-vl-merged.gguf \
  --port 8080 \
  --ctx-size 4096 \
  --n-gpu-layers 99

Python orchestrator (alternative to Next.js API routes)

cd orchestrator
pip install -r requirements.txt
uvicorn main:app --reload --port 8000

Environment variables

Variable Required Description
FIRMS_MAP_KEY Yes (for live fire data) Free at firms.modaps.eosdis.nasa.gov/api
CDSE_CLIENT_ID Yes (for imagery) dataspace.copernicus.eu
CDSE_CLIENT_SECRET Yes (for imagery) Same as above
LLAMA_URL Yes (for VLM) llama-server endpoint, default http://localhost:8080
SIMSAT_URL No DPhi SimSat endpoint (used during training)

Pages

Route Description
/ Landing page — problem, solution, live stats
/dashboard Interactive Sentinel-2 map — click any field to get a live AI burn assessment
/monitor Live NASA FIRMS fire hotspots across northern India
/trends District-level burn trends 2020–2026, toggle years, compare states

API Reference

POST /api/analyse

// Request
{ "lat": 30.12, "lon": 75.34, "district": "Sangrur" }

// Response
{
  "image_available": true,
  "prediction": {
    "burn_detected": true,
    "burn_severity": "moderate",
    "burn_fraction_estimate": 0.35,
    "burn_freshness": "recent",
    "active_smoke_visible": false,
    "vegetation_phase": "post_harvest",
    "image_quality_limited": false
  },
  "latency_s": 2.4
}

POST /api/imagery

Fetches Sentinel-2 RGB, SWIR, and fire composites from Copernicus for a given lat/lon and date.

GET /api/firms?days=3

Returns VIIRS dual-satellite fire counts by state for the last 1–5 days.


Stack

Layer Technology
Frontend Next.js 16 · React 19 · TypeScript
Styling Tailwind CSS v4
Animation Framer Motion
Maps MapLibre GL
Charts Recharts
ML inference LFM2.5-VL via llama-server · ONNX export
Satellite imagery ESA Copernicus Data Space (Sentinel-2 L2A)
Live fire data NASA FIRMS · VIIRS SNPP + NOAA-20
Historical data CREAMS / IARI · 2020–2025
Training data DPhi SimSat /data/image/sentinel
Orchestrator FastAPI · Python 3.11+

Data Sources

Source Use
NASA FIRMS Live fire hotspots — VIIRS SNPP + NOAA-20, 375m NRT
ESA Sentinel-2 10m multispectral imagery via Copernicus Data Space
CREAMS / IARI Historical crop fire data, 2020–2025
CEEW Field validation — 169 vs 7 burnt field study, Oct 2025
iFOREST Satellite timing exploitation analysis, 2025

About

Parali crop burn detection platform using fine-tuned small Liquid-VLM

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors