FaceMeshV2 : BlendShapeも計算可能な顔のキーポイント検出モデル
BlendShapeも計算可能な機械学習モデルであるFaceMeshV2のご紹介です。FaceMeshV2を使用することで、顔画像からキーポイントとBlendShapeを計算可能です。
FaceMeshV2の概要
FaceMeshV2はGoogleの開発した顔画像からキーポイントを検出するモデルです。2023年3月24日にリリースのMediaPipe v0.9.2.1から導入されました。FaceMeshV2を使用することで、従来のFaceMeshV1よりも高精度なキーポイントを取得可能です。また、新たにBlendShapeを取得可能になりました。

出典:https://developers.google.com/mediapipe/solutions/vision/face_landmarker
FaceMeshV2の実行例
FaceMeshV2の実行例です。入力解像度の拡張により顔のキーポイントが従来より正確になり、さらに目のIrisに関するキーポイントが追加されました。また、BlendShapeのパラメータとして、瞬きしているか、口を開いているかなどを取得可能になりました。

入力画像

出力画像

BlendShapeの出力
FaceMeshV2のアーキテクチャ
FaceMeshV1では192x192x3の画像を入力しますが、FaceMeshV2では256x256x3の画像を入力します。また、FaceMeshV1では468だったキーポイントがFaceMeshV2では478に増加しています。追加されたのは目に関するキーポイントで、新たにLEFT_IRISとRIGHT_IRISが追加されています。
FaceMeshV1では、画像を+-1.0にスケーリングしますが、FaceMeshV2では0–1.0にスケーリングしています。
FaceMeshV2の出力フォーマットはFaceMeshV1と同様で、各キーポイントごとに(x,y,z)が出力されます。
FaceMeshV2のBlendShape
FaceMeshV2ではBlendShapeを計算するモデルが追加されています。検知可能な内容は下記の52種類で、それぞれ0–1の確率値が格納されます。
public static string [] BlendshapeLabels = {
"_neutral",
"browDownLeft",
"browDownRight",
"browInnerUp",
"browOuterUpLeft",
"browOuterUpRight",
"cheekPuff",
"cheekSquintLeft",
"cheekSquintRight",
"eyeBlinkLeft",
"eyeBlinkRight",
"eyeLookDownLeft",
"eyeLookDownRight",
"eyeLookInLeft",
"eyeLookInRight",
"eyeLookOutLeft",
"eyeLookOutRight",
"eyeLookUpLeft",
"eyeLookUpRight",
"eyeSquintLeft",
"eyeSquintRight",
"eyeWideLeft",
"eyeWideRight",
"jawForward",
"jawLeft",
"jawOpen",
"jawRight",
"mouthClose",
"mouthDimpleLeft",
"mouthDimpleRight",
"mouthFrownLeft",
"mouthFrownRight",
"mouthFunnel",
"mouthLeft",
"mouthLowerDownLeft",
"mouthLowerDownRight",
"mouthPressLeft",
"mouthPressRight",
"mouthPucker",
"mouthRight",
"mouthRollLower",
"mouthRollUpper",
"mouthShrugLower",
"mouthShrugUpper",
"mouthSmileLeft",
"mouthSmileRight",
"mouthStretchLeft",
"mouthStretchRight",
"mouthUpperUpLeft",
"mouthUpperUpRight",
"noseSneerLeft",
"noseSneerRight"
};
BlendShapeへの入力は、FaceMeshの出力を画像空間にラスタライズした(x,y)座標です。478点のうち、146点を入力します。zは使用しません。
BlendShapeのモデルには、最初に平均除去と正規化が含まれています。ここで、ピクセル座標から内部座標への変換が行われ、ラスタライズした後の画素を入力しても問題なく動作するようになっています。

MediaPipeからFaceMeshV2を使用する
MediaPipeからFaceMeshV2を使用するには、下記のColabを使用します。face_landmarker_v2_with_blendshapes.taskをダウンロードした上で、base_optionにface_landmarker_v2_with_blendshapes.taskを与え、output_face_blendshapes=Trueにすると、BlendShapeを取得可能です。
ailia SDKからFaceMeshV2を使用する
ailia SDKからFaceMeshV2を使用するには、下記のコマンドを使用します。
$ python3 facemesh_v2.py --input input.jpg
BlendShapeの計算を行う場合は、 — blendshapeオプションを付与します。
$ python3 facemesh_v2.py --input input.jpg --blendshape
UnityからFaceMeshV2を使用する
下記にUnityとailia SDKでFaceMeshV2を使用するサンプルがあります。

UnityからFaceMeshV2を実行した例
アイリア株式会社はAIを実用化する会社として、クロスプラットフォームでGPUを使用した高速な推論を行うことができるailia SDKを開発しています。アイリア株式会社ではコンサルティングからモデル作成、SDKの提供、AIを利用したアプリ・システム開発、サポートまで、 AIに関するトータルソリューションを提供していますのでお気軽にお問い合わせください。
ailia Tech BLOG