ヘビーなニューラルネットワークフレームワーク不要の高速CPUベース顔追跡

通常のウェブカメラからリアルタイムで3Dアバターやキャラクターをアニメーションさせようとしたことがある人なら、きっとジレンマに直面したことがあるでしょう。重たいモデルを使ってグラフィックボードとプロセッサの半分を消費するか、結果として半秒の遅延のあるカクカクのマスクになるかです。ゲーム配信にとっては、これは致命的です。GPUはすでにレンダリングで負荷がかかっているからです。
emilianavtという開発者は、VTuber向けツールを作成していた際に、まさにこの問題にぶつかりました。それがOpenSeeFaceです。この軽量な顔とランドマーク追跡ライブラリはCPUに最適化されており、古めのハードウェアでも安定した30〜60 fpsを実現します。
高速動作の秘密:内部構造と仕組み
このプロジェクトは、多機能なアバターアニメーションプログラムを目指すものではありません。 specialized tracker( specialized tracker)です。ウェブカメラやファイルから動画をキャプチャし、顔を検出し、ランドマーク座標を計算して、UDP経由で готовыеデータを sendします。
モデルは元々はPyTorchでMobileNetV3に trainingされていました。しかしWindowsでは、PyTorch CPU推論が遅い这一问题がありました。著者はネットワークをONNX形式に変換し、実行をonnxruntimeに変更しました。リリースビルドには、不要なテレメトリ없는カスタムONNX Runtimeビルドが含まれています。
トラッカーのアーキテクチャは、複数の応用タスクを同時に解決します:
- キャプチャと推論が独立したPythonスクリプトまたはバイナリに分離されています。メインプログラム(Unityゲームなど)がクラッシュしても、パイプラインがカメラを巻き込むことはありません。
- UDP座標送信により、古めのノートPCで追跡を実行しながら、メインマシンでゲームや3Dシーンを実行できます。これによりリソースを節約でき、ストリーマーが配信で本人の顔を不小心に表示することを防ぎます。
- モデルはLS3D-W、WFLW、MPIIGazeデータセットとUnityEyesの合成目を trainingに使用しました。損失関数にはAdaptive Wing Lossのカスタム variantを使用しました。
興味深い詳細として、著者はランドマークを学术ベンチマークではなく、アバターアニメーション向けに specifically adaptedしました。ラベル付けはiBUG 68に closeですが、準3D輪郭を使用しています。視線ベクトル座標が絶対値でわずかにずれていても、アルゴリズムは瞬きと発話時の口の形を正確に検出します。


Google MediaPipe comparedすると、OpenSeeFaceの追跡は急剧な頭の回転、薄暗い照明、安価なウェブカメラのノイズに対して better hold upします。口の認識がより正確ですが、目の領域の追跡は一部の specialized solutionsには及びません。

あらゆるハードウェアに対応するモデルティア
リポジトリには、精度と速度のトレードオフが異なる複数のプリビルドモデルが含まれています。選択は --model 引数で設定します:
- Model -1: 非常に弱いプロセッサ向けのモード。視線追跡なしでシングルコアで最大213 fpsを達成しますが、追跡は非常に粗くなります。
- Model 0: 基本的な精度を持つ高速モデル(約68 fps)。
- Model 1: 速度と品質のバランスが取れた妥協点(約59 fps)。
- Model 2: 中程度のリソース使用で良好な追跡(約50 fps)。
- Model 3: デフォルトで最も正確なオプション(シングルコアで約44 fps)。
実際には、顔表現キャプチャには30 fpsもあれば十分なので、スクリプトはCPU時間を節約するためにフレームレート制限できます。
トラッカーの起動方法
コードの操作にはPython 3.6〜3.9と最小限のライブラリセットが必要です:
Python環境にこだわりたくない場合は、Releasesセクションに pyinstallerでビルドされた facetracker.exe を含む готовыйアーカイブがあります。
可視化を伴う基本的な起動は次のとおりです:
python facetracker.py --visualize 3 --pnp-points 1 --max-threads 4 -c 0
-c 0 フラグはウェブカメラのインデックスを指定します。事前に録画された動画を処理する必要がある場合は、代わりにファイル pathを渡します video.mp4。
Unityや他のエンジンとの統合
リポジトリには、Unity用の готовые C#スクリプトが含まれています。 OpenSee コンポーネントはバックグラウンドスレッドで着信UDPパケットを listenし、座標をパブリックフィールド trackingData に保存します。
トラッカーをシーンに接続するには、いくつかのステップだけです:
- 空のGameObjectに
OpenSeeとOpenSeeShowPointsコンポーネントを追加します。 - Unityエディターでシーンを実行します。
-
facetracker.pyスクリプトを起動します。顔のポイントがすぐにシーン空間に表示されます。 - キャラクターの頭を制御するには、FinalIKと一緒に
OpenSeeIKTargetコンポーネントを接続できます。
組み込みの OpenSeeLauncher マネージャーは自分自身を起動し、WinAPI Job Objects経由でトラッカーバイナリを適切に終了できます。Unityアプリケーションがエラーでクラッシュしても、子トラッカープロセスはメモリに残りません。
LIBSVMによる感情検出
ランドマーク座標に加えて、プロジェクトには OpenSeeExpression コンポーネントが含まれています。これは、特定の人物的感情分類(笑顔、怒り、驚き)のタスクを解決します。
地球上の全員に対応する1つの汎用ニューラルネットワークを trainingしようとする代わりに、著者はSVM分類器を使用しました。ユーザーが自分でシステムを calibrateします:
- Unityインスペクターに感情名を入力します。
- 必要な顔表情を作り、記録を有効にします。
- 頭を回転させたり話したりして、モデルが運動時の表情歪みを記憶するようにします。
- Trainを押します。
training済みモデルは отдельномファイルに保存され、次のアプリケーション起動時にロードされます。
すでに使用されている場所
OpenSeeFaceは、いくつかの人気のアニメーション工具の基盤となっています:
- VSeeFace: VRMとVSFAvatar形式をサポートする無料のVTuberプログラム。
- VTube Studio: ウェブカメラで2D Live2Dモデルを制御するツール。
- VPUPPR: Godotエンジン上のオープンアバターrenderer。
このプロジェクト誰が benefitsするか
このライブラリは、高価なヘッドセットやTrueDepth搭載のiPhoneを購入せずに高速な facial captureが必要な、ゲーム開発者やインタラクティブ installationに最適です。コードはBSD 2-Clauseライセンスで配布されているため、商用プロジェクトに安全に組み込むことができます。
微細な網膜の詳細を認識したり、医療 목적으로サブミリ精度のpolygonal 3D maskを構築する必要がある場合は、OpenSeeFaceは機能しません。しかしキャラクターアニメーション、头的動きインターフェース制御、ストリーミングにとっては、GitHub上で最も実用的で軽量なソリューションの1つです。
関連プロジェクト