# 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