File size: 3,011 Bytes
20e1b5d
 
 
 
1f893f3
20e1b5d
 
 
 
401aaf2
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
---
title: SatDetect - Satellite Change Detection
emoji: πŸ›°οΈ
colorFrom: gray
colorTo: green
sdk: docker
app_port: 7860
---

# Satellite Change Detection β€” Standalone Web App

Standalone web application for satellite image change detection with **user accounts**, **database storage**, and a **clean, modern UI**.

## Features

- **Login / Register** β€” JWT-based auth, passwords hashed with bcrypt
- **Database** β€” SQLite (or set `DATABASE_URL` for PostgreSQL); stores users and detection runs
- **Change detection** β€” Same model as the original app: AI-based, image difference, feature-based, hybrid
- **Object classification** β€” Changed regions labeled as Water, Vegetation/Tree, Building, Road, Bare Ground/Soil
- **History** β€” List of past runs with overlay images and stats
- **UI** β€” Single-page app with a dark, β€œcontrol room” style and teal accents

## Setup

1. **Create a virtual environment (recommended)**

   ```bash
   cd change_detection_webapp
   python -m venv venv
   source venv/bin/activate   # Windows: venv\Scripts\activate
   ```

2. **Install dependencies**

   ```bash
   pip install -r requirements.txt
   ```

3. **Run the app**

   ```bash
   uvicorn app.main:app --reload --host 0.0.0.0 --port 8000
   ```

4. Open **http://localhost:8000** in your browser.

## First run

- The SQLite DB and `data/` (overlay images) are created automatically on first use.
- Register a new account from the welcome screen, then sign in.
- Upload **Before** and **After** images, choose a method, and click **Run detection**.
- Results appear below; runs are saved in **History**.

## Configuration

- **Database**: set `DATABASE_URL` (e.g. `postgresql://user:pass@host/db`) to use another DB; otherwise SQLite under `data/satellite_app.db` is used.
- **JWT**: set `SECRET_KEY` in `app/auth.py` (or via env) in production.

## Project layout

```
change_detection_webapp/
β”œβ”€β”€ app/
β”‚   β”œβ”€β”€ main.py           # FastAPI app, routes
β”‚   β”œβ”€β”€ database.py       # SQLAlchemy, session
β”‚   β”œβ”€β”€ models.py         # User, DetectionRun
β”‚   β”œβ”€β”€ auth.py           # JWT, password hashing
β”‚   └── detection_engine.py  # Change detection (no Streamlit)
β”œβ”€β”€ static/
β”‚   β”œβ”€β”€ css/style.css     # Styles
β”‚   └── js/app.js         # Frontend logic
β”œβ”€β”€ templates/
β”‚   └── index.html        # Single-page UI
β”œβ”€β”€ data/                 # Created at runtime (DB + overlays)
β”œβ”€β”€ requirements.txt
└── README.md
```

## API (for integration)

- `POST /api/auth/register` β€” body: `{ "email", "password", "full_name" }`
- `POST /api/auth/login` β€” body: `{ "email", "password" }` β†’ returns `access_token`
- `GET /api/me` β€” header: `Authorization: Bearer <token>`
- `POST /api/detect` β€” form: `before`, `after` (files), `method`, `title`, etc. β†’ returns stats, regions, overlay base64
- `GET /api/history` β€” list of current user’s runs
- `GET /api/overlay/<path>` β€” serve saved overlay image