---
document_type: "architecture_design"
service: "MOMENTRY_CORE"
title: "事件識別（Event Recognition）技術方案分析"
date: "2026-04-01"
version: "V1.0"
status: "active"
owner: "Warren"
created_by: "OpenCode"
tags:

ai_query_hints:
  - "查詢 事件識別（Event Recognition）技術方案分析 的內容"
  - "事件識別（Event Recognition）技術方案分析 的主要目的是什麼？"
  - "如何操作或實施 事件識別（Event Recognition）技術方案分析？"
---

# 事件識別（Event Recognition）技術方案分析

| 項目 | 內容 |
|------|------|
| 分析日期 | 2026-04-01 |
| 目標 | 影片中的人類行為與事件識別 |
| 應用場景 | 安全監控、運動分析、日常活動記錄 |

---

## 事件識別分類

### 1. 按事件類型

```
暴力事件:
  ├─ 打架
  ├─ 吵架
  ├─ 推擠
  └─ 破壞物品

運動事件:
  ├─ 球類運動
  │   ├─ 籃球
  │   ├─ 足球
  │   ├─ 網球
  │   └─ 排球
  ├─ 格鬥運動
  │   ├─ 拳擊
  │   ├─ 柔道
  │   └─ 跆拳道
  └─ 其他運動
      ├─ 跑步
      ├─ 游泳
      └─ 騎自行車

日常活動:
  ├─ 飲食相關
  │   ├─ 吃飯
  │   ├─ 喝水
  │   ├─ 做菜
  │   └─ 清洗碗筷
  ├─ 居家活動
  │   ├─ 打掃
  │   ├─ 洗衣服
  │   ├─ 整理房間
  │   └─ 看電視
  ├─ 社交互動
  │   ├─ 交談
  │   ├─ 擁抱
  │   ├─ 握手
  │   └─ 玩耍
  └─ 個人護理
      ├─ 刷牙
      ├─ 洗臉
      └─ 化妝

安全事件:
  ├─ 跌倒
  ├─ 暈倒
  ├─ 火災
  └─ 入侵
```

### 2. 按時序特性

```
瞬時事件 (< 1秒):
  ├─ 拍手
  ├─ 跳躍
  └─ 投擲

短期事件 (1-10秒):
  ├─ 打架
  ├─ 跌倒
  ├─ 握手
  └─ 喝水

長期事件 (> 10秒):
  ├─ 吃飯
  ├─ 做菜
  ├─ 運動
  └─ 交談
```

---

## 技術方法分類

### 方法 1：時空動作檢測（Spatiotemporal Action Detection）

**特點**：
- 檢測影片中的人物位置 + 行為類別
- 輸出：時空管（spatiotemporal tube）

**代表模型**：

#### 1.1 SlowFast Network

```python
# Facebook AI Research (FAIR)
# CVPR 2019

特點:
  - 雙路徑架構
  - Slow pathway: 高空間分辨率，低時間分辨率
  - Fast pathway: 低空間分辨率，高時間分辨率
  - 在 AVA 數據集上 mAP 28.3%

優點:
  ✅ 平衡空間和時間信息
  ✅ 適合長短時事件
  ✅ 準確率高

缺點:
  ❌ 計算量大
  ❌ 記憶體消耗高（適合 Mac Studio）
```

#### 1.2 VideoMAE

```python
# 2022, Masked Autoencoder for Video

特點:
  - 基於 Transformer
  - 使用掩碼自編碼器預訓練
  - 在 Kinetics-400 上 81.5% Top-1

優點:
  ✅ 準確率高
  ✅ 數據效率好
  ✅ 可擴展性強

缺點:
  ❌ 訓練成本高
  ❌ 推理速度較慢
```

#### 1.3 MViT (Multiscale Vision Transformer)

```python
# 2021, Facebook AI

特點:
  - 多尺度特徵金字塔
  - 池化注意力機制
  - 在 Kinetics-400 上 80.8% Top-1

優點:
  ✅ 準確率高
  ✅ 效率較好

缺點:
  ❌ 模型較大
```

---

### 方法 2：骨架動作識別（Skeleton-based Action Recognition）

**特點**：
- 基於人體關鍵點（Pose）
- 對背景不敏感
- 計算量小

**實現流程**：

