Name String
XR_ANDROID_face_tracking
拡張機能のタイプ
インスタンス拡張機能
Registered Extension Number
459
リビジョン
3
拡張機能とバージョンの依存関係
最終更新日
2025-06-04
IP ステータス
既知の IP 申し立てはありません。
寄与者
Spencer Quin(Google)
Jared Finder, Google
Levana Chen(Google)
概要
この拡張機能により、アプリケーションはブレンド シェイプの重みを取得し、XR エクスペリエンスで表情をレンダリングできます。
この拡張機能は、仮想空間でリアルなアバターやユーザーの表現を作成するために必要な情報を提供することを目的としています。アプリは、ブレンドシェイプの重みを取得する前に、顔のキャリブレーションの有効化を確認できます。
顔トラッカー
顔トラッカーは、ユーザーを向いた画像ストリームとカメラのキャリブレーションを通じて表情を追跡するセンシング デバイスです。この拡張機能の主な目的は、仮想シーンでユーザーの表情をアバターにマッピングすることです。
顔追跡データは機密性の高い個人情報であり、個人のプライバシーと完全性に密接に関連しています。顔追跡データを保存または転送するアプリは、常にユーザーに明示的な同意を求めることが強く推奨されます。
- アプリが顔トラッカーへのアクセスを許可されるまで、アクティブな顔トラッカーを作成する際に
XR_ERROR_PERMISSION_INSUFFICIENTがアプリに返されます。 - xrGetFaceStateANDROID を使用して顔の状態を取得する場合、アプリのアクセスが許可されていない限り、XrFaceStateANDROID::isValid は
XR_TRUEを返しません。
システムの性能を検査する
XrSystemFaceTrackingPropertiesANDROID 構造体は次のように定義されます。
typedef struct XrSystemFaceTrackingPropertiesANDROID {
XrStructureType type;
void* next;
XrBool32 supportsFaceTracking;
} XrSystemFaceTrackingPropertiesANDROID;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。supportsFaceTrackingは、現在のシステムが顔のトラッキングをサポートしているかどうかを示す XrBool32 です。
アプリケーションは、xrGetSystemProperties を呼び出すときに XrSystemProperties を XrSystemFaceTrackingPropertiesANDROID 構造体で拡張することで、システムが顔トラッキングに対応しているかどうかを検査できます。
ランタイムが supportsFaceTracking に対して XR_FALSE を返す場合に限り、ランタイムは xrCreateFaceTrackerANDROID から XR_ERROR_FEATURE_UNSUPPORTED を返さなければなりません。
顔トラッカー ハンドルを作成する
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
XrFaceTrackerANDROID ハンドルは、顔トラッキング用の顔トラッカーを表します。
このハンドルは、この拡張機能の他の関数を使用して顔追跡データにアクセスするために使用できます。
xrCreateFaceTrackerANDROID 関数は次のように定義されます。
XrResult xrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker);
パラメータの説明
sessionは、フェイストラッカーがアクティブになる XrSession ハンドルです。createInfoは、顔トラッカーの指定に使用される XrFaceTrackerCreateInfoANDROID です。faceTrackerは、返された XrFaceTrackerANDROID ハンドルです。
アプリケーションは、xrCreateFaceTrackerANDROID 関数を使用して XrFaceTrackerANDROID ハンドルを作成できます。
システムが顔トラッキングをサポートしていない場合、xrCreateFaceTrackerANDROID は XR_ERROR_FEATURE_UNSUPPORTED を返します。
有効な使用方法(暗黙的)
- xrCreateFaceTrackerANDROID を呼び出す前に、
XR_ANDROID_face_tracking拡張機能を有効にする必要があります。 sessionは有効な XrSession ハンドルでなければなりません。createInfoは、有効な XrFaceTrackerCreateInfoANDROID 構造体へのポインタでなければなりません。faceTrackerは XrFaceTrackerANDROID ハンドルへのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHED
XrFaceTrackerCreateInfoANDROID 構造は次のように記述されます。
typedef struct XrFaceTrackerCreateInfoANDROID {
XrStructureType type;
void* next;
} XrFaceTrackerCreateInfoANDROID;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、このような構造は定義されていません。
XrFaceTrackerCreateInfoANDROID 構造体は、XrFaceTrackerANDROID ハンドルを作成するための情報を記述します。
有効な使用方法(暗黙的)
- XrFaceTrackerCreateInfoANDROID を使用する前に、
XR_ANDROID_face_tracking拡張機能を有効にする必要があります。 typeはXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROIDでなければなりません。nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。
xrDestroyFaceTrackerANDROID 関数は次のように定義されます。
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
パラメータの説明
faceTrackerは、xrCreateFaceTrackerANDROID によって以前に作成された XrFaceTrackerANDROID です。
xrDestroyFaceTrackerANDROID 関数は、顔追跡エクスペリエンスが終了したときに faceTracker と基盤となるリソースを解放します。
有効な使用方法(暗黙的)
- xrDestroyFaceTrackerANDROID を呼び出す前に、
XR_ANDROID_face_tracking拡張機能を有効にする必要があります。 faceTrackerは有効な XrFaceTrackerANDROID ハンドルでなければなりません。
スレッドセーフ
faceTrackerとその子ハンドルへのアクセスは、外部で同期しなければなりません
戻りコード
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
顔のキャリブレーションを確認する
xrGetFaceCalibrationStateANDROID 関数は次のように定義されます。
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
パラメータの説明
faceTrackerは、xrCreateFaceTrackerANDROID によって以前に作成された XrFaceTrackerANDROID です。faceIsCalibratedOutputは、顔トラッカーが調整済みかどうかを示します。
アプリケーションは、xrGetFaceCalibrationStateANDROID 関数を使用して顔のキャリブレーション状態を確認できます。
トラッキング サービスが初期化中の場合、ランタイムは xrGetFaceCalibrationStateANDROID から XR_ERROR_SERVICE_NOT_READY_ANDROID を返すことで、アプリが後で再試行できることを示すことがあります。
システムが顔のキャリブレーションをサポートしていない場合、xrGetFaceCalibrationStateANDROID は XR_ERROR_FEATURE_UNSUPPORTED を返します。それ以外の場合は、顔のキャリブレーション状態を反映するために faceIsCalibratedOutput を XR_TRUE に設定できます。
有効な使用方法(暗黙的)
- xrGetFaceCalibrationStateANDROID を呼び出す前に、
XR_ANDROID_face_tracking拡張機能を有効にする必要があります。 faceTrackerは有効な XrFaceTrackerANDROID ハンドルでなければなりません。faceIsCalibratedOutputはXrBool32値へのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_SERVICE_NOT_READY_ANDROID
表情を取得する
xrGetFaceStateANDROID 関数は、特定の時点での顔の表情のブレンド シェイプを返します。
XrResult xrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput);
パラメータの説明
faceTrackerは、xrCreateFaceTrackerANDROID によって以前に作成された XrFaceTrackerANDROID です。getInfoは、顔の表情を取得する情報を記述する XrFaceStateGetInfoANDROID へのポインタです。faceStateOutputは、返された顔トラッキングの状態と顔の表情を受け取る XrFaceStateANDROID へのポインタです。
有効な使用方法(暗黙的)
- xrGetFaceStateANDROID を呼び出す前に、
XR_ANDROID_face_tracking拡張機能を有効にする必要があります。 faceTrackerは有効な XrFaceTrackerANDROID ハンドルでなければなりません。getInfoは、有効な XrFaceStateGetInfoANDROID 構造体へのポインタでなければなりません。faceStateOutputは XrFaceStateANDROID 構造体へのポインタでなければなりません。
戻りコード
XR_SUCCESSXR_SESSION_LOSS_PENDING
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_VALIDATION_FAILUREXR_ERROR_RUNTIME_FAILUREXR_ERROR_HANDLE_INVALIDXR_ERROR_INSTANCE_LOSTXR_ERROR_SESSION_LOSTXR_ERROR_OUT_OF_MEMORYXR_ERROR_LIMIT_REACHEDXR_ERROR_TIME_INVALID
XrFaceStateGetInfoANDROID 構造体は、顔の表情を取得するための情報を記述します。
typedef struct XrFaceStateGetInfoANDROID {
XrStructureType type;
void* next;
XrTime time;
} XrFaceStateGetInfoANDROID;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、このような構造は定義されていません。timeは、表情がリクエストされるXrTimeです。
アプリは、レンダリングされたフレームの予測表示時間と同じ時間をリクエストするべきです。
有効な使用方法(暗黙的)
- XrFaceStateGetInfoANDROID を使用する前に、
XR_ANDROID_face_tracking拡張機能を有効にする必要があります。 typeはXR_TYPE_FACE_STATE_GET_INFO_ANDROIDでなければなりません。nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。
XrFaceStateANDROID 構造体は、顔追跡の状態と表情を返します。
typedef struct XrFaceStateANDROID {
XrStructureType type;
void* next;
uint32_t parametersCapacityInput;
uint32_t parametersCountOutput;
float* parameters;
XrFaceTrackingStateANDROID faceTrackingState;
XrTime sampleTime;
XrBool32 isValid;
uint32_t regionConfidencesCapacityInput;
uint32_t regionConfidencesCountOutput;
float* regionConfidences;
} XrFaceStateANDROID;
メンバーの説明
typeは、この構造の XrStructureType です。nextは、NULLまたは構造体チェーン内の次の構造体へのポインタです。コア OpenXR またはこの拡張機能では、このような構造は定義されていません。parametersCapacityInputは、parameters配列の容量を記述するuint32_tです。必要な容量を取得するリクエストを示す場合は 0 です。parametersCountOutputは、parametersの数、またはparametersCapacityInputが不十分な場合に必要な容量を記述するuint32_tです。parametersは、アプリケーションによって割り当てられたfloatの配列へのポインタです。この配列には、表情のブレンド シェイプの重みが入力されます。faceTrackingStateは、顔トラッキングの有効性ステータスのXrFaceTrackingStateANDROIDです。sampleTimeは、返された式が追跡または外挿されるXrTime時間です。その時点での外挿が成功した場合は、式重みがリクエストされた時刻に等しくなります。isValidは、データが現在のフレームのものでなくても有効かどうかを示します。regionConfidencesCapacityInputは、regionConfidences配列の容量を記述するuint32_tです。必要な容量を取得するリクエストを示す場合は 0 です。regionConfidencesCountOutputは、regionConfidencesの数、またはregionConfidencesCapacityInputが不十分な場合に必要な容量を記述するuint32_tです。regionConfidencesは、各顔領域の信頼値が入力されるfloatのアプリ割り当て配列へのポインタです。- 必要な
parametersとregionConfidencesのサイズを取得する方法について詳しくは、バッファサイズ パラメータのセクションをご覧ください。
アプリケーションは、parametersCapacityInput を XR_FACE_PARAMETER_COUNT_ANDROID に設定して、XrFaceParameterIndicesANDROID でインデックス登録された表情を取得できます。
返される parameters は、現在の表情のブレンド シェイプの重みを表します。
parameters 配列の更新は、アプリケーションが対応する表情列挙型(XrFaceParameterIndicesANDROID など)を使用して要素をインデックス登録できるように順序付けられます。
有効な使用方法(暗黙的)
- XrFaceStateANDROID を使用する前に、
XR_ANDROID_face_tracking拡張機能を有効にする必要があります。 typeはXR_TYPE_FACE_STATE_ANDROIDでなければなりません。nextは、NULLまたは構造体チェーン内の次の構造体への有効なポインタでなければなりません。parametersCapacityInputが0, parametersでない場合、parametersCapacityInput float値の配列へのポインタでなければなりません。regionConfidencesCapacityInputが0, regionConfidencesでない場合、regionConfidencesCapacityInput float値の配列へのポインタでなければなりません。faceTrackingStateは、有効な XrFaceTrackingStateANDROID 値でなければなりません。
XrFaceTrackingStateANDROID 列挙型は、フェイストラッカーのさまざまな状態を識別します。
typedef enum XrFaceTrackingStateANDROID {
XR_FACE_TRACKING_STATE_PAUSED_ANDROID = 0,
XR_FACE_TRACKING_STATE_STOPPED_ANDROID = 1,
XR_FACE_TRACKING_STATE_TRACKING_ANDROID = 2
} XrFaceTrackingStateANDROID;
列挙型の意味は次のとおりです。
Enum |
説明 |
|
顔トラッキングが一時停止しているが、今後再開される可能性があることを示します。 |
|
トラッキングは停止したが、クライアントにはまだアクティブなフェイストラッカーがある。 |
|
顔がトラッキングされ、ポーズが最新の状態です。 |
信頼領域
XR_ANDROID_face_tracking 拡張機能は、左目、右目、下顔面の 3 つの顔領域の信頼値も提供します。これらの値は 0(信頼度なし)から 1(信頼度が最も高い)の範囲で、各リージョンの顔トラッキングの精度を示します。
これらの信頼値を使用して、ブレンドシェイプを段階的に無効にしたり、対応する顔領域に視覚フィルタ(ぼかしなど)を適用したりできます。基本的なオン/オフ制御では、しきい値 0.3 を使用して、対応する顔領域のブレンドシェイプを完全に無効にすることをおすすめします。
「下顔面」領域は、目から下のすべて(口、顎、頬、鼻など)を表します。目の領域には、目と眉毛の領域が含まれます。
次の表に、各信頼度領域に関連付けられているブレンドシェイプを示します。
| 信頼区間 | ブレンドシェイプ |
|---|---|
| 下顔面 | `XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID`、 `XR_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID`、 `XR_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID`、 `XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID`、 `XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID`、 `XR_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID`、 `XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID`、 `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID`、 `XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID`、 `XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID`、 `XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID`、 `XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID` |
| 左上/右上 | `XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID`、 `XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID`、 `XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID` |
ブレンド シェイプの規則
この拡張機能は、縮小された G-Nome 形式用に XR_FACE_PARAMETER_COUNT_ANDROID を介して 68 個のブレンド シェイプを定義します。この列挙型の各パラメータは、値が float 型のブレンド シェイプ配列へのインデックスであり、実行時に 1 ~ 0 に正規化されます。
typedef enum XrFaceParameterIndicesANDROID {
XR_FACE_PARAMETER_INDICES_BROW_LOWERER_L_ANDROID = 0,
XR_FACE_PARAMETER_INDICES_BROW_LOWERER_R_ANDROID = 1,
XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_L_ANDROID = 2,
XR_FACE_PARAMETER_INDICES_CHEEK_PUFF_R_ANDROID = 3,
XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_L_ANDROID = 4,
XR_FACE_PARAMETER_INDICES_CHEEK_RAISER_R_ANDROID = 5,
XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_L_ANDROID = 6,
XR_FACE_PARAMETER_INDICES_CHEEK_SUCK_R_ANDROID = 7,
XR_FACE_PARAMETER_INDICES_CHIN_RAISER_B_ANDROID = 8,
XR_FACE_PARAMETER_INDICES_CHIN_RAISER_T_ANDROID = 9,
XR_FACE_PARAMETER_INDICES_DIMPLER_L_ANDROID = 10,
XR_FACE_PARAMETER_INDICES_DIMPLER_R_ANDROID = 11,
XR_FACE_PARAMETER_INDICES_EYES_CLOSED_L_ANDROID = 12,
XR_FACE_PARAMETER_INDICES_EYES_CLOSED_R_ANDROID = 13,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_L_ANDROID = 14,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_DOWN_R_ANDROID = 15,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_L_ANDROID = 16,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_LEFT_R_ANDROID = 17,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_L_ANDROID = 18,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_RIGHT_R_ANDROID = 19,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_L_ANDROID = 20,
XR_FACE_PARAMETER_INDICES_EYES_LOOK_UP_R_ANDROID = 21,
XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_L_ANDROID = 22,
XR_FACE_PARAMETER_INDICES_INNER_BROW_RAISER_R_ANDROID = 23,
XR_FACE_PARAMETER_INDICES_JAW_DROP_ANDROID = 24,
XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_LEFT_ANDROID = 25,
XR_FACE_PARAMETER_INDICES_JAW_SIDEWAYS_RIGHT_ANDROID = 26,
XR_FACE_PARAMETER_INDICES_JAW_THRUST_ANDROID = 27,
XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_L_ANDROID = 28,
XR_FACE_PARAMETER_INDICES_LID_TIGHTENER_R_ANDROID = 29,
XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_L_ANDROID = 30,
XR_FACE_PARAMETER_INDICES_LIP_CORNER_DEPRESSOR_R_ANDROID = 31,
XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_L_ANDROID = 32,
XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID = 33,
XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID = 34,
XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID = 35,
XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID = 36,
XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID = 37,
XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID = 38,
XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID = 39,
XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID = 40,
XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID = 41,
XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID = 42,
XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID = 43,
XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID = 44,
XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID = 45,
XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID = 46,
XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID = 47,
XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID = 48,
XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID = 49,
XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID = 50,
XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID = 51,
XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID = 52,
XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID = 53,
XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID = 54,
XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID = 55,
XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID = 56,
XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_L_ANDROID = 57,
XR_FACE_PARAMETER_INDICES_OUTER_BROW_RAISER_R_ANDROID = 58,
XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID = 59,
XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID = 60,
XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID = 61,
XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID = 62,
XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID = 63,
XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID = 64,
XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID = 65,
XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID = 66,
XR_FACE_PARAMETER_INDICES_TONGUE_DOWN_ANDROID = 67
} XrFaceParameterIndicesANDROID;
| インデックス | 名前 | 参照画像 | |
|---|---|---|---|
| 0 | BROW_LOWERER_L |
|
|
| 1 | BROW_LOWERER_R |
|
|
| 2 | CHEEK_PUFF_L |
|
|
| 3 | CHEEK_PUFF_R |
|
|
| 4 | CHEEK_RAISER_L |
|
|
| 5 | CHEEK_RAISER_R |
|
|
| 6 | CHEEK_SUCK_L |
|
|
| 7 | CHEEK_SUCK_R |
|
|
| 8 | CHIN_RAISER_B |
|
|
| 9 | CHIN_RAISER_T |
|
|
| 10 | DIMPLER_L |
|
|
| 11 | DIMPLER_R |
|
|
| 12 | EYES_CLOSED_L |
|
|
| 13 | EYES_CLOSED_R |
|
|
| 14 | EYES_LOOK_DOWN_L |
|
|
| 15 | EYES_LOOK_DOWN_R |
|
|
| 16 | EYES_LOOK_LEFT_L |
|
|
| 17 | EYES_LOOK_LEFT_R |
|
|
| 18 | EYES_LOOK_RIGHT_L |
|
|
| 19 | EYES_LOOK_RIGHT_R |
|
|
| 20 | EYES_LOOK_UP_L |
|
|
| 21 | EYES_LOOK_UP_R |
|
|
| 22 | INNER_BROW_RAISER_L |
|
|
| 23 | INNER_BROW_RAISER_R |
|
|
| 24 | JAW_DROP |
|
|
| 25 | JAW_SIDEWAYS_LEFT |
|
|
| 26 | JAW_SIDEWAYS_RIGHT |
|
|
| 27 | JAW_THRUST |
|
|
| 28 | LID_TIGHTENER_L |
|
|
| 29 | LID_TIGHTENER_R |
|
|
| 30 | LIP_CORNER_DEPRESSOR_L |
|
|
| 31 | LIP_CORNER_DEPRESSOR_R |
|
|
| 32 | LIP_CORNER_PULLER_L |
|
|
| 33 | LIP_CORNER_PULLER_R |
|
|
| 34 | LIP_FUNNELER_LB |
|
|
| 35 | LIP_FUNNELER_LT |
|
|
| 36 | LIP_FUNNELER_RB |
|
|
| 37 | LIP_FUNNELER_RT |
|
|
| 38 | LIP_PRESSOR_L |
|
|
| 39 | LIP_PRESSOR_R |
|
|
| 40 | LIP_PUCKER_L |
|
|
| 41 | LIP_PUCKER_R |
|
|
| 42 | LIP_STRETCHER_L |
|
|
| 43 | LIP_STRETCHER_R |
|
|
| 44 | LIP_SUCK_LB |
|
|
| 45 | LIP_SUCK_LT |
|
|
| 46 | LIP_SUCK_RB |
|
|
| 47 | LIP_SUCK_RT |
|
|
| 48 | LIP_TIGHTENER_L |
|
|
| 49 | LIP_TIGHTENER_R |
|
|
| 50 | LIPS_TOWARD |
|
|
| 51 | LOWER_LIP_DEPRESSOR_L |
|
|
| 52 | LOWER_LIP_DEPRESSOR_R |
|
|
| 53 | MOUTH_LEFT |
|
|
| 54 | MOUTH_RIGHT |
|
|
| 55 | NOSE_WRINKLER_L |
|
|
| 56 | NOSE_WRINKLER_R |
|
|
| 57 | OUTER_BROW_RAISER_L |
|
|
| 58 | OUTER_BROW_RAISER_R |
|
|
| 59 | UPPER_LID_RAISER_L |
|
|
| 60 | UPPER_LID_RAISER_R |
|
|
| 61 | UPPER_LIP_RAISER_L |
|
|
| 62 | UPPER_LIP_RAISER_R |
|
|
| 63 | 舌を出す |
|
|
| 64 | TONGUE_LEFT |
|
|
| 65 | TONGUE_RIGHT |
|
|
| 66 | TONGUE_UP |
|
|
| 67 | TONGUE_DOWN |
|
|
顔トラッキングのサンプルコード
次のサンプルコードは、顔の表情のブレンド シェイプのすべての重みを取得する方法を示しています。
XrInstance instance; // previously initialized
XrSystemId systemId; // previously initialized
XrSession session; // previously initialized, e.g. created at app startup.
// The function pointers are previously initialized using xrGetInstanceProcAddr.
PFN_xrCreateFaceTrackerANDROID xrCreateFaceTrackerANDROID; // previously initialized
PFN_xrDestroyFaceTrackerANDROID xrDestroyFaceTrackerANDROID; // previously initialized
PFN_xrGetFaceStateANDROID xrGetFaceStateANDROID; // previously initialized
PFN_xrGetFaceCalibrationStateANDROID xrGetFaceCalibrationStateANDROID; // previously initialized
// Inspect system capability
XrSystemProperties properties{XR_TYPE_SYSTEM_PROPERTIES};
XrSystemFaceTrackingPropertiesANDROID faceTrackingProperties{XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID};
properties.next = &faceTrackingProperties;
CHK_XR(xrGetSystemProperties(instance, systemId, &properties));
if (!faceTrackingProperties.supportsFaceTracking) {
// face tracking is not supported.
return;
}
XrFaceTrackerANDROID faceTracker;
XrFaceTrackerCreateInfoANDROID
createInfo{.type = XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID,
.next = nullptr};
CHK_XR(xrCreateFaceTrackerANDROID(session, &createInfo, &faceTracker));
// If the system supports face calibration:
XrBool32 isCalibrated;
CHK_XR(xrGetFaceCalibrationStateANDROID(faceTracker, &isCalibrated));
if (!isCalibrated) {
// Redirect the user to system calibration setting.
}
XrFaceStateANDROID faceState;
float faceExpressionParameters[XR_FACE_PARAMETER_COUNT_ANDROID];
faceState.type = XR_TYPE_FACE_STATE_ANDROID;
faceState.next = nullptr;
faceState.parametersCapacityInput = XR_FACE_PARAMETER_COUNT_ANDROID;
faceState.parameters = faceExpressionParameters;
float regionConfidences[XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID];
faceState.regionConfidencesCapacityInput = XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID;
faceState.regionConfidences = regionConfidences;
while (1) {
// ...
// For every frame in the frame loop
// ...
XrFrameState frameState; // previously returned from xrWaitFrame
XrFaceStateGetInfoANDROID faceGetInfo{
.type = XR_TYPE_FACE_STATE_GET_INFO_ANDROID,
.next = nullptr,
.time = frameState.predictedDisplayTime,
};
CHK_XR(xrGetFaceStateANDROID(faceTracker, &faceGetInfo, &faceState));
if (faceState.isValid) {
for (uint32_t i = 0; i < XR_FACE_PARAMETER_COUNT_ANDROID; ++i) {
// parameters[i] contains a weight of specific blend shape
}
for (uint32_t i = 0; i < XR_FACE_REGION_CONFIDENCE_COUNT_ANDROID; ++i) {
// regionConfidences[i] contains a confidence value of a specific region
}
}
}
// after usage
CHK_XR(xrDestroyFaceTrackerANDROID(faceTracker));
新しいオブジェクト タイプ
新しい列挙型定数
XR_FACE_PARAMETER_COUNT_ANDROID
XrObjectType 列挙型が拡張され、次の値が追加されました。
XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
XrStructureType 列挙型が拡張され、次の値が追加されました。
XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROIDXR_TYPE_FACE_STATE_GET_INFO_ANDROIDXR_TYPE_FACE_STATE_ANDROIDXR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID
新しい列挙型
新しい構造
- XrFaceTrackerCreateInfoANDROID
- XrFaceStateGetInfoANDROID
- XrFaceStateANDROID
- XrSystemFaceTrackingPropertiesANDROID
新機能
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
問題
変更履歴
- リビジョン 1、2024 年 9 月 5 日(Levana Chen)
- 拡張機能の最初の説明
- リビジョン 2、2025 年 4 月 1 日(Kenny Vercaemer)
- 顔の信頼度領域を追加
- リビジョン 3、2025 年 6 月 4 日(Levana Chen)
- 新しいエラーコードを追加しました。
OpenXR™ および OpenXR のロゴは、Khronos Group Inc. が所有する商標であり、中国、欧州連合、日本、英国で商標として登録されています。