AI Cyclone Intelligence: satellite-image intensity classification with an honest, transparent forecast dashboard
Smart India Hackathon 2026 · Problem Statement SIH26070 · North Indian Ocean basin
PRISM-TC (dashboard name: VAYUVEGA) looks at a satellite image of a tropical cyclone, runs it through a deep-learning model, and shows the result on an interactive dashboard: intensity class, confidence, class probabilities, a past track and a 24-hour outlook.
💡 Our rule: no fake confidence. Every value on screen carries a tag, MODEL (from the AI), SIMULATED (historical-analog / rule-based) or EST. (estimated from the predicted class), so nobody is ever misled about what the AI actually predicted.
| Feature | What it does | |
|---|---|---|
| 🛰️ | AI intensity classification | EfficientNet-B0 wind-regression ensemble predicts the cyclone intensity class from an image |
| 📊 | Confidence + class probabilities | Shows how sure the model is, not just its top answer (with a note that confidence can run high) |
| 🗺️ | Live track map | Observed IBTrACS track, simulated 24 h outlook and current position on a Leaflet map |
| 📈 | Intensity outlook | Simulated max sustained wind for the next 24 hours |
| ⚡ | Rapid-intensification check | Rule-based environment check (SST, wind shear, humidity) with 850 hPa vorticity shown for context only |
| 🎬 | Judge Demo Mode | 3 prepared scenarios that run without needing internet or a good example image on hand |
| 🚫 | OOD rejection | Invalid, non-cyclone documents are rejected instead of being force-classified |
| 🧾 | Data provenance | See the image source, storm ID and position behind every prediction |
| 🧪 | Backtest & Transparency pages | Model performance computed from the project's own files, nothing filled in by hand |
| 🛰️ | Satellite view | Live INSAT visualization |
- Valid TCIR sample → AI classification
- Invalid document → OOD rejection
- Live satellite → INSAT visualization
| Output | Source | Tag |
|---|---|---|
| Intensity class | 🤖 EfficientNet-B0 ensemble | MODEL |
| Confidence | 🤖 EfficientNet-B0 ensemble | MODEL |
| Class probabilities | 🤖 EfficientNet-B0 ensemble | MODEL |
| Wind | 📏 Class range from the predicted category | EST. |
| Track outlook | 📚 Copied from a similar historical storm (IBTrACS) | SIMULATED |
| Intensity (wind) outlook | 📚 Historical-analog | SIMULATED |
| Pressure | 📏 Rule-based | SIMULATED |
| Risk index | 📏 Rule-based | SIMULATED |
| Rapid-intensification flag | 📏 Rule-based | SIMULATED |
- 53.7% exact-class match
- 93.1% within one class
- Measured on a 12-storm, 520-image, storm-wise held-out test set (the model never saw these storms in training)
- 3,205 storm observations (every 3 h) · 75 distinct storms · North Indian Ocean, seasons 2003-2016
- Max wind range 15-145 kt (mean 40.9 kt)
- 8.5× class imbalance (Depression vs Extremely Severe). Always guessing Depression would score 48%, which is why we also report within-one-class accuracy.
TCIR (train/test) · IBTrACS (labels) · MOSDAC / INSAT (Biparjoy validation + live view) · ERA5 (environment check)
PRISM-TC-Frontend/
├── index.html · style.css · app.js # 🎨 the dashboard
├── backend/
│ ├── server.py # 🌐 serves the dashboard AND the /api routes
│ ├── logic.py # 🧭 track / risk / class logic
│ ├── predict.py # 🤖 the AI model call (needs model.pth, NO normalization)
│ ├── model.pth # ⚠️ copy this in (final model from Drive → scripts/)
│ ├── data/ # 🌪️ historical storm positions (IBTrACS)
│ ├── samples/ # 🖼️ test images for the demo
│ ├── tests/smoke_test.py # ✅ sanity checks
│ └── requirements.txt
├── CLAUDE.md # 📝 notes for Claude (read first if you use it)
└── _original_frontend_backup/ # 💾 original design files, untouched
Steps written for Windows, run from the project folder.
1️⃣ Install dependencies
pip install -r backend/requirements.txt2️⃣ Add the model 🧠
Copy model.pth into the backend/ folder.
3️⃣ Start the server
python backend/server.py4️⃣ Open the dashboard 🌐 Go to http://localhost:8000, then either:
▶️ press Run Demo, or- 🖼️ pick a sample image / upload your own and press Generate AI Prediction
The top-left engine card and the sidebar show ONLINE · model loaded when the real model is running. Without model.pth the app runs in DEMO MODE with clearly labelled placeholder predictions.
python backend/tests/smoke_test.py # check the backend
python backend/tests/smoke_test.py --real # check with the real modelDeployed on Render: https://prism-tc.onrender.com
⏳ Free-tier instances can take a little while to wake up on the first visit.
Map and chart libraries and fonts load from CDNs. With no internet, the page falls back to a simple track plot and chart, so the demo keeps working. 🙌
- 🎨 Frontend: HTML, CSS, JavaScript, Leaflet + OpenStreetMap
- ⚙️ Backend: Python web server with
/apiroutes - 🤖 Model: EfficientNet-B0 (PyTorch,
model.pth) - 🌪️ Data: TCIR, IBTrACS, MOSDAC/INSAT, ERA5
| Member | |
|---|---|
| 🌀 | Binayak Mandal |
| 🌀 | Kaushikee Karmakar |
| 🌀 | Ankita Kundu |
| 🌀 | Anurag Tiwari |
| 🌀 | Loknath Acharya |
| 🌀 | Kripa Das |
Built with 💙 for Smart India Hackathon 2026 (SIH26070).
🌀 Turning satellite pixels into cyclone insight, honestly. 🌀