6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

TensorFlow.jsのfacemeshで顔向き推定を試してみた

Last updated at Posted at 2020-05-22

これはHead Pose Estimation using OpenCV and Dlibを参考にTensorFlow.jsのfacemeshにSolvePnPを用いた顔向き推定の実装の備忘録です。

前書き

調査前はVTuberが顔動かすのが当たり前の時代ですので大概のライブラリで顔向き推定は実装しているものかと思っていたのですが、どうやらそうではないようです。

それなりに高速に動くface-api.jsでは議論はあれども実装は進んでいない状況ですし、jeelizFaceFilterlive demoを見る限り速度、精度共に微妙そうです。

調べた中ではML Kitの顔認識で実装しているようですが、今回はブラウザで試してみたいのでML KitはiOS/Android用ですので検証しないことにしました。

そこで高速で精度良いfacemeshに顔向き推定を実装をするのも面白そうだと思い試しました。

実装について

Head Pose Estimation using OpenCV and Dlibを元に実装しまして、Rotation Matrix to Euler Anglesの方法でEulerAnglesを求めました。

実装して解ったのですが、SolvePnPは結構な頻度で外れ値を出します。
そのため、フレームレートを稼ぐのに難があります。
また、facemeshは3D座標を持っていますのでもっと簡単な計算で算出できそうなことに後から気づきました。
これから試す人はオンラインデモを参考にあとで後悔しないようお気をつけください。

OpenCV.jsのビルド

solvaPnP、Rodriguesの関数が必要で、OpenCV.jsをビルドしたのですが、そのままだと9.7Mありましたのでcore only buildをしまして、solvaPnP、Rodriguesを追加したうえで、2.5Mまで縮小することができました。

製作物

オンラインデモ

References

6
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?