---
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:
  - "查詢 場景識別模組測試報告 的內容"
  - "場景識別模組測試報告 的主要目的是什麼？"
  - "如何操作或實施 場景識別模組測試報告？"
---

# 場景識別模組測試報告

| 項目 | 內容 |
|------|------|
| 測試日期 | 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. **完整功能測試**
   - 準確率評估
   - 效能基準測試
   - 使用者回饋收集

2. **優化與部署**
   - 根據測試結果優化
   - 文檔完善
   - 生產環境部署

---

## 技術筆記

### 模型選擇

**目前使用**: 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
```