```python
流程:
  影片 → Pose 檢測 → 骨架序列 → 時序建模 → 動作分類

工具:
  - Pose 檢測: MediaPipe, OpenPose, MMPose
  - 時序建模: ST-GCN, CTR-GCN
```

#### 2.1 ST-GCN (Spatial Temporal Graph Convolutional Networks)

```python
# 2018, AAAI

特點:
  - 將骨架建模為時空圖
  - 鄰接關係：身體連接 + 時間相鄰
  - 在 NTU-RGB+D 上 81.5% 準確率

優點:
  ✅ 計算量小（適合邊緣 AI）
  ✅ 對背景不敏感
  ✅ 實時性好

缺點:
  ❌ 需要準確的 Pose 檢測
  ❌ 遮擋問題
```

#### 2.2 CTR-GCN (Channel-wise Topology Refinement GCN)

```python
# 2021, ICCV

特點:
  - 自適應學習圖拓撲
  - 通道級特徵建模
  - 在 NTU-RGB+D 上 92.0% 準確率

優點:
  ✅ 準確率最高
  ✅ 自適應能力強

缺點:
  ❌ 複雜度較高
```

---

### 方法 3：雙流網絡（Two-Stream Networks）

**特點**：
- 空間流：單幀 RGB
- 時間流：光流（Optical Flow）
- 融合預測

```python
架構:

RGB 幀 → 空間 CNN → 空間特徵
                          ├─→ 融合 → 動作類別
光流 → 時間 CNN → 時間特徵

優點:
  ✅ 兼顧外觀和運動
  ✅ 準確率高

缺點:
  ❌ 需要計算光流（慢）
  ❌ 兩個網絡（記憶體翻倍）
```

---

### 方法 4：3D 卷積網絡（3D CNN）

**特點**：
- 直接處理視頻片段
- 時空聯合建模

#### 4.1 I3D (Inflated 3D ConvNet)

```python
# 2017, CVPR

特點:
  - 將 2D CNN 膨脹為 3D
  - 在 Kinetics-400 上 71.1% Top-1

優點:
  ✅ 端到端訓練
  ✅ 時空聯合建模

缺點:
  ❌ 計算量大
  ❌ 參數量多
```

#### 4.2 SlowFast

```python
# 見 1.1

改進:
  - 雙速率處理
  - 減少計算量
```

---

### 方法 5：時序動作檢測（Temporal Action Detection）

**特點**：
- 定位動作發生的時間段
- 不關心空間位置

#### 5.1 BMN (Boundary Matching Network)

```python
# 2019, ICCV

特點:
  - 邊界匹配機制
  - 生成動作提議
  - 在 THUMOS14 上 56.0% mAP@0.5

優點:
  ✅ 時間定位準確
  ✅ 適合長視頻

缺點:
  ❌ 需要後處理
```

#### 5.2 TAGS (Temporal Action Detection with Global Segmentation)

```python
# 2020

特點:
  - 全局分割
  - 端到端檢測
```

---

### 方法 6：多模態融合（Multimodal Fusion）

**特點**：
- 結合視覺、音頻、文本
- 提升準確率和魯棒性

```python
多模態融合:

視覺 (RGB) ──┐
             ├─→ 融合模型 → 事件類別
音頻 (Audio) ─┤
             │
文本 (ASR) ──┘

優點:
  ✅ 準確率最高
  ✅ 魯棒性強
  ✅ 可處理複雜事件（如吵架）

缺點:
  ❌ 複雜度高
  ❌ 需要多個處理器
```

---

## 數據集分析

### 大規模動作識別數據集

| 數據集 | 類別數 | 影片數 | 時長 | 標註類型 |
|--------|--------|--------|------|---------|
| **Kinetics-400** | 400 | 240K | 10s | 分類 |
| **Kinetics-700** | 700 | 650K | 10s | 分類 |
| **AVA** | 80 | 430 | 15min | 時空檢測 |
| **EPIC-KITCHENS** | 125 | 100h | 長視頻 | 時空檢測 |
| **NTU-RGB+D** | 60 | 56K | 骨架 | 分類 |
| **THUMOS14** | 20 | 20h | 長視頻 | 時間定位 |

### 適合的事件類型

#### Kinetics-400 包含的事件

