emilianavt/OpenSeeFace
Robust realtime face and facial landmark tracking on CPU with Unity integration
OpenSeeFace – 用於虛擬角色動畫的即時臉部特徵點追蹤器
它是什麼 – OpenSeeFace 是一個輕量級、跨平台的函式庫,可從網路攝影機或影片串流中偵測 66 個臉部特徵點(以及視線和眨眼資訊)。核心模型是基於 MobileNetV3 的神經網路,並匯出為 ONNX,因此可以使用 onnxruntime 在 CPU 上快速執行(單核心上可達 30-60 fps)。它不是一個完整的虛擬角色操縱應用程式;相反,它透過 UDP 串流傳輸追蹤數據,以便其他程式(例如 Unity、Godot、VSeeFace、VTube Studio)可以驅動 3D/2D 虛擬角色。
為什麼它很重要 – 即時虛擬角色操縱需要穩定、低延遲的臉部特徵點,且能在雜訊照明、低解析度和各種頭部姿勢下運作。OpenSeeFace 以些許的精確度換取了穩健性和速度,使其適用於直播、VTubing 以及其他 CPU 資源有限的互動式媒體。
主要功能
| 功能 | 詳細資訊 |
|---|---|
| 臉部特徵點模型 | 66 個點(類似 iBUG-68)加上準 3D 輪廓點;包含眼睛開/閉、視線和眨眼提示。 |
| 模型變體 | 五種預訓練模型(-1 … 3),從超快/低準確度到較慢/高準確度(在一個 CPU 核心上約 213 fps → 44 fps)。 |
| ONNX Runtime 推論 | 無需 GPU 即可在 Windows、Linux、macOS 上執行;提供 Windows 預編譯的 facetracker.exe。 |
| UDP 輸出 | 以二進位封包傳送每幀的特徵點數據;可在獨立機器上接收,以保持擷取電腦隔離。 |
| Unity 整合 | OpenSee、OpenSeeShowPoints、OpenSeeLauncher、OpenSeeIKTarget 和 OpenSeeExpression 組件處理封包接收、視覺化、IK 驅動和使用者表情訓練。 |
| 跨語言支援 | 追蹤器是一個 Python 3 指令碼 (facetracker.py),可直接執行或透過編譯後的執行檔執行;依賴項極少 (onnxruntime, OpenCV, Pillow, NumPy)。 |
| 表情分類器 | 可選的基於 SVM 的表情偵測器,可針對每個使用者進行校準並儲存/載入。 |
| 穩健性 | 適用於部分遮擋、眼鏡、低光和廣泛的頭部姿勢範圍;人臉偵測使用自訂熱圖回歸模型或 RetinaFace。 |
典型工作流程
- 啟動追蹤器 – 執行
facetracker.exe(Windows) 或python facetracker.py(任何作業系統)。選擇攝影機或影片檔案,選擇模型 (--model 0-3),並可選擇啟用--visualize以在本地查看特徵點。 - 串流數據 – 指令碼會傳送包含特徵點座標(以及可選的視線/眨眼標記)的 UDP 封包。
- 在 Unity 中使用 – 將
OpenSee組件新增至 GameObject;它會在背景執行緒中接收封包,並透過trackingData公開。使用OpenSeeShowPoints來視覺化這些點,或將數據饋送至 VRM/Live2D 虛擬角色控制器。 - 可選的表情訓練 – 新增
OpenSeeExpression,為每個表情記錄幾個範例,訓練 SVM,然後在您的虛擬角色邏輯中查詢IsExpressionActive("smile")。
優勢
- 僅使用 CPU 的即時效能 – 無需 GPU;適用於低階筆記型電腦或串流設備。
- 在惡劣條件下表現穩健 – 對於虛擬角色使用案例,在低光、雜訊和部分遮擋下的表現優於許多同類解決方案(例如 MediaPipe)。
- 模組化設計 – UDP 串流讓您可以將擷取與渲染分開,減少延遲尖峰並保護攝影機隱私。
- 多種模型尺寸 – 您可以為多人臉選擇更快的模型,或為單人串流選擇更高品質的模型。
- 開源與寬鬆授權 – BSD-2-clause,易於嵌入商業專案。
限制
- 眼部區域準確度 – 眼部周圍的特徵點位置不如某些專用眼動追蹤器精確;眨眼偵測有效,但細緻的視線追蹤可能會抖動。
- CPU 負載 – 以 30 fps 追蹤單一人臉可能會佔用近一個完整的 CPU 核心;更高的影格率或多個人臉會成比例增加使用量。
- 無內建虛擬角色渲染器 – 您必須提供自己的 Unity/Unreal/Godot 整合(提供範例專案,但不是完整的終端使用者應用程式)。
- Linux onnxruntime 載入問題 – 部分使用者需要調整執行檔堆疊 (
execstack -c …) 才能載入函式庫。
快速入門
# 安裝依賴項 (建議透過 uv)
uv sync --locked # 建立虛擬環境
uv run facetracker.py --visualize 3 -c 0 # 網路攝影機, 模型 3, 顯示特徵點
在 Unity 中:
- 建立一個空的 GameObject。
- 新增
OpenSee和OpenSeeShowPoints組件。 - 按下 Play – 追蹤器將啟動(或使用
OpenSeeLauncher手動啟動)。
授權
程式碼和預訓練模型採用 BSD 2-clause 授權發布。第三方函式庫授權包含在發布二進位檔案的 Licenses 資料夾中。
更多資訊
- Unity 範例專案 – https://github.com/emilianavt/OpenSeeFaceSample
- 演示影片 – https://www.youtube.com/watch?v=AaNap_ud_3I
- 相關虛擬角色操縱應用程式 – VSeeFace (https://www.vseeface.icu/),它會消耗 OpenSeeFace 數據。
相關
- 專案
- 專案
- 專案
- 專案