FaceShapeDeformations and Action Units

元ネタ

FaceShapeDeformationsプロパティが表す意味はなに?

Kinect HD Face APIでは顔の形状や動きをプロパティとして取得することができます。実際のプロパティには以下の様なものがあります。

Quaternionはそのまま回転のプロパティとして使えばいいのですが、3つあるEnumプロパティの内、FaceShapeAnimation, FaceShapeDeformationsではドキュメントのDescriptionが空欄のままであり、どんな意味合いを持つのか分かりません。特に FaceShapeDeformations プロパティは PCA01, PCA02など、どんな意味合いを持つのか推測も難しいため、「どうやって使うのか」「他のプロパティとの関連性はなんなのか」といったことが分からない!という投稿になっています。 *1

「そうだよな…。すまんかった」という回答

回答ではドキュメントが分かりにくいことは理解している、今後この辺りのドキュメントを改善していく予定である旨が告げられています。 また、各プロパティの詳細については Confused about face tranking, points and animationsのスレッドで紹介されているので、そこを参照するようにというアドバイスでした。

で、結局プロパティの意味は?

※ここから先は自信がないのであまり信用しないでください。

FaceShapeDeformations, FaceShapeAnimationsはそれぞれShape Unit(SU), Animation Unit(AU)をプロパティとして持っています。

SUはその名の通り顔の形状を表すプロパティでKINECTのセンサによって検知された顔の3Dモデルの形状的特徴を表してます。従って、トラッキングされている間、もしくは顔の3Dモデルが再度ビルドされるまでの間はSUの値が変化することはありません。

一方でAUは顔の動きを表すプロパティですので、毎フレーム値が変化する可能性があります。また、あくまでも顔の形状変化に基づくプロパティであるため、全く別のSUを持つような顔の3Dモデルが与えられた場合には(例えば口角が非常に下がった顔モデルと非常に上がった顔モデルが与えられた場合には)、全く同じように顔のパーツを変形させたとしても同じような表情を検知するというわけではありません。

また、HighDetailFacePointはモデル中に存在する顔の頂点1347個の内、特に意味合いが強いものに絞ったインデックスを提供します。このEnumからアクセス出来ない頂点にもアクセスする方法は存在します。

まとめ

というわけでなかなか複雑ですが、FaceShapeは顔の形状的特徴、FaceAnimationは顔の動き的特徴を表すということを抑えておけば大丈夫そうです。

*1:ちなみにPCAは Principal Component Analysisの略で、顔認識などで用いられるアルゴリズムの一種です