update chức năng ndvi time seriese
This commit is contained in:
@@ -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
|
||||
Reference in New Issue
Block a user