---
document_type: "test_doc"
service: "MOMENTRY_CORE"
title: "場景識別模組測試計畫"
date: "2026-04-01"
version: "V1.0"
status: "active"
owner: "Warren"
created_by: "OpenCode"
tags:
  - "場景識別模組測試計畫"
ai_query_hints:
  - "查詢 場景識別模組測試計畫 的內容"
  - "場景識別模組測試計畫 的主要目的是什麼？"
  - "如何操作或實施 場景識別模組測試計畫？"
---

# 場景識別模組測試計畫

| 項目 | 內容 |
|------|------|
| 建立者 | 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) - 處理管線