```
日常活動:
  ├─ eating
  ├─ drinking
  ├─ cooking
  ├─ cleaning
  ├─ brushing teeth
  ├─ washing hands
  └─ 等等

運動:
  ├─ playing basketball
  ├─ playing soccer
  ├─ swimming
  ├─ running
  └─ 等等

互動:
  ├─ hugging
  ├─ shaking hands
  ├─ talking to
  └─ 等等

暴力事件:
  ⚠️ 較少（需專門數據集）
```

#### 暴力事件專門數據集

| 數據集 | 類別 | 規模 |
|--------|------|------|
| **Hockey Fight** | 打架 | 1000 段 |
| **Movies Fight** | 打架 | 200 段 |
| **Violent-Flows** | 暴力 | 246 段 |
| **RWF-2000** | 暴力 | 2000 段 |
| **UBI-Fight** | 暴力 | 80h |

---

## 實現方案（Momentry 整合）

### 方案 A：基於骨架的輕量方案（推薦）⭐

**適合場景**：邊緣 AI、實時處理

```python
架構:

影片 → Pose 檢測 → 骨架序列 → ST-GCN → 動作類別
  │                              │
  └─ 使用現有 Pose 處理器 ──────┘

優點:
  ✅ 計算量小
  ✅ 可復用 Pose 結果
  ✅ 實時性好
  ✅ 適合 Mac Studio 並行處理

缺點:
  ⚠️ 依賴 Pose 檢測準確度
  ⚠️ 遮擋問題
```

**實現**：

```python
# 新增處理器: Action Recognition
scripts/action_processor.py

依賴:
  - Pose 檢測結果（已存在）
  - ST-GCN 模型

流程:
  1. 讀取 Pose 結果（JSON）
  2. 提取骨架序列
  3. ST-GCN 推理
  4. 輸出動作類別 + 時間戳

輸出格式:
{
  "actions": [
    {
      "start_time": 10.5,
      "end_time": 15.2,
      "action": "eating",
      "confidence": 0.85,
      "person_id": 1
    }
  ]
}
```

---

### 方案 B：雙流網絡（平衡方案）

**適合場景**：準確率要求高

```python
架構:

影片 → RGB 幀 → ResNet-50 → 空間特徵 ─┐
                                    ├→ 融合 → 動作
影片 → 光流 → ResNet-50 → 時間特徵 ─┘

優點:
  ✅ 準確率高
  ✅ 兼顧外觀和運動

缺點:
  ❌ 需要計算光流（慢）
  ❌ 記憶體消耗大
```

**優化**：

```python
# 使用 TV-L1 光流（快速）
cv2.optflow.DualTVL1OpticalFlow_create()

# 或使用 RAFT 光流（準確）
from raft import RAFT
```

---

### 方案 C：SlowFast（高端方案）

**適合場景**：Mac Studio、最高準確率

```python
架構:

影片 → SlowFast 網絡 → 動作類別

模型選擇:
  - SlowFast R50: 中等準確率
  - SlowFast R101: 高準確率
  - SlowFast X3D: 輕量級

優點:
  ✅ 準確率最高
  ✅ SOTA 性能

缺點:
  ❌ 計算量大
  ❌ 需 Mac Studio 64GB
```

---

### 方案 D：多模態融合（完整方案）

**適合場景**：複雜事件識別（如吵架）

```python
架構:

視覺 → SlowFast → 視覺特徵 ─┐
                          ├→ 融合 → 事件類別
音頻 → ASR → 文本特徵 ────┘

示例（吵架識別）:
  - 視覺: 肢體動作激烈
  - 音頻: 語調高、語速快
  - 文本: 爭論性詞彙

優點:
  ✅ 準確率最高
  ✅ 可處理複雜事件
  ✅ 魯棒性強

缺點:
  ❌ 複雜度高
  ❌ 需要多個處理器協同
```

---

## 各類事件的識別策略

### 1. 暴力事件識別（打架、吵架）

#### 打架識別

```python
方法: 時空動作檢測

特徵:
  - 快速肢體運動
  - 多人近距離接觸
  - 攻擊性動作模式

實現:
  1. Pose 檢測 → 骨架序列
  2. ST-GCN → 動作分類
  3. 結合 YOLO（武器檢測）
  4. 時間滑動窗口檢測

模型:
  - 數據集: RWF-2000, UBI-Fight
  - 模型: SlowFast + ST-GCN 融合
  - 閾值: confidence > 0.7

挑戰:
  ⚠️ 數據集小
  ⚠️ 類內變異大
  ⚠️ 遮擠遮擋
```

