>_ DevTrendsja

言語

ホーム

言語

セクション

フロントエンド バックエンド モバイル DevOps AI / ML ゲーム開発 ブロックチェーン 組み込み セキュリティ
Python

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

OSF.png

通常のウェブカメラからリアルタイムで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輪郭を使用しています。視線ベクトル座標が絶対値でわずかにずれていても、アルゴリズムは瞬きと発話時の口の形を正確に検出します。

Results1.png

Results2.png

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

EmiFace.png

あらゆるハードウェアに対応するモデルティア

リポジトリには、精度と速度のトレードオフが異なる複数のプリビルドモデルが含まれています。選択は --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 に保存します。

トラッカーをシーンに接続するには、いくつかのステップだけです:

  1. 空のGameObjectに OpenSeeOpenSeeShowPoints コンポーネントを追加します。
  2. Unityエディターでシーンを実行します。
  3. facetracker.py スクリプトを起動します。顔のポイントがすぐにシーン空間に表示されます。
  4. キャラクターの頭を制御するには、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つです。

関連プロジェクト