docs: update docs_v1.0/ documentation

- Fix markdown lint issues (MD030, MD047, MD051, MD028, MD005)
- Update AI agents, architecture, implementation docs
- Add new identity, face recognition, and API documentation
- Remove deprecated face/person API guides
This commit is contained in:
Warren
2026-04-30 15:10:41 +08:00
parent 8f05a7c188
commit 4d75b2e251
185 changed files with 21071 additions and 1605 deletions
@@ -96,19 +96,19 @@ ADD COLUMN audio_visual_confidence FLOAT; -- 融合置信度
系統如何精確計算「說話者」與「臉部」的關聯?
### 3.1 演算法步驟
1. **時間切片**: 將影片以 `1秒` 為單位劃分時間窗。
2. **標籤映射**:
1. **時間切片**: 將影片以 `1秒` 為單位劃分時間窗。
2. **標籤映射**:
- 若該秒有 ASRX 輸出,標記為 `ActiveSpeaker = SPEAKER_XX`
- 若該秒 Face Processor 偵測到臉部,標記為 `ActiveFace = FACE_YY` (取信心值最高且面積最大者)。
3. **共現矩陣 (Co-occurrence Matrix)**: 統計每對 `(SPEAKER_XX, FACE_YY)` 同時出現的秒數。
4. **計算重疊率**:
3. **共現矩陣 (Co-occurrence Matrix)**: 統計每對 `(SPEAKER_XX, FACE_YY)` 同時出現的秒數。
4. **計算重疊率**:
```math
Overlap(S_x, F_y) = \frac{\text{Count}(S_x \cap F_y)}{\text{Count}(S_x)}
```
5. **決策**:
- 若 `Overlap > 0.60` → 建立強關聯 (High Confidence)。
- 若 `0.30 <= Overlap <= 0.60` → 建立建議關聯 (Medium Confidence)。
- 若 `Overlap < 0.30` → 忽略 (可能是畫外音或群體場景)。
5. **決策**:
- 若 `Overlap > 0.60` → 建立強關聯 (High Confidence)。
- 若 `0.30 <= Overlap <= 0.60` → 建立建議關聯 (Medium Confidence)。
- 若 `Overlap < 0.30` → 忽略 (可能是畫外音或群體場景)。
### 3.2 偽代碼範例
```python
@@ -149,10 +149,10 @@ graph TD
```
### 4.1 執行時機
1. `ASRX` 與 `Face` 處理器均完成。
2. 觸發 `audio_visual_binding_worker`。
3. 產出 `speaker_face_mapping.json`。
4. 寫入資料庫,並更新 `person_identities` 表。
1. `ASRX` 與 `Face` 處理器均完成。
2. 觸發 `audio_visual_binding_worker`。
3. 產出 `speaker_face_mapping.json`。
4. 寫入資料庫,並更新 `person_identities` 表。
---
@@ -71,11 +71,11 @@ graph LR
```
### 1.1 關鍵步驟
1. **Metadata 解析**: 從檔名或 `ffprobe` 資訊中提取電影名稱與年份。
2. **TMDB 查詢**: 呼叫 API 獲取 Top Cast (通常前 10-15 名) 及其照片 URL。
3. **照片下載與特徵提取**: 下載演員照片並生成 Face Embedding (512-dim)。
4. **向量比對**: 將演員照片向量與影片內偵測到的 **Face Cluster Centroids** 進行相似度比對 (Cosine Similarity)。
5. **身分決議**: 若相似度超過閾值 (如 0.6),則自動建立全域身分並標記。
1. **Metadata 解析**: 從檔名或 `ffprobe` 資訊中提取電影名稱與年份。
2. **TMDB 查詢**: 呼叫 API 獲取 Top Cast (通常前 10-15 名) 及其照片 URL。
3. **照片下載與特徵提取**: 下載演員照片並生成 Face Embedding (512-dim)。
4. **向量比對**: 將演員照片向量與影片內偵測到的 **Face Cluster Centroids** 進行相似度比對 (Cosine Similarity)。
5. **身分決議**: 若相似度超過閾值 (如 0.6),則自動建立全域身分並標記。
---
@@ -148,17 +148,17 @@ CREATE INDEX idx_person_global ON person_identities(global_person_id);
系統如何決定「畫面中的臉」就是「Cary Grant」?
1. **參考集準備 (Reference Set)**:
* 從 TMDB 獲取演員照片 URL。
* 下載並使用 InsightFace 提取向量 $V_{actor}$。
2. **目標集 (Target Set)**:
* 從影片 Face Processor 獲取每個 Cluster 的中心向量 $V_{cluster}$。
3. **計算相似度**:
* $Score = 1 - \text{CosineDistance}(V_{actor}, V_{cluster})$
4. **決策閾值**:
* **High Confidence (> 0.70)**: 自動確認身分 (Auto-Confirm)。
* **Medium Confidence (0.55 - 0.70)**: 標記為 "Suggestion" (建議),需人工確認。
* **Low Confidence (< 0.55)**: 忽略,保持為 "Unknown Cluster"。
1. **參考集準備 (Reference Set)**:
- 從 TMDB 獲取演員照片 URL。
- 下載並使用 InsightFace 提取向量 $V_{actor}$。
2. **目標集 (Target Set)**:
- 從影片 Face Processor 獲取每個 Cluster 的中心向量 $V_{cluster}$。
3. **計算相似度**:
- $Score = 1 - \text{CosineDistance}(V_{actor}, V_{cluster})$
4. **決策閾值**:
- **High Confidence (> 0.70)**: 自動確認身分 (Auto-Confirm)。
- **Medium Confidence (0.55 - 0.70)**: 標記為 "Suggestion" (建議),需人工確認。
- **Low Confidence (< 0.55)**: 忽略,保持為 "Unknown Cluster"。
### 3.3 角色名關聯 (Role Mapping)
@@ -179,21 +179,21 @@ TMDB 返回的結構包含 `character` 字段:
此流程被打包為一個獨立的 **Post-Face-Processing Job**
1. **Trigger**: `face_processor` 完成,產生 `face_clusters`
2. **Action**: 系統檢查 `asset_type == 'movie'``title` 存在。
3. **Execution**: 執行 `tmdb_cast_ingestion.py`
* 查詢 TMDB。
* 下載圖片 -> 計算向量 -> 存入 `global_person_identities` (若不存在)。
* 執行比對 -> 更新 `person_identities`
4. **Output**: 資料庫中充滿了真實姓名與角色名的紀錄,供 Rule 3/4 Chunking 使用。
1. **Trigger**: `face_processor` 完成,產生 `face_clusters`
2. **Action**: 系統檢查 `asset_type == 'movie'``title` 存在。
3. **Execution**: 執行 `tmdb_cast_ingestion.py`
- 查詢 TMDB。
- 下載圖片 -> 計算向量 -> 存入 `global_person_identities` (若不存在)。
- 執行比對 -> 更新 `person_identities`
4. **Output**: 資料庫中充滿了真實姓名與角色名的紀錄,供 Rule 3/4 Chunking 使用。
---
## 5. 容錯與異常處理 (Error Handling)
- **找不到電影**: 若檔名模糊導致 TMDB 無結果,則跳過此步驟,保留原始 Face Cluster ID。
- **無演員照片**: 若某演員在 TMDB 無照片,無法進行向量比對,僅記錄名字 (若 ASR 有提及)。
- **多人飾演一角**: 若臉部特徵同時匹配多個演員 (極罕見),取 Confidence 最高者,其餘列入候補。
- **找不到電影**: 若檔名模糊導致 TMDB 無結果,則跳過此步驟,保留原始 Face Cluster ID。
- **無演員照片**: 若某演員在 TMDB 無照片,無法進行向量比對,僅記錄名字 (若 ASR 有提及)。
- **多人飾演一角**: 若臉部特徵同時匹配多個演員 (極罕見),取 Confidence 最高者,其餘列入候補。
---