#### 吵架識別

```python
方法: 多模態融合

特徵:
  視覺:
    - 揮手、指指點點
    - 面部表情憤怒
    - 近距離對峙
  
  音頻:
    - 音量突然提高
    - 語速加快
    - 語調激動
  
  文本:
    - 爭論性詞彙
    - 情緒詞

實現:
  1. 視覺: Face（表情）+ Pose（手勢）
  2. 音頻: ASR（語音內容）+ 情感分析
  3. 多模態融合 → 吵架判定

模型:
  - 視覺: ST-GCN
  - 音頻: 情感識別模型
  - 文本: 情感分析（BERT）

準確率:
  - 單模態: 60-70%
  - 多模態融合: 80-85%
```

---

### 2. 運動事件識別

#### 球類運動

```python
方法: 骨架動作識別 + 物體檢測

籃球:
  Pose: 投籃、運球、傳球動作
  YOLO: 籃球檢測
  組合: 投籃 = 投籃姿勢 + 籃球拋物線

足球:
  Pose: 踢球、帶球動作
  YOLO: 足球檢測
  組合: 射門 = 踢球姿勢 + 足球軌跡

網球:
  Pose: 揮拍動作
  YOLO: 球拍、網球檢測
  
優點:
  ✅ 可復用現有處理器（Pose, YOLO）
  ✅ 準確率高
  ✅ 可識別細分動作
```

#### 格鬥運動

```python
方法: ST-GCN

拳擊:
  特徵: 出拳動作序列
  模型: ST-GCN（訓練在 Kinetics-400 boxing 類別）
  
柔道:
  特徵: 摔投動作
  模型: ST-GCN（需專門數據集）

跆拳道:
  特徵: 踢腿動作
  模型: ST-GCN

挑戰:
  ⚠️ 高速動作（需高幀率）
  ⚠️ 遮擠
```

---

### 3. 日常活動識別

#### 吃飯

```python
方法: 骨架動作識別

特徵:
  - 手部動作: 拿筷子/叉子 → 送入口中
  - 重複模式: 每隔數秒重複
  - 物體: 碗、筷子、食物（YOLO）

實現:
  1. Pose → 提取手臂關鍵點
  2. ST-GCN → "eating" 動作
  3. YOLO → 餐具檢測（輔助驗證）
  4. 時間統計 → 吃飯時長

準確率:
  Kinetics-400 "eating": 85-90%
```

#### 喝水

```python
方法: 骨架動作識別

特徵:
  - 手部: 拿杯子 → 送至嘴邊 → 放下
  - 頭部: 仰頭動作
  - 物體: 杯子、水瓶（YOLO）

實現:
  1. Pose → 手部 + 頭部關鍵點
  2. ST-GCN → "drinking" 動作
  3. YOLO → 杯子檢測
  4. 時間窗口: 3-10 秒

準確率:
  Kinetics-400 "drinking": 88-92%
```

#### 做菜

```python
方法: 長時序動作識別

特徵:
  - 多步驟: 備料 → 切菜 → 炒菜 → 裝盤
  - 物體: 菜刀、鍋、鏟子、食材
  - 場景: 廚房（Scene Classification）

實現:
  1. Scene → 廚房場景
  2. YOLO → 廚具、食材檢測
  3. Pose → 切菜、翻炒動作
  4. 時序模型 → 長時序分析

挑戰:
  ⚠️ 長時序（數分鐘到數小時）
  ⚠️ 多步驟識別
  ⚠️ 細分動作多

數據集:
  EPIC-KITCHENS-100: 專門的廚房活動數據集
```

#### 交談

```python
方法: 多模態融合

特徵:
  視覺:
    - 面對面姿勢
    - 手勢
    - 面部表情變化
  
  音頻:
    - 交替說話
    - 語音存在

實現:
  1. Face → 面部朝向
  2. Pose → 交談姿勢
  3. ASR → 檢測語音
  4. 時序分析 → 持續時間

難點:
  ⚠️ 與其他活動重疊（如邊吃邊聊）
  ⚠️ 需要多模態融合
```

---

## 效能與資源評估

### Mac Studio 64GB 測試預估

