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 整合 OpenSeeOpenSeeShowPointsOpenSeeLauncherOpenSeeIKTargetOpenSeeExpression 組件處理封包接收、視覺化、IK 驅動和使用者表情訓練。
跨語言支援 追蹤器是一個 Python 3 指令碼 (facetracker.py),可直接執行或透過編譯後的執行檔執行;依賴項極少 (onnxruntime, OpenCV, Pillow, NumPy)。
表情分類器 可選的基於 SVM 的表情偵測器,可針對每個使用者進行校準並儲存/載入。
穩健性 適用於部分遮擋、眼鏡、低光和廣泛的頭部姿勢範圍;人臉偵測使用自訂熱圖回歸模型或 RetinaFace。

典型工作流程

  1. 啟動追蹤器 – 執行 facetracker.exe (Windows) 或 python facetracker.py (任何作業系統)。選擇攝影機或影片檔案,選擇模型 (--model 0-3),並可選擇啟用 --visualize 以在本地查看特徵點。
  2. 串流數據 – 指令碼會傳送包含特徵點座標(以及可選的視線/眨眼標記)的 UDP 封包。
  3. 在 Unity 中使用 – 將 OpenSee 組件新增至 GameObject;它會在背景執行緒中接收封包,並透過 trackingData 公開。使用 OpenSeeShowPoints 來視覺化這些點,或將數據饋送至 VRM/Live2D 虛擬角色控制器。
  4. 可選的表情訓練 – 新增 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 中:

  1. 建立一個空的 GameObject。
  2. 新增 OpenSeeOpenSeeShowPoints 組件。
  3. 按下 Play – 追蹤器將啟動(或使用 OpenSeeLauncher 手動啟動)。

授權

程式碼和預訓練模型採用 BSD 2-clause 授權發布。第三方函式庫授權包含在發布二進位檔案的 Licenses 資料夾中。

更多資訊

相關

  • 專案
  • 專案
  • 專案
  • 專案