# 嘴部動作整合計畫 **更新日期**: 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%