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:
@@ -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 最高者,其餘列入候補。
|
||||
|
||||
---
|
||||
|
||||
|
||||
Reference in New Issue
Block a user