| 方法 | 模型 | 記憶體 | FPS | 準確率 |
|------|------|--------|-----|--------|
| **ST-GCN** | 輕量 | 1-2GB | 100+ | 80-85% |
| **SlowFast R50** | 中等 | 4-6GB | 30-40 | 85-90% |
| **SlowFast R101** | 大型 | 6-8GB | 15-20 | 90-95% |
| **多模態** | 融合 | 8-10GB | 10-15 | 95%+ |

### 處理時間（10分鐘影片）

| 方法 | 處理時間 | On-the-Fly |
|------|---------|-----------|
| **ST-GCN** | 15秒 | ✅ 可以 |
| **SlowFast R50** | 40秒 | ✅ 可以（100Mbps） |
| **SlowFast R101** | 100秒 | ⚠️ 勉強 |
| **多模態** | 150秒 | ❌ 無法 |

---

## 推薦方案

### 階段 1：骨架動作識別（立即實施）

```python
處理器: Action Recognition Processor
模型: ST-GCN（預訓練在 Kinetics-400）
依賴: Pose 處理器（已存在）

事件類別:
  ✅ 日常活動: eating, drinking, cooking, cleaning
  ✅ 運動: running, swimming, playing basketball
  ✅ 互動: hugging, shaking hands, talking

優點:
  ✅ 輕量級
  ✅ 可復用 Pose 結果
  ✅ 實時性好
  ✅ 適合 On-the-Fly
```

### 階段 2：暴力事件檢測（第二階段）

```python
處理器: Violence Detection Processor
方法: ST-GCN + 多模態融合
數據集: RWF-2000, UBI-Fight

事件類別:
  ✅ 打架: 結合 Pose + 物體檢測
  ✅ 吵架: 結合 Pose + ASR + 情感分析

挑戰:
  ⚠️ 數據集小
  ⚠️ 需要專門訓練
```

### 階段 3：細粒度動作識別（第三階段）

```python
處理器: Fine-grained Action Processor
方法: SlowFast + 多模態
數據集: EPIC-KITCHENS, AVA

事件類別:
  ✅ 廚房活動: 切菜、炒菜、洗碗
  ✅ 工作活動: 打字、開會、演講
  ✅ 運動細節: 投籃、運球、傳球

需求:
  - Mac Studio 64GB+
  - 專門數據集微調
```

---

## 實施步驟

### Phase 1：ST-GCN 處理器（第 1-2 週）

```bash
1. 安裝依賴
pip install torch torchvision
pip install mmcv mmdet mmpose

2. 下載預訓練模型
wget https://download.openmmlab.com/mmaction/pyskeleton/adaagnet/adaagnet_8xb16_ntu60_xsub_1e.py
wget https://download.openmmlab.com/mmaction/pyskeleton/adaagnet/adaagnet_ntu60_xsub_1e-44e6f770.pth

3. 創建處理器
scripts/action_processor.py

4. 整合 API
POST /api/v1/process
{"processors": ["pose", "action"]}

5. 測試
python3 scripts/test_action_recognition.py video.mp4
```

### Phase 2：暴力事件檢測（第 3-4 週）

```bash
1. 收集/標註數據
2. 微調 ST-GCN 模型
3. 實現多模態融合
4. 測試與優化
```

### Phase 3：完整事件識別（第 5-6 週）

```bash
1. 部署 SlowFast 模型
2. 實現細粒度分類
3. 優化 On-the-Fly 性能
4. 用戶測試與反饋
```

---

## 總結

### 推薦技術路線

```
短中期（Mac Studio 64GB）:
  ✅ 骨架動作識別（ST-GCN）
  ✅ 復用 Pose 結果
  ✅ 輕量級、實時性好
  ✅ 支援 60+ 日常活動

長期（Mac Studio 128GB）:
  ✅ SlowFast 大模型
  ✅ 多模態融合
  ✅ 細粒度動作識別
  ✅ 達到 SOTA 水準
```

### 預期效果

| 事件類型 | 方法 | 準確率 | 處理時間 |
|---------|------|--------|---------|
| **日常活動** | ST-GCN | 85-90% | 15s/10min |
| **運動** | ST-GCN + YOLO | 88-92% | 20s/10min |
| **打架** | ST-GCN | 80-85% | 15s/10min |
| **吵架** | 多模態 | 85-90% | 60s/10min |
| **細粒度動作** | SlowFast | 90-95% | 100s/10min |
