update chức năng ndvi time seriese

This commit is contained in:
Victor Phan
2025-12-22 07:20:41 +07:00
parent 46da481029
commit f3ff5d81a6
12 changed files with 3558 additions and 66 deletions
+202
View File
@@ -0,0 +1,202 @@
# 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