Closed ikeno-ikeo closed 3 years ago
ブランチを切り分けてなかったので、余計なコードまでついてきてます。すいません。
PRありがとうございます。手元で新しい視線推定を試していますが良くなっているように思います。
両目ボーンを使わなくする変更については採用するかどうか迷っています。 従来は、モーションを手で修正する際に多くのケースで両目ボーンだけ修正すればよくなるように、 両目ボーンを使う方針にしていたのですが、右目ボーンと左目ボーンだけのモーションにしたほうが便利でしょうか?
両目ボーンを使用した場合と使用しない場合で後者のほうが見た目がいい気がしたので手元ではずしていました。
両目ボーンに対しては補正を行っていないようですので、両目ボーンを使用しないほうが補正が強く掛かるせいだと思われます。従来、
としていた順番を1->3->2とすることで両目ボーン使用時と不使用時で同じ結果となります。(つまりPRの視線推定は補正を前提にしていて計算がおかしいということです…。)
また、キーの間引き処理がどう行われるかにもよりますが、両目と左右の目が別々に間引かれると意図しない結果になるのではないかと思います。
わかりました。そういうことなら補正係数だけ見直して両目ボーンを使うことにしようと思います。 なお間引きに関しては、実際に使っていると間引き後に残る右目・左目のキーフレームは角度が小さく、 個数も少ないので、別々に間引くことによる悪影響は殆どないだろうと考えています。
ありがとうございました。 一応OpenFaceからコピーされたコードは残さない形にして再実装しました。
お目汚しです。 横を向いた時、さらに目が画面に対して奥側を向いた場合の視線方向が実際とズレることが多かったために、適当な補正を入れてみました。openCVなどを理解していないため、汚いコードになっているかと思います。
OpenFaceで使用している
GazeAnalysis::EstimateGaze()
の推定する黒目の深度とLandmarkDetector
の推定する目の深度がズレていたため、Landmark側の深度で黒目の位置を補正してみました。 またオリジナルでは球と直線の交差判定を行っている部分を単なるベクトルの向きを得るだけにしています。