284 lines
6.7 KiB
Markdown
Executable File
284 lines
6.7 KiB
Markdown
Executable File
# Tóm tắt cập nhật Training Interface & API
|
|
|
|
## 📋 Những gì đã cập nhật
|
|
|
|
### 1. **Backend API (api_server.py)**
|
|
|
|
#### ✅ Cập nhật giá trị mặc định từ 01.train_ODC.ipynb:
|
|
- **Bbox mới**: `[105.5, 9.2, 106.4, 10.0]` (thay vì `[105.6, 9.3, 106.2, 9.8]`)
|
|
- **Thời gian mới**: `2023-03-01` → `2023-12-31` (thay vì `2023-03-01` → `2023-05-31`)
|
|
|
|
#### ✅ Thêm Label Mapping Constants:
|
|
```python
|
|
DEFAULT_LABEL_MAPPING = {
|
|
"Lua tom": "0",
|
|
"Lua": "1",
|
|
"CHN": "2",
|
|
"CLN": "3",
|
|
"TS": "4",
|
|
"Song": "5",
|
|
"Dat xay dung": "6",
|
|
"Rung": "7",
|
|
}
|
|
```
|
|
|
|
#### ✅ API Endpoints mới:
|
|
|
|
**1. `GET /api/training/labels`**
|
|
- Trả về danh sách tất cả labels và label mapping
|
|
- Response:
|
|
```json
|
|
{
|
|
"label_mapping": {...},
|
|
"label_names": {...},
|
|
"count": 8,
|
|
"labels": [...]
|
|
}
|
|
```
|
|
|
|
**2. `GET /api/training/files`**
|
|
- List tất cả shapefile trong thư mục `/train`
|
|
- Hiển thị: filename, size, số điểm, label column, unique labels
|
|
- Response:
|
|
```json
|
|
{
|
|
"files": [
|
|
{
|
|
"filename": "ST_training_data_updated_1130points_new.shp",
|
|
"path": "train/...",
|
|
"size_mb": 0.15,
|
|
"point_count": 1130,
|
|
"label_column": "Hientrang",
|
|
"unique_labels": [...],
|
|
"label_count": 8
|
|
}
|
|
],
|
|
"count": 2,
|
|
"directory": "train/"
|
|
}
|
|
```
|
|
|
|
**3. `GET /api/training/shapefile/{filename}/labels`**
|
|
- Đọc chi tiết labels từ một shapefile cụ thể
|
|
- Trả về: số điểm, unique labels, label counts, bbox, columns
|
|
- Response:
|
|
```json
|
|
{
|
|
"filename": "...",
|
|
"label_column": "Hientrang",
|
|
"point_count": 1130,
|
|
"unique_labels": [...],
|
|
"label_count": 8,
|
|
"labels": [
|
|
{
|
|
"name": "Lua tom",
|
|
"code": "0",
|
|
"count": 150,
|
|
"mapped": true
|
|
},
|
|
...
|
|
],
|
|
"bbox": [105.5, 9.2, 106.4, 10.0],
|
|
"columns": [...]
|
|
}
|
|
```
|
|
|
|
#### ✅ Cập nhật Presets:
|
|
- Preset 1: "PC - Nhỏ" với bbox mới
|
|
- Preset 2: "Server - Trung bình" với bbox mới
|
|
- Preset 3: "Full - ODC" - PRESET MỚI từ 01.train_ODC.ipynb
|
|
- Bbox: `[105.5, 9.2, 106.4, 10.0]`
|
|
- Time: `2023-03-01` → `2023-12-31`
|
|
- Max scenes: 1
|
|
- Resolution: 10m
|
|
|
|
---
|
|
|
|
### 2. **Frontend UI (training_interface.html)**
|
|
|
|
#### ✅ Cập nhật giá trị mặc định trong form:
|
|
- **Hidden inputs bbox**:
|
|
- `minLon: 105.5, minLat: 9.2, maxLon: 106.4, maxLat: 10.0`
|
|
- **Date inputs**:
|
|
- `startDate: 2023-03-01, endDate: 2023-12-31`
|
|
|
|
#### ✅ Thêm section "Training Data (Shapefile)":
|
|
```html
|
|
<h3>📊 Training Data (Shapefile)</h3>
|
|
<select id="trainingShapefile">...</select>
|
|
```
|
|
|
|
Features:
|
|
- Dropdown chọn shapefile từ thư mục `/train`
|
|
- Tự động load default: `ST_training_data_updated_1130points_new.shp`
|
|
- Hiển thị thông tin: số điểm, label column, số lớp, bbox
|
|
|
|
#### ✅ Thêm phần hiển thị thông tin Shapefile:
|
|
```html
|
|
<div id="shapefileInfo">
|
|
- Số điểm
|
|
- Label column
|
|
- Số lớp
|
|
- Bbox
|
|
- Phân bố labels (với icon ✅/⚠️)
|
|
- Button "Áp dụng Bbox từ Shapefile"
|
|
</div>
|
|
```
|
|
|
|
#### ✅ JavaScript Functions mới:
|
|
|
|
**1. `loadTrainingFiles()`**
|
|
- Load danh sách shapefile từ API
|
|
- Populate dropdown
|
|
- Auto-select default shapefile
|
|
|
|
**2. `loadShapefileLabels(filename)`**
|
|
- Load chi tiết labels từ shapefile
|
|
- Hiển thị phân bố labels
|
|
- Highlight labels đã map vs chưa map
|
|
|
|
**3. `applyShapefileBbox()`**
|
|
- Áp dụng bbox từ shapefile đã chọn
|
|
- Cập nhật form inputs
|
|
- Vẽ rectangle trên map
|
|
- Hiển thị notification
|
|
|
|
**4. `showNotification(type, message)`**
|
|
- Helper function để hiển thị notifications
|
|
- Support types: success, error, warning
|
|
|
|
#### ✅ Cập nhật form submission:
|
|
- Thêm `training_shapefile` vào config
|
|
- Default: `train/ST_training_data_updated_1130points_new.shp`
|
|
|
|
#### ✅ Event listeners:
|
|
```javascript
|
|
document.getElementById('trainingShapefile').addEventListener('change',
|
|
(e) => loadShapefileLabels(e.target.value)
|
|
);
|
|
```
|
|
|
|
---
|
|
|
|
### 3. **Bản đồ (Map)**
|
|
|
|
#### ✅ Initial rectangle với bbox mới:
|
|
- Tự động vẽ rectangle với bbox từ backend
|
|
- Fit map bounds để hiển thị khu vực
|
|
|
|
#### ✅ Dynamic update từ shapefile:
|
|
- Khi chọn shapefile → có thể áp dụng bbox
|
|
- Màu khác biệt (xanh dương) để dễ nhận biết
|
|
|
|
---
|
|
|
|
## 🧪 Test Script
|
|
|
|
File `test_training_api.py` để test các endpoints:
|
|
|
|
```bash
|
|
# Run API server (terminal 1)
|
|
conda activate env_01
|
|
python api_server.py
|
|
|
|
# Run test script (terminal 2)
|
|
conda activate env_01
|
|
python test_training_api.py
|
|
```
|
|
|
|
Test coverage:
|
|
1. ✅ GET /api/training/labels
|
|
2. ✅ GET /api/training/files
|
|
3. ✅ GET /api/training/shapefile/{filename}/labels
|
|
4. ✅ GET /api/config/presets
|
|
|
|
---
|
|
|
|
## 📊 Workflow mới
|
|
|
|
### Cách sử dụng trên giao diện:
|
|
|
|
1. **Mở Training Interface**: http://localhost:8000/training
|
|
|
|
2. **Chọn Training Data**:
|
|
- Chọn shapefile từ dropdown "📊 Training Data"
|
|
- Xem thông tin: số điểm, labels, bbox
|
|
- (Optional) Click "📍 Áp dụng Bbox từ Shapefile"
|
|
|
|
3. **Chọn Khu vực**:
|
|
- Option 1: Chọn tỉnh thành
|
|
- Option 2: Vẽ rectangle trên map
|
|
- Option 3: Áp dụng bbox từ shapefile
|
|
- Option 4: Chọn preset
|
|
|
|
4. **Cấu hình thời gian và parameters**:
|
|
- Thời gian mặc định: 2023-03-01 → 2023-12-31
|
|
- Bbox mặc định: [105.5, 9.2, 106.4, 10.0]
|
|
|
|
5. **Start Training**:
|
|
- Form tự động gửi `training_shapefile` parameter
|
|
- Backend sẽ dùng đúng shapefile đã chọn
|
|
|
|
---
|
|
|
|
## 🎯 Kết quả
|
|
|
|
### ✅ Backend:
|
|
- 3 API endpoints mới hoạt động
|
|
- Default values khớp với notebook
|
|
- Label mapping được share
|
|
|
|
### ✅ Frontend:
|
|
- UI mới để chọn shapefile
|
|
- Hiển thị chi tiết labels
|
|
- Auto-load default shapefile
|
|
- Bbox từ shapefile có thể áp dụng
|
|
|
|
### ✅ Map:
|
|
- Initial bbox khớp với backend
|
|
- Update bbox từ nhiều nguồn
|
|
- Visual feedback rõ ràng
|
|
|
|
---
|
|
|
|
## 🔍 Debug & Verify
|
|
|
|
### Check API:
|
|
```bash
|
|
# List training files
|
|
curl http://localhost:8000/api/training/files
|
|
|
|
# Get labels
|
|
curl http://localhost:8000/api/training/labels
|
|
|
|
# Get shapefile labels
|
|
curl "http://localhost:8000/api/training/shapefile/ST_training_data_updated_1130points_new.shp/labels"
|
|
```
|
|
|
|
### Check Browser Console:
|
|
- F12 → Console
|
|
- Xem logs khi chọn shapefile
|
|
- Check network requests
|
|
|
|
---
|
|
|
|
## 📝 Notes
|
|
|
|
1. **Training shapefile path format**:
|
|
- Frontend select value: `ST_training_data_updated_1130points_new.shp`
|
|
- Backend receives: `train/ST_training_data_updated_1130points_new.shp`
|
|
- Auto-prepend `train/` prefix in form submission
|
|
|
|
2. **Label mapping**:
|
|
- ✅ icon: Label có trong DEFAULT_LABEL_MAPPING
|
|
- ⚠️ icon: Label chưa có trong mapping
|
|
|
|
3. **Bbox sources**:
|
|
- Default từ backend
|
|
- Từ tỉnh thành
|
|
- Từ shapefile
|
|
- Từ preset
|
|
- Vẽ thủ công
|
|
|
|
Tất cả đều hoạt động đồng bộ!
|