docs: 修復場景識別測試報告 markdown 編號
- 修正有序列表編號符合 markdownlint MD029 - 使用 1/2/3 樣式而非連續編號
This commit is contained in:
320
docs_v1.0/TESTING/SCENE_CLASSIFICATION_TEST_PLAN.md
Normal file
320
docs_v1.0/TESTING/SCENE_CLASSIFICATION_TEST_PLAN.md
Normal file
@@ -0,0 +1,320 @@
|
||||
# 場景識別模組測試計畫
|
||||
|
||||
| 項目 | 內容 |
|
||||
|------|------|
|
||||
| 建立者 | OpenCode |
|
||||
| 建立時間 | 2026-04-01 |
|
||||
| 測試狀態 | 準備階段 |
|
||||
|
||||
---
|
||||
|
||||
## 測試目標
|
||||
|
||||
評估場景識別模組在 M4 Mac Mini 16GB 上的:
|
||||
1. 功能完整性
|
||||
2. 識別準確率
|
||||
3. 處理效能
|
||||
4. 記憶體使用
|
||||
|
||||
---
|
||||
|
||||
## 測試環境
|
||||
|
||||
### 硬體
|
||||
- **設備**: Mac Mini M4
|
||||
- **記憶體**: 16GB 統一記憶體
|
||||
- **儲存**: SSD
|
||||
|
||||
### 軟體
|
||||
- **macOS**: 14.0+ (Sonoma)
|
||||
- **Python**: 3.9+
|
||||
- **Rust**: 1.75+
|
||||
|
||||
### 依賴狀態
|
||||
|
||||
```
|
||||
✓ PyTorch: Available (MPS 加速)
|
||||
✓ PIL: Available
|
||||
✓ OpenCV: Available
|
||||
✗ Core ML: Not available (需安裝)
|
||||
Device: mps
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 測試步驟
|
||||
|
||||
### Phase 1: 基本功能測試
|
||||
|
||||
#### 測試 1.1: 健康檢查
|
||||
```bash
|
||||
cd /Users/accusys/momentry_core_0.1
|
||||
python3 scripts/scene_classifier.py --check-health
|
||||
```
|
||||
|
||||
**預期結果**:
|
||||
- Core ML: ✓ 或 ✗ (可接受)
|
||||
- PyTorch: ✓
|
||||
- PIL: ✓
|
||||
- OpenCV: ✓
|
||||
|
||||
#### 測試 1.2: Rust 單元測試
|
||||
```bash
|
||||
cargo test --lib scene_classification
|
||||
```
|
||||
|
||||
**預期結果**: 5 個測試全部通過
|
||||
|
||||
#### 測試 1.3: 短片測試 (< 1 分鐘)
|
||||
```bash
|
||||
# 使用現有測試影片
|
||||
python3 scripts/scene_classifier.py \
|
||||
/path/to/short_video.mp4 \
|
||||
output_test.json \
|
||||
--sample-interval 1.0 \
|
||||
--min-scene-duration 2.0
|
||||
```
|
||||
|
||||
**預期結果**:
|
||||
- JSON 檔案成功產生
|
||||
- 至少偵測到 1 個場景
|
||||
- 處理時間 < 30 秒
|
||||
|
||||
---
|
||||
|
||||
### Phase 2: 準確率測試
|
||||
|
||||
#### 測試 2.1: 已知場景影片
|
||||
使用已知場景的測試影片:
|
||||
|
||||
| 影片 | 預期場景 | 持續時間 |
|
||||
|------|----------|----------|
|
||||
| office_meeting.mp4 | office (辦公室) | 2:00 |
|
||||
| basketball_game.mp4 | basketball_court (籃球場) | 5:00 |
|
||||
| hospital_scene.mp4 | hospital_room (醫院病房) | 1:30 |
|
||||
| classroom_lecture.mp4 | classroom (教室) | 10:00 |
|
||||
|
||||
```bash
|
||||
python3 scripts/scene_classifier.py \
|
||||
videos/office_meeting.mp4 \
|
||||
results/office.json
|
||||
```
|
||||
|
||||
**評估指標**:
|
||||
- 主要場景類型是否正確
|
||||
- 信心度是否 > 0.7
|
||||
- 場景邊界是否準確
|
||||
|
||||
#### 測試 2.2: 多場景影片
|
||||
使用包含多個場景的影片:
|
||||
|
||||
```bash
|
||||
python3 scripts/scene_classifier.py \
|
||||
videos/multi_scene.mp4 \
|
||||
results/multi.json \
|
||||
--sample-interval 2.0
|
||||
```
|
||||
|
||||
**評估指標**:
|
||||
- 偵測到的場景數量
|
||||
- 場景轉換點是否準確
|
||||
- 每個場景的持續時間
|
||||
|
||||
---
|
||||
|
||||
### Phase 3: 效能測試
|
||||
|
||||
#### 測試 3.1: 不同取樣間隔
|
||||
|
||||
```bash
|
||||
# 1 秒間隔
|
||||
time python3 scripts/scene_classifier.py \
|
||||
video.mp4 out_1s.json --sample-interval 1.0
|
||||
|
||||
# 2 秒間隔
|
||||
time python3 scripts/scene_classifier.py \
|
||||
video.mp4 out_2s.json --sample-interval 2.0
|
||||
|
||||
# 5 秒間隔
|
||||
time python3 scripts/scene_classifier.py \
|
||||
video.mp4 out_5s.json --sample-interval 5.0
|
||||
```
|
||||
|
||||
**預期結果**:
|
||||
- 間隔越大,處理越快
|
||||
- 間隔越小,場景偵測越精細
|
||||
|
||||
#### 測試 3.2: 記憶體使用
|
||||
|
||||
```bash
|
||||
# 使用 Activity Monitor 或 Instruments 監控
|
||||
# 或使用 /usr/bin/time -l
|
||||
/usr/bin/time -l python3 scripts/scene_classifier.py \
|
||||
video.mp4 output.json
|
||||
```
|
||||
|
||||
**預期結果**:
|
||||
- 記憶體使用 < 6GB (PyTorch MPS)
|
||||
- 記憶體使用 < 4GB (Core ML)
|
||||
|
||||
#### 測試 3.3: 長影片測試
|
||||
|
||||
```bash
|
||||
# 測試 30 分鐘影片
|
||||
time python3 scripts/scene_classifier.py \
|
||||
long_video.mp4 long_output.json
|
||||
```
|
||||
|
||||
**預期結果**:
|
||||
- 處理時間 < 10 分鐘
|
||||
- 無記憶體溢位
|
||||
- 成功完成
|
||||
|
||||
---
|
||||
|
||||
### Phase 4: 整合測試
|
||||
|
||||
#### 測試 4.1: Rust API 整合
|
||||
|
||||
```rust
|
||||
use momentry_core::core::processor::scene_classification::process_scene_classification;
|
||||
|
||||
#[tokio::test]
|
||||
async fn test_scene_classification_integration() {
|
||||
let result = process_scene_classification(
|
||||
"/path/to/video.mp4",
|
||||
"/tmp/test_scene.json",
|
||||
Some("test_uuid"),
|
||||
).await.unwrap();
|
||||
|
||||
assert!(result.scenes.len() > 0);
|
||||
assert!(result.fps > 0.0);
|
||||
}
|
||||
```
|
||||
|
||||
#### 測試 4.2: CLI 整合
|
||||
|
||||
```bash
|
||||
# 作為 momentry 模組執行
|
||||
cargo run --bin momentry -- process test_uuid --modules scene
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 評估標準
|
||||
|
||||
### 功能完整性
|
||||
|
||||
| 項目 | 權重 | 評分 (1-5) | 說明 |
|
||||
|------|------|-----------|------|
|
||||
| 基本識別 | 30% | - | 能識別基本場景 |
|
||||
| 中英文支援 | 15% | - | 提供中英文場景名稱 |
|
||||
| 信心度排序 | 15% | - | 提供 top 5 預測 |
|
||||
| 場景合併 | 20% | - | 正確合併連續場景 |
|
||||
| 錯誤處理 | 20% | - | 優雅處理異常 |
|
||||
|
||||
### 識別準確率
|
||||
|
||||
| 場景類型 | 測試影片數 | 正確數 | 準確率 |
|
||||
|----------|-----------|--------|--------|
|
||||
| 室內場景 | 5 | - | - |
|
||||
| 室外場景 | 5 | - | - |
|
||||
| 運動場景 | 3 | - | - |
|
||||
| 交通場景 | 2 | - | - |
|
||||
| **總計** | **15** | **-** | **-** |
|
||||
|
||||
**目標**: 整體準確率 > 80%
|
||||
|
||||
### 處理效能
|
||||
|
||||
| 指標 | 目標 | 實測 | 狀態 |
|
||||
|------|------|------|------|
|
||||
| FPS (Core ML) | > 15 | - | - |
|
||||
| FPS (PyTorch MPS) | > 8 | - | - |
|
||||
| 記憶體 (< 6GB) | ✓ | - | - |
|
||||
| 30 分鐘影片處理 (< 10 分鐘) | ✓ | - | - |
|
||||
|
||||
---
|
||||
|
||||
## 測試影片清單
|
||||
|
||||
### 自備影片
|
||||
- [ ] office_meeting.mp4 (辦公室)
|
||||
- [ ] basketball_game.mp4 (籃球場)
|
||||
- [ ] hospital_scene.mp4 (醫院)
|
||||
- [ ] classroom_lecture.mp4 (教室)
|
||||
- [ ] outdoor_park.mp4 (公園)
|
||||
- [ ] street_view.mp4 (街道)
|
||||
|
||||
### 公開資料集
|
||||
- [ ] Places365 validation set (子集)
|
||||
- [ ] Kinetics-400 (場景相關子集)
|
||||
|
||||
---
|
||||
|
||||
## 已知問題
|
||||
|
||||
1. **Core ML 模型缺失** - 需要下載或轉換 Places365 模型
|
||||
2. **PyTorch 使用 ImageNet** - 目前使用 ResNet18 預訓練模型,非 Places365
|
||||
3. **場景類別有限** - 目前支援 38 種場景
|
||||
|
||||
---
|
||||
|
||||
## 下一步
|
||||
|
||||
1. [ ] 準備測試影片
|
||||
2. [ ] 執行 Phase 1 測試
|
||||
3. [ ] 執行 Phase 2 準確率測試
|
||||
4. [ ] 執行 Phase 3 效能測試
|
||||
5. [ ] 執行 Phase 4 整合測試
|
||||
6. [ ] 撰寫測試報告
|
||||
7. [ ] 根據結果優化
|
||||
|
||||
---
|
||||
|
||||
## 測試報告模板
|
||||
|
||||
```markdown
|
||||
# 場景識別測試報告
|
||||
|
||||
## 測試日期
|
||||
2026-04-XX
|
||||
|
||||
## 測試環境
|
||||
- 硬體:Mac Mini M4 16GB
|
||||
- 軟體:macOS 14.X, Python 3.9.X
|
||||
|
||||
## 測試結果
|
||||
|
||||
### 功能完整性
|
||||
- 基本識別:✓
|
||||
- 中英文支援:✓
|
||||
- 信心度排序:✓
|
||||
- 場景合併:✓
|
||||
- 錯誤處理:✓
|
||||
|
||||
### 準確率
|
||||
- 室內場景:8/10 (80%)
|
||||
- 室外場景:7/10 (70%)
|
||||
- 運動場景:5/5 (100%)
|
||||
- 總計:20/25 (80%)
|
||||
|
||||
### 效能
|
||||
- FPS: 12.5 (PyTorch MPS)
|
||||
- 記憶體峰值:4.2GB
|
||||
- 30 分鐘影片處理:8 分 30 秒
|
||||
|
||||
## 結論
|
||||
場景識別模組基本功能正常,準確率可接受。
|
||||
建議:
|
||||
1. 整合 Places365 Core ML 模型提升準確率
|
||||
2. 優化場景邊界檢測
|
||||
3. 增加支援更多場景類別
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 參考文件
|
||||
|
||||
- [SCENE_CLASSIFICATION_MODULE.md](./SCENE_CLASSIFICATION_MODULE.md) - 模組文檔
|
||||
- [PROCESSING_PIPELINE.md](./ARCHITECTURE/PROCESSING_PIPELINE.md) - 處理管線
|
||||
195
docs_v1.0/TESTING/SCENE_CLASSIFICATION_TEST_REPORT_2026_04_01.md
Normal file
195
docs_v1.0/TESTING/SCENE_CLASSIFICATION_TEST_REPORT_2026_04_01.md
Normal file
@@ -0,0 +1,195 @@
|
||||
# 場景識別模組測試報告
|
||||
|
||||
| 項目 | 內容 |
|
||||
|------|------|
|
||||
| 測試日期 | 2026-04-01 |
|
||||
| 測試者 | OpenCode |
|
||||
| 測試環境 | M4 Mac Mini 16GB |
|
||||
| 測試狀態 | 初步測試完成 |
|
||||
|
||||
---
|
||||
|
||||
## 測試影片
|
||||
|
||||
### 影片 1: ExaSAN PCIe series
|
||||
- **檔案**: `ExaSAN PCIe series - Director Ou Yu-Zhi Shares His Experience.mp4`
|
||||
- **大小**: 6.8 MB
|
||||
- **時長**: 159.6 秒 (2 分 40 秒)
|
||||
- **FPS**: 22.0
|
||||
- **總幀數**: 3512
|
||||
- **場景**: 辦公室/會議室環境
|
||||
|
||||
### 影片 2: Old Time Movie Show
|
||||
- **檔案**: `Old_Time_Movie_Show_-_Charade_1963.HD.mov`
|
||||
- **大小**: 2.3 GB
|
||||
- **時長**: 114 分鐘
|
||||
- **場景**: 電影內容(多場景)
|
||||
|
||||
---
|
||||
|
||||
## 測試結果
|
||||
|
||||
### ExaSAN 影片測試
|
||||
|
||||
#### 執行命令
|
||||
```bash
|
||||
python3 scripts/scene_classifier.py \
|
||||
"/Users/accusys/momentry/var/sftpgo/data/demo/ExaSAN PCIe series - Director Ou Yu-Zhi Shares His Experience.mp4" \
|
||||
/tmp/exasan_test.json
|
||||
```
|
||||
|
||||
#### 執行結果
|
||||
```
|
||||
[SCENE] Loading PyTorch model on mps
|
||||
[SCENE] PyTorch model loaded successfully
|
||||
[SCENE] Video: /Users/accusys/momentry/var/sftpgo/data/demo/...
|
||||
[SCENE] FPS: 22.0, Frames: 3512, Duration: 159.6s
|
||||
[SCENE] Collected 0 predictions
|
||||
[SCENE] Result saved to: /tmp/exasan_test.json
|
||||
[SCENE] Detected 0 scenes
|
||||
[SCENE] Completed in 0.4s
|
||||
```
|
||||
|
||||
#### 輸出 JSON
|
||||
```json
|
||||
{
|
||||
"frame_count": 3512,
|
||||
"fps": 22.0,
|
||||
"scenes": [],
|
||||
"metadata": {
|
||||
"video_path": "...",
|
||||
"duration": 159.6,
|
||||
"sample_interval": 2.0,
|
||||
"model_type": "pytorch"
|
||||
}
|
||||
}
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 問題分析
|
||||
|
||||
### 主要問題
|
||||
|
||||
**症狀**: 預測數量為 0
|
||||
|
||||
**原因**: `predict_frame` 方法中的類型檢查邏輯有問題
|
||||
|
||||
**證據**:
|
||||
- 直接測試 PyTorch 模型預測成功
|
||||
- 腳本執行時所有幀都返回空預測
|
||||
- 幀讀取正常(79 個取樣點)
|
||||
|
||||
### 已確認正常的功能
|
||||
|
||||
✅ Rust 模組編譯通過
|
||||
✅ Rust 單元測試 5/5 通過
|
||||
✅ Python 腳本健康檢查通過
|
||||
✅ PyTorch 模型載入成功(MPS 加速)
|
||||
✅ OpenCV 幀讀取正常
|
||||
✅ PIL 圖像轉換正常
|
||||
✅ 單獨預測測試成功
|
||||
|
||||
### 待修復問題
|
||||
|
||||
❌ 腳本中的 `predict_frame` 方法在循環中返回空結果
|
||||
❌ 需要添加更多調試信息找出問題
|
||||
|
||||
---
|
||||
|
||||
## 下一步建議
|
||||
|
||||
### 短期(1-2 天)
|
||||
|
||||
1. **修復 predict_frame 方法**
|
||||
- 添加更多調試輸出
|
||||
- 檢查模型狀態在循環中是否保持
|
||||
- 驗證 transform 在每次呼叫時正常工作
|
||||
|
||||
2. **重新測試 ExaSAN 影片**
|
||||
- 確認預測正常運作
|
||||
- 驗證場景合併邏輯
|
||||
|
||||
3. **測試長影片**
|
||||
- 測試 Old_Time_Movie_Show (114 分鐘)
|
||||
- 評估記憶體使用和處理時間
|
||||
|
||||
### 中期(1 週)
|
||||
|
||||
1. **整合 Places365 模型**
|
||||
- 下載或轉換 Core ML 模型
|
||||
- 替換 ImageNet 模型
|
||||
- 提升場景識別準確率
|
||||
|
||||
2. **整合到 Playground**
|
||||
- 添加到 momentry_playground
|
||||
- 使用 port 3003 測試
|
||||
- 建立 Web UI 顯示結果
|
||||
|
||||
### 長期(2-4 週)
|
||||
|
||||
1. **完整功能測試**
|
||||
- 準確率評估
|
||||
- 效能基準測試
|
||||
- 使用者回饋收集
|
||||
|
||||
7. **優化與部署**
|
||||
- 根據測試結果優化
|
||||
- 文檔完善
|
||||
- 生產環境部署
|
||||
|
||||
---
|
||||
|
||||
## 技術筆記
|
||||
|
||||
### 模型選擇
|
||||
|
||||
**目前使用**: ResNet18 (ImageNet)
|
||||
- **優點**: 快速載入,MPS 加速
|
||||
- **缺點**: 不是場景分類專用模型
|
||||
|
||||
**建議升級**: Places365 (Core ML)
|
||||
- **優點**: 365 種場景類別,準確率高
|
||||
- **缺點**: 需要下載/轉換模型
|
||||
|
||||
### 效能預估(M4 16GB)
|
||||
|
||||
| 模型 | FPS | 記憶體 | 準確率 |
|
||||
|------|-----|--------|--------|
|
||||
| ResNet18 (ImageNet) | 15-20 | 2-4GB | 60-70% |
|
||||
| Places365 (Core ML) | 20-30 | 1-2GB | 85-90% |
|
||||
|
||||
---
|
||||
|
||||
## 結論
|
||||
|
||||
場景識別模組基礎架構已完成,Rust 和 Python 代碼都已實作。目前遇到預測邏輯問題,需要調試修復。
|
||||
|
||||
**建議優先順序**:
|
||||
1. 修復 predict_frame 方法(立即)
|
||||
2. 完成基本功能測試(1-2 天)
|
||||
3. 整合 Places365 模型(1 週)
|
||||
4. 整合到 Playground(1-2 週)
|
||||
|
||||
---
|
||||
|
||||
## 附錄:測試命令
|
||||
|
||||
```bash
|
||||
# 健康檢查
|
||||
python3 scripts/scene_classifier.py --check-health
|
||||
|
||||
# 測試短片
|
||||
python3 scripts/scene_classifier.py \
|
||||
"/Users/accusys/momentry/var/sftpgo/data/demo/ExaSAN PCIe series - Director Ou Yu-Zhi Shares His Experience.mp4" \
|
||||
/tmp/exasan_test.json
|
||||
|
||||
# 測試長片(待修復後)
|
||||
python3 scripts/scene_classifier.py \
|
||||
"/Users/accusys/momentry/var/sftpgo/data/demo/Old_Time_Movie_Show_-_Charade_1963.HD.mov" \
|
||||
/tmp/charade_scene.json \
|
||||
--sample-interval 5.0
|
||||
|
||||
# Rust 測試
|
||||
cargo test --lib scene_classification
|
||||
```
|
||||
Reference in New Issue
Block a user