feat: update Python processors and add utility scripts
- Update ASR, face, OCR, pose processors - Add release pre-flight check script - Add synonym generation, chunk processing scripts - Add face recognition, stamp search utilities
This commit is contained in:
@@ -0,0 +1,425 @@
|
||||
# 嘴部動作整合計畫
|
||||
|
||||
**更新日期**: 2026-04-02
|
||||
|
||||
---
|
||||
|
||||
## 🎯 目標
|
||||
|
||||
整合 **Pose 嘴部動作檢測** 提升說話人識別準確度。
|
||||
|
||||
---
|
||||
|
||||
## 📊 技術方案
|
||||
|
||||
### 方案 1: MediaPipe Face Mesh(推薦⭐)
|
||||
|
||||
**技術**: 3D 人臉關鍵點檢測
|
||||
|
||||
**關鍵點**:
|
||||
- 468 個人臉關鍵點
|
||||
- 包含嘴唇輪廓(點 0-10)
|
||||
- 實時檢測(30+ FPS)
|
||||
|
||||
**優點**:
|
||||
- ✅ 輕量級
|
||||
- ✅ 實時處理
|
||||
- ✅ 準確度高
|
||||
- ✅ 開源免費
|
||||
|
||||
**缺點**:
|
||||
- ⚠️ 需要額外安裝
|
||||
- ⚠️ 僅檢測人臉
|
||||
|
||||
---
|
||||
|
||||
### 方案 2: OpenPose
|
||||
|
||||
**技術**: 全身姿態估計
|
||||
|
||||
**關鍵點**:
|
||||
- 全身 135 個關鍵點
|
||||
- 包含臉部 70 點
|
||||
- 包含手部細節
|
||||
|
||||
**優點**:
|
||||
- ✅ 全身檢測
|
||||
- ✅ 包含手勢
|
||||
- ✅ 準確度高
|
||||
|
||||
**缺點**:
|
||||
- ❌ 計算量大
|
||||
- ❌ 處理速度慢
|
||||
- ❌ 需要 GPU 加速
|
||||
|
||||
---
|
||||
|
||||
### 方案 3: Dlib + Face Landmarks
|
||||
|
||||
**技術**: 68 點人臉關鍵點
|
||||
|
||||
**關鍵點**:
|
||||
- 68 個人臉關鍵點
|
||||
- 嘴唇輪廓 20 點
|
||||
- 輕量級
|
||||
|
||||
**優點**:
|
||||
- ✅ 輕量
|
||||
- ✅ 快速
|
||||
- ✅ 成熟穩定
|
||||
|
||||
**缺點**:
|
||||
- ⚠️ 準確度較 MediaPipe 低
|
||||
- ⚠️ 關鍵點較少
|
||||
|
||||
---
|
||||
|
||||
## 🔧 整合流程
|
||||
|
||||
### 完整流程
|
||||
|
||||
```
|
||||
影片 → ASR 轉錄 → 文字 + 時間戳
|
||||
↓
|
||||
Face 檢測 → 人臉位置
|
||||
↓
|
||||
Pose 檢測 → 嘴部動作
|
||||
↓
|
||||
pyannote → 說話人分離
|
||||
↓
|
||||
多模態整合 → 最終結果
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 整合邏輯
|
||||
|
||||
**多模態驗證**:
|
||||
```python
|
||||
# 1. 語音檢測(pyannote)
|
||||
speaker_audio = detect_speaker(audio)
|
||||
|
||||
# 2. 嘴部動作檢測(MediaPipe)
|
||||
speaker_lip = detect_lip_movement(video)
|
||||
|
||||
# 3. 人臉檢測(Face)
|
||||
speaker_face = detect_face(video)
|
||||
|
||||
# 4. 多模態整合
|
||||
if speaker_audio and speaker_lip and speaker_face:
|
||||
confidence = 0.95 # 高置信度
|
||||
elif speaker_audio and speaker_lip:
|
||||
confidence = 0.85 # 中置信度
|
||||
elif speaker_audio:
|
||||
confidence = 0.65 # 低置信度
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📈 預期效果
|
||||
|
||||
### 準確度提升
|
||||
|
||||
| 場景 | 當前準確度 | 整合後準確度 | 提升 |
|
||||
|------|-----------|------------|------|
|
||||
| **雙人對話** | 90% | 95-98% | +5-8% |
|
||||
| **三人會議** | 85% | 92-95% | +7-10% |
|
||||
| **多人會議** | 80% | 88-92% | +8-12% |
|
||||
| **重疊說話** | 70% | 80-85% | +10-15% |
|
||||
|
||||
---
|
||||
|
||||
### 處理速度影響
|
||||
|
||||
| 處理器 | 當前速度 | 整合後速度 | 影響 |
|
||||
|--------|---------|-----------|------|
|
||||
| **ASR** | 50s | 50s | 0% |
|
||||
| **Face** | 65s | 65s | 0% |
|
||||
| **Pose** | - | +30s | +30s |
|
||||
| **pyannote** | 180s | 180s | 0% |
|
||||
| **總計** | ~300s | ~330s | +10% |
|
||||
|
||||
---
|
||||
|
||||
## 💻 實作範例
|
||||
|
||||
### MediaPipe 嘴部檢測
|
||||
|
||||
```python
|
||||
import cv2
|
||||
import mediapipe as mp
|
||||
|
||||
# 初始化
|
||||
mp_face_mesh = mp.solutions.face_mesh
|
||||
face_mesh = mp_face_mesh.FaceMesh()
|
||||
|
||||
# 檢測嘴部動作
|
||||
def detect_lip_movement(frame):
|
||||
results = face_mesh.process(frame)
|
||||
|
||||
if results.multi_face_landmarks:
|
||||
for face_landmarks in results.multi_face_landmarks:
|
||||
# 提取嘴唇關鍵點
|
||||
# 上嘴唇:點 13, 14, 15, 16
|
||||
# 下嘴唇:點 17, 18, 19, 20
|
||||
|
||||
# 計算嘴唇開合度
|
||||
upper_lip = face_landmarks.landmark[13]
|
||||
lower_lip = face_landmarks.landmark[17]
|
||||
|
||||
lip_distance = abs(upper_lip.y - lower_lip.y)
|
||||
|
||||
# 判斷是否在說話
|
||||
is_speaking = lip_distance > 0.05
|
||||
|
||||
return is_speaking
|
||||
|
||||
return False
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
### 多模態整合
|
||||
|
||||
```python
|
||||
from pyannote.audio import Pipeline
|
||||
import mediapipe as mp
|
||||
import cv2
|
||||
|
||||
class MultimodalSpeakerDetection:
|
||||
def __init__(self):
|
||||
# 語音分離
|
||||
self.audio_pipeline = Pipeline.from_pretrained(
|
||||
"pyannote/speaker-diarization-3.1"
|
||||
)
|
||||
|
||||
# 嘴部檢測
|
||||
self.face_mesh = mp.solutions.face_mesh.FaceMesh()
|
||||
|
||||
def detect(self, video_path, audio_path):
|
||||
# 1. 語音檢測
|
||||
audio_diarization = self.audio_pipeline(audio_path)
|
||||
|
||||
# 2. 視覺檢測
|
||||
video_diarization = self.detect_lip_movement(video_path)
|
||||
|
||||
# 3. 多模態整合
|
||||
integrated = self.integrate_modalities(
|
||||
audio_diarization,
|
||||
video_diarization
|
||||
)
|
||||
|
||||
return integrated
|
||||
|
||||
def detect_lip_movement(self, video_path):
|
||||
cap = cv2.VideoCapture(video_path)
|
||||
speaking_segments = []
|
||||
|
||||
while cap.isOpened():
|
||||
ret, frame = cap.read()
|
||||
if not ret:
|
||||
break
|
||||
|
||||
# 轉換顏色
|
||||
rgb_frame = cv2.cvtColor(frame, cv2.COLOR_BGR2RGB)
|
||||
|
||||
# 檢測
|
||||
results = self.face_mesh.process(rgb_frame)
|
||||
|
||||
if results.multi_face_landmarks:
|
||||
# 計算嘴唇開合度
|
||||
# ... (詳細邏輯見上方)
|
||||
pass
|
||||
|
||||
cap.release()
|
||||
return speaking_segments
|
||||
|
||||
def integrate_modalities(self, audio, video):
|
||||
# 整合語音和視覺結果
|
||||
# 使用投票機制或機器學習模型
|
||||
pass
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## 📋 實施步驟
|
||||
|
||||
### 階段 1: MediaPipe 安裝與測試
|
||||
|
||||
```bash
|
||||
# 1. 安裝 MediaPipe
|
||||
pip install mediapipe
|
||||
|
||||
# 2. 測試基本功能
|
||||
python3 scripts/test_mediapipe_lip.py
|
||||
|
||||
# 3. 驗證準確度
|
||||
python3 scripts/validate_lip_detection.py
|
||||
```
|
||||
|
||||
**預計時間**: 1-2 小時
|
||||
|
||||
---
|
||||
|
||||
### 階段 2: Pose 處理器升級
|
||||
|
||||
```python
|
||||
# 升級現有 pose_processor.py
|
||||
# 添加嘴部動作檢測功能
|
||||
|
||||
class PoseProcessor:
|
||||
def __init__(self):
|
||||
self.face_mesh = mp.solutions.face_mesh.FaceMesh()
|
||||
|
||||
def process(self, video_path):
|
||||
# 現有人臉檢測
|
||||
# + 新增嘴部動作檢測
|
||||
pass
|
||||
```
|
||||
|
||||
**預計時間**: 2-3 小時
|
||||
|
||||
---
|
||||
|
||||
### 階段 3: 多模態整合
|
||||
|
||||
```python
|
||||
# 創建整合處理器
|
||||
class MultimodalIntegration:
|
||||
def __init__(self):
|
||||
self.asr_processor = ASRProcessor()
|
||||
self.face_processor = FaceProcessor()
|
||||
self.pose_processor = PoseProcessor()
|
||||
self.pyannote_pipeline = Pipeline.from_pretrained(...)
|
||||
|
||||
def process(self, video_path):
|
||||
# 1. ASR 轉錄
|
||||
asr_result = self.asr_processor.process(video_path)
|
||||
|
||||
# 2. 人臉檢測
|
||||
face_result = self.face_processor.process(video_path)
|
||||
|
||||
# 3. 嘴部動作檢測
|
||||
pose_result = self.pose_processor.process(video_path)
|
||||
|
||||
# 4. 說話人分離
|
||||
speaker_result = self.pyannote_pipeline(video_path)
|
||||
|
||||
# 5. 多模態整合
|
||||
integrated_result = self.integrate_all(
|
||||
asr_result,
|
||||
face_result,
|
||||
pose_result,
|
||||
speaker_result
|
||||
)
|
||||
|
||||
return integrated_result
|
||||
```
|
||||
|
||||
**預計時間**: 3-4 小時
|
||||
|
||||
---
|
||||
|
||||
### 階段 4: 測試與優化
|
||||
|
||||
```bash
|
||||
# 1. 短影片測試
|
||||
python3 scripts/test_multimodal_short.py
|
||||
|
||||
# 2. 長影片測試
|
||||
python3 scripts/test_multimodal_long.py
|
||||
|
||||
# 3. 準確度驗證
|
||||
python3 scripts/validate_accuracy.py
|
||||
|
||||
# 4. 效能優化
|
||||
python3 scripts/optimize_performance.py
|
||||
```
|
||||
|
||||
**預計時間**: 4-6 小時
|
||||
|
||||
---
|
||||
|
||||
## 📊 資源需求
|
||||
|
||||
### 硬體需求
|
||||
|
||||
| 組件 | 最低需求 | 推薦配置 |
|
||||
|------|---------|---------|
|
||||
| **CPU** | 4 核心 | 8 核心 |
|
||||
| **記憶體** | 8 GB | 16 GB |
|
||||
| **GPU** | 可選 | M4 Mac Mini |
|
||||
| **儲存** | 10 GB | 50 GB |
|
||||
|
||||
---
|
||||
|
||||
### 軟體依賴
|
||||
|
||||
```bash
|
||||
# 核心依賴
|
||||
mediapipe>=0.9.0
|
||||
opencv-python>=4.5.0
|
||||
pyannote.audio>=3.4.0
|
||||
whisperx>=3.7.0
|
||||
|
||||
# 可選依賴
|
||||
torch>=2.5.0
|
||||
numpy>=1.20.0
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
## ✅ 預期成果
|
||||
|
||||
### 功能提升
|
||||
|
||||
- ✅ 說話人識別準確度 +5-15%
|
||||
- ✅ 重疊說話檢測改善 +10-15%
|
||||
- ✅ 多人會議識別改善 +8-12%
|
||||
- ✅ 噪音環境魯棒性提升
|
||||
|
||||
---
|
||||
|
||||
### 效能指標
|
||||
|
||||
- ⚠️ 處理時間增加 10%
|
||||
- ⚠️ 記憶體使用增加 2-4 GB
|
||||
- ✅ 準確度提升至 95%+
|
||||
|
||||
---
|
||||
|
||||
## 🎯 決策建議
|
||||
|
||||
### 立即實施如果:
|
||||
|
||||
- ✅ 需要最高準確度(95%+)
|
||||
- ✅ 多人會議場景多
|
||||
- ✅ 重疊說話常見
|
||||
- ✅ 硬體資源充足
|
||||
|
||||
### 暫緩實施如果:
|
||||
|
||||
- ⚠️ 當前準確度已足夠(85-90%)
|
||||
- ⚠️ 雙人對話為主
|
||||
- ⚠️ 硬體資源有限
|
||||
- ⚠️ 時間緊迫
|
||||
|
||||
---
|
||||
|
||||
## 📁 相關文件
|
||||
|
||||
```
|
||||
scripts/
|
||||
├── LIP_MOVEMENT_INTEGRATION_PLAN.md # 本計畫
|
||||
├── pose_processor.py # 現有 Pose 處理器
|
||||
├── test_mediapipe_lip.py # MediaPipe 測試(待創建)
|
||||
├── multimodal_integration.py # 多模態整合(待創建)
|
||||
└── validate_accuracy.py # 準確度驗證(待創建)
|
||||
```
|
||||
|
||||
---
|
||||
|
||||
**計畫完成日期**: 2026-04-02
|
||||
**實施難度**: ⭐⭐⭐⭐ (高)
|
||||
**預計時間**: 10-15 小時
|
||||
**預期效果**: 準確度 +5-15%
|
||||
Reference in New Issue
Block a user