203 lines
6.0 KiB
Markdown
Executable File
203 lines
6.0 KiB
Markdown
Executable File
# Hướng Dẫn Sử Dụng Chức Năng Predict NDVI
|
|
|
|
## Tổng Quan
|
|
Chức năng mới cho phép dự đoán phân loại đất (land classification) **kết hợp** với việc xuất ra raster NDVI cho cùng một khu vực.
|
|
|
|
## Cách Sử Dụng
|
|
|
|
### 1. Truy cập Prediction Interface
|
|
- Mở trình duyệt: `http://localhost:8000/prediction`
|
|
- Hoặc từ trang chủ, click vào **Prediction**
|
|
|
|
### 2. Chọn Model
|
|
- Chọn model đã được train từ dropdown "Select Model"
|
|
- Model phải tồn tại trong thư mục `model_train/`
|
|
|
|
### 3. Vẽ Khu Vực (Bbox)
|
|
- Sử dụng công cụ vẽ hình chữ nhật trên bản đồ
|
|
- Khu vực này sẽ được dùng để:
|
|
- Load dữ liệu vệ tinh
|
|
- Tính NDVI
|
|
- Predict land classification
|
|
|
|
### 4. Cấu Hình Thời Gian & Dữ Liệu
|
|
- **Từ ngày / Đến ngày**: Khoảng thời gian lấy ảnh vệ tinh
|
|
- **Max Scenes**: Số lượng ảnh tối đa (khuyến nghị: 12)
|
|
- **Cloud Cover**: % mây tối đa (khuyến nghị: 30%)
|
|
- **Resolution**: Độ phân giải (10m hoặc 20m)
|
|
|
|
### 5. Bật Export NDVI
|
|
- ✅ Check vào "🌿 Export NDVI Raster"
|
|
- Khi bật, hệ thống sẽ:
|
|
- Tính NDVI từ Sentinel-2 (NIR - Red) / (NIR + Red)
|
|
- Xuất ra file `ndvi_YYYYMMDD_HHMMSS.tif`
|
|
- Xuất ra file `classification_YYYYMMDD_HHMMSS.tif`
|
|
|
|
### 6. Chạy Prediction
|
|
- Click "🚀 Start Prediction (với NDVI)"
|
|
- Hệ thống sẽ:
|
|
1. Load dữ liệu Sentinel-2 (bands: B02, B03, B04, B08)
|
|
2. Tính toán các spectral indices (NDVI, NDWI, NDBI)
|
|
3. Dùng model để predict land classification
|
|
4. Xuất kết quả
|
|
|
|
## Kết Quả
|
|
|
|
### Output Files
|
|
Sau khi hoàn thành, bạn sẽ nhận được 2 file trong thư mục `predictions/`:
|
|
|
|
1. **`ndvi_YYYYMMDD_HHMMSS.tif`**
|
|
- GeoTIFF chứa giá trị NDVI
|
|
- Giá trị: -1 đến +1
|
|
- CRS: EPSG:4326 (WGS84)
|
|
- Có thể mở bằng QGIS, ArcGIS, hoặc Python
|
|
|
|
2. **`classification_YYYYMMDD_HHMMSS.tif`**
|
|
- GeoTIFF chứa kết quả phân loại đất
|
|
- Giá trị: class labels (ví dụ: 0, 1, 2, 3...)
|
|
- CRS: EPSG:4326 (WGS84)
|
|
|
|
### Thống Kê Hiển Thị
|
|
Sau khi predict xong, giao diện sẽ hiển thị:
|
|
- **NDVI Statistics**:
|
|
- Mean: Giá trị NDVI trung bình
|
|
- Min: Giá trị NDVI nhỏ nhất
|
|
- Max: Giá trị NDVI lớn nhất
|
|
- Std: Độ lệch chuẩn
|
|
- **Class Distribution**: Số lượng pixel cho mỗi class
|
|
- **N Scenes**: Số ảnh vệ tinh đã sử dụng
|
|
|
|
## API Endpoint
|
|
|
|
### POST `/api/predict/with-ndvi`
|
|
|
|
**Request Body:**
|
|
```json
|
|
{
|
|
"model_filename": "model_xgboost_20231221_120000.joblib",
|
|
"min_lon": 105.6,
|
|
"min_lat": 9.3,
|
|
"max_lon": 106.2,
|
|
"max_lat": 9.8,
|
|
"start_date": "2023-03-01",
|
|
"end_date": "2023-05-31",
|
|
"max_scenes": 12,
|
|
"cloud_cover": 30,
|
|
"resolution": 20,
|
|
"export_ndvi": true,
|
|
"export_classification": true
|
|
}
|
|
```
|
|
|
|
**Response:**
|
|
```json
|
|
{
|
|
"success": true,
|
|
"message": "Prediction with NDVI completed",
|
|
"output_files": [
|
|
{"type": "ndvi", "path": "predictions/ndvi_20231221_120000.tif"},
|
|
{"type": "classification", "path": "predictions/classification_20231221_120000.tif"}
|
|
],
|
|
"ndvi_stats": {
|
|
"mean": 0.456,
|
|
"min": -0.123,
|
|
"max": 0.789,
|
|
"std": 0.234
|
|
},
|
|
"class_distribution": {
|
|
"0": 12345,
|
|
"1": 23456,
|
|
"2": 34567
|
|
},
|
|
"n_scenes": 12,
|
|
"resolution": 20,
|
|
"bbox": [105.6, 9.3, 106.2, 9.8]
|
|
}
|
|
```
|
|
|
|
## Download Files
|
|
|
|
Sau khi prediction hoàn thành, có thể download files qua:
|
|
- **UI**: Click "💾 Download GeoTIFF" trong kết quả
|
|
- **API**: `GET /api/predictions/download/ndvi_YYYYMMDD_HHMMSS.tif`
|
|
- **API**: `GET /api/predictions/download/classification_YYYYMMDD_HHMMSS.tif`
|
|
|
|
## Sử Dụng Kết Quả với Python
|
|
|
|
```python
|
|
import rasterio
|
|
import matplotlib.pyplot as plt
|
|
import numpy as np
|
|
|
|
# Read NDVI raster
|
|
with rasterio.open('predictions/ndvi_20231221_120000.tif') as src:
|
|
ndvi = src.read(1)
|
|
|
|
# Visualize
|
|
plt.figure(figsize=(10, 8))
|
|
plt.imshow(ndvi, cmap='RdYlGn', vmin=-1, vmax=1)
|
|
plt.colorbar(label='NDVI')
|
|
plt.title('NDVI Map')
|
|
plt.show()
|
|
|
|
# Read classification raster
|
|
with rasterio.open('predictions/classification_20231221_120000.tif') as src:
|
|
classification = src.read(1)
|
|
|
|
# Visualize
|
|
plt.figure(figsize=(10, 8))
|
|
plt.imshow(classification, cmap='tab10')
|
|
plt.colorbar(label='Land Class')
|
|
plt.title('Land Classification')
|
|
plt.show()
|
|
```
|
|
|
|
## Sử Dụng Kết Quả với QGIS
|
|
|
|
1. Mở QGIS
|
|
2. **Layer → Add Layer → Add Raster Layer**
|
|
3. Chọn file `ndvi_*.tif` hoặc `classification_*.tif`
|
|
4. Styling:
|
|
- NDVI: Singleband pseudocolor, min=-1, max=1, color ramp=RdYlGn
|
|
- Classification: Paletted/Unique values
|
|
|
|
## Lưu Ý
|
|
|
|
- **Thời gian xử lý**: Tùy thuộc vào kích thước bbox và số scenes (thường 2-5 phút)
|
|
- **Bộ nhớ**: Khu vực lớn + resolution cao = RAM cao
|
|
- **NDVI values**:
|
|
- < 0: Nước, đất trống
|
|
- 0 - 0.2: Đất có ít thực vật
|
|
- 0.2 - 0.5: Cây cỏ, cây trồng
|
|
- > 0.5: Rừng rậm, thực vật dày đặc
|
|
|
|
## So Sánh với NDVI Time Series
|
|
|
|
| Feature | Predict NDVI | NDVI Time Series |
|
|
|---------|-------------|------------------|
|
|
| **Mục đích** | Xuất raster NDVI + land classification | Xem xu hướng NDVI theo thời gian |
|
|
| **Output** | GeoTIFF files | Chart, CSV |
|
|
| **Dùng model** | Có (predict land class) | Không (chỉ tính NDVI) |
|
|
| **Visualize** | Bản đồ raster | Biểu đồ đường |
|
|
| **Use case** | Phân tích không gian | Phân tích thời gian |
|
|
|
|
## Troubleshooting
|
|
|
|
**Q: Lỗi "Model không tồn tại"?**
|
|
- Kiểm tra model đã được train và lưu trong `model_train/`
|
|
- Refresh danh sách model
|
|
|
|
**Q: Kết quả NDVI toàn NaN?**
|
|
- Check cloud cover (giảm xuống)
|
|
- Mở rộng time range
|
|
- Kiểm tra bbox có nằm trong phạm vi Sentinel-2 coverage
|
|
|
|
**Q: File GeoTIFF không mở được?**
|
|
- Đảm bảo file download hoàn chỉnh
|
|
- Dùng QGIS hoặc rasterio để kiểm tra
|
|
|
|
**Q: Prediction chậm?**
|
|
- Giảm resolution (20m thay vì 10m)
|
|
- Giảm max_scenes
|
|
- Thu nhỏ bbox
|