מחרוזת שם
XR_ANDROID_face_tracking
סוג התוסף
הרחבת המכונה
מספר שלוחה רשום
459
Revision
3
תלות בתוסף ובגרסה
תאריך השינוי האחרון
2025-06-04
סטטוס כתובת ה-IP
לא ידוע על תלונות בנושא קניין רוחני.
שותפים ביצירת התוכן
ספנסר קווין, Google
Jared Finder, Google
לבנה צ'ן, 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 שמציין אם המערכת הנוכחית תומכת במעקב אחרי הפנים.
אפליקציה יכולה לבדוק אם המערכת מסוגלת לעקוב אחרי הפנים על ידי הרחבת XrSystemProperties עם המבנה XrSystemFaceTrackingPropertiesANDROID כשקוראים ל-xrGetSystemProperties.
אם זמן הריצה מחזיר XR_FALSE עבור supportsFaceTracking, זמן הריצה חייב להחזיר XR_ERROR_FEATURE_UNSUPPORTED מהפונקציה xrCreateFaceTrackerANDROID.
יצירת כינוי לכלי למעקב אחרי פנים
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
ה-handle XrFaceTrackerANDROID מייצג כלי למעקב אחרי פנים לצורך מעקב אחרי פנים.
אפשר להשתמש בכינוי הזה כדי לגשת לנתוני מעקב תנועות הפנים באמצעות פונקציות אחרות בתוסף הזה.
הפונקציה xrCreateFaceTrackerANDROID מוגדרת כך:
XrResult xrCreateFaceTrackerANDROID(
XrSession session,
const XrFaceTrackerCreateInfoANDROID* createInfo,
XrFaceTrackerANDROID* faceTracker);
תיאורים של פרמטרים
-
sessionהוא אובייקט מסוג XrSession שבו גשש הפנים יהיה פעיל. -
createInfoהוא XrFaceTrackerCreateInfoANDROID שמשמש לציון גשש הפנים. -
faceTrackerהיא נקודת האחיזה XrFaceTrackerANDROID שמוחזרת.
אפליקציה יכולה ליצור נקודת אחיזה XrFaceTrackerANDROID באמצעות הפונקציה xrCreateFaceTrackerANDROID.
אם המערכת לא תומכת במעקב אחרי הפנים, הפונקציה xrCreateFaceTrackerANDROID תחזיר XR_ERROR_FEATURE_UNSUPPORTED.
שימוש תקין (מרומז)
XR_ANDROID_face_trackingחייב להיות מופעל לפני הקריאה ל-xrCreateFaceTrackerANDROID-
sessionmust be a valid XrSession handle -
createInfomust be a pointer to a valid XrFaceTrackerCreateInfoANDROID structure -
faceTrackermust be a pointer to an XrFaceTrackerANDROID handle
קודי החזרה
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.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_face_trackingלפני שמשתמשים ב-XrFaceTrackerCreateInfoANDROID - הערך של
typeחייב להיותXR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID - הערך
nextחייב להיותNULLאו מצביע תקין אל המבנה הבא בשרשרת מבנים
הפונקציה xrDestroyFaceTrackerANDROID מוגדרת כך:
XrResult xrDestroyFaceTrackerANDROID(
XrFaceTrackerANDROID faceTracker);
תיאורים של פרמטרים
-
faceTrackerהוא XrFaceTrackerANDROID שנוצר קודם על ידי xrCreateFaceTrackerANDROID.
הפונקציה xrDestroyFaceTrackerANDROID משחררת את faceTracker ואת המשאבים הבסיסיים כשהחוויה של מעקב הפנים מסתיימת.
שימוש תקין (מרומז)
- חובה להפעיל את התוסף
XR_ANDROID_face_trackingלפני הקריאה ל-xrDestroyFaceTrackerANDROID -
faceTrackermust be a valid XrFaceTrackerANDROID handle
Thread Safety
- הגישה אל
faceTrackerואל כל הכינויים של הילדים חייבת להיות מסונכרנת חיצונית
קודי החזרה
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTEDXR_ERROR_HANDLE_INVALID
בדיקת כיול הפנים
הפונקציה xrGetFaceCalibrationStateANDROID מוגדרת כך:
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
תיאורים של פרמטרים
-
faceTrackerהוא XrFaceTrackerANDROID שנוצר קודם על ידי xrCreateFaceTrackerANDROID. faceIsCalibratedOutputמציין אם בוצע כיול של מעקב הפנים או לא.
אפליקציה יכולה לבדוק את מצב הכיול של הפנים באמצעות הפונקציה xrGetFaceCalibrationStateANDROID.
אם שירות המעקב עדיין נמצא בתהליך אתחול, סביבת זמן הריצה עשויה להחזיר את הערך XR_ERROR_SERVICE_NOT_READY_ANDROID מהפונקציה xrGetFaceCalibrationStateANDROID כדי לציין שהאפליקציה יכולה לנסות שוב מאוחר יותר.
אם המערכת לא תומכת בכיול הפנים, הפונקציה
xrGetFaceCalibrationStateANDROID תחזיר
XR_ERROR_FEATURE_UNSUPPORTED. אחרת, יכול להיות שהערך של faceIsCalibratedOutput יהיה XR_TRUE כדי לשקף את מצב הכיול של הפנים.
שימוש תקין (מרומז)
XR_ANDROID_face_trackingהתוסף חייב להיות מופעל לפני הקריאה ל-xrGetFaceCalibrationStateANDROID-
faceTrackermust be a valid XrFaceTrackerANDROID handle -
faceIsCalibratedOutputmust be a pointer to anXrBool32value
קודי החזרה
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הוא XrFaceTrackerANDROID שנוצר קודם על ידי xrCreateFaceTrackerANDROID. -
getInfoהוא מצביע אל XrFaceStateGetInfoANDROID שמתאר מידע להשגת הבעות פנים. -
faceStateOutputהוא מצביע אל XrFaceStateANDROID שמקבל את מצב מעקב הפנים והבעות הפנים שמוחזרים.
שימוש תקין (מרומז)
XR_ANDROID_face_trackingהתוסף חייב להיות מופעל לפני הקריאה ל-xrGetFaceStateANDROID-
faceTrackermust be a valid XrFaceTrackerANDROID handle -
getInfomust be a pointer to a valid XrFaceStateGetInfoANDROID structure 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שבו מתבקשות הבעות הפנים.
אפליקציות צריכות לבקש זמן ששווה לזמן התצוגה החזוי של הפריים שעבר רינדור.
שימוש תקין (מרומז)
- צריך להפעיל את התוסף
XR_ANDROID_face_trackingלפני שמשתמשים ב-XrFaceStateGetInfoANDROID - הערך של
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הואuint32_tשמתאר את הקיבולת של מערךparameters, או 0 שמציין בקשה לאחזור הקיבולת הנדרשת. -
parametersCountOutputהואuint32_tשמתאר את מספרparameters, או את הקיבולת הנדרשת במקרה ש-parametersCapacityInputלא מספיק. -
parametersהוא מצביע למערך שהוקצה לאפליקציה שלfloatשימולא במשקלים של צורות תערובת של הבעות פנים. -
faceTrackingStateהואXrFaceTrackingStateANDROIDשל סטטוס התוקף של מעקב הפנים. -
sampleTimeהוא זמןXrTimeשבו הביטויים המוחזרים נמדדים או מחושבים. הערך הזה שווה לזמן שבו נשלחה בקשה למשקלים של הביטוי, אם האקסטרפולציה באותו זמן הצליחה. -
isValidמציין אם הנתונים תקפים גם אם הם לא מהמסגרת הנוכחית. -
regionConfidencesCapacityInputהואuint32_tשמתאר את הקיבולת של מערךregionConfidences, או 0 שמציין בקשה לאחזור הקיבולת הנדרשת. -
regionConfidencesCountOutputהואuint32_tשמתאר את מספרregionConfidences, או את הקיבולת הנדרשת במקרה ש-regionConfidencesCapacityInputלא מספיק. -
regionConfidencesהוא מצביע למערך שהוקצה לאפליקציה שלfloat, שימולא בערכי מהימנות לכל אזור בפנים. - בקטע פרמטרים של גודל המאגר מופיע תיאור מפורט של אחזור הגודל הנדרש של
parametersושלregionConfidences.
האפליקציה יכולה להגדיר את parametersCapacityInput ל-XR_FACE_PARAMETER_COUNT_ANDROID כדי לקבל הבעות פנים שמסודרות באינדקס לפי XrFaceParameterIndicesANDROID.
הערכים parameters שמוחזרים מייצגים את המשקלים של צורות המיזוג של הבעות הפנים הנוכחיות.
עדכוני המערך parameters יסודרו כך שהאפליקציה תוכל לאנדקס רכיבים באמצעות ספירת הבעות הפנים התואמת (לדוגמה, XrFaceParameterIndicesANDROID).
שימוש תקין (מרומז)
XR_ANDROID_face_trackingהתוסף חייב להיות מופעל לפני השימוש ב-XrFaceStateANDROID- הערך של
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 הן:
Enum |
תיאור |
|
מציין שמעקב הפנים מושהה, אבל יכול להיות שהוא יופעל מחדש בעתיד. |
|
המעקב הופסק, אבל עדיין יש ללקוח מעקב פנים פעיל. |
|
המעקב אחרי הפנים מתבצע והפוזה שלהן עדכנית. |
אזורי סמך
XR_ANDROID_face_tracking התוסף מספק גם ערכי מהימנות לשלושה אזורים בפנים: עין ימין, עין שמאל והחלק התחתון של הפנים. הערכים האלה, שנעים בין 0 (ללא ודאות) ל-1 (הודאות הגבוהה ביותר), מציינים את הדיוק של מעקב הפנים בכל אזור.
אפשר להשתמש בערכי הביטחון האלה כדי להשבית בהדרגה את צורות התערובת או להחיל מסננים חזותיים (כמו טשטוש) על אזור הפנים המתאים. כדי להפעיל או להשבית את השליטה הבסיסית, מומלץ להשתמש בסף של 0.3 כדי להשבית לגמרי את צורות המיזוג באזור הפנים המתאים.
האזור 'חלק הפנים התחתון' מייצג את כל מה שמתחת לעיניים, כולל הפה, הסנטר, הלחי והאף. אזור העיניים כולל את העיניים ואת אזור הגבות.
בטבלה הבאה מתוארים ה-blendshapes שמשויכים לכל אזור מהימנות:
| אזור מהימנות | Blendshapes |
|---|---|
| החלק התחתון של הפנים | `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`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_CORNER_PULLER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LB_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_LT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RB_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_FUNNELER_RT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_PRESSOR_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_PUCKER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_STRETCHER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LB_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_SUCK_LT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RB_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_SUCK_RT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIP_TIGHTENER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LIPS_TOWARD_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_LOWER_LIP_DEPRESSOR_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_MOUTH_LEFT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_MOUTH_RIGHT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_NOSE_WRINKLER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_UPPER_LID_RAISER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_L_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_UPPER_LIP_RAISER_R_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_TONGUE_OUT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_TONGUE_LEFT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_TONGUE_RIGHT_ANDROID`,<x0A> `XR_FACE_PARAMETER_INDICES_TONGUE_UP_ANDROID`,<x0A> `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` |
מוסכמות של צורות מיזוג
התוסף הזה מגדיר 68 צורות מיזוג באמצעות XR_FACE_PARAMETER_COUNT_ANDROID, לפורמט G-Nome המצומצם. כל פרמטר ב-enum הזה הוא אינדקס למערך של צורות מעורבות, שהערכים שלהן הם מסוג 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 | TONGUE_OUT |
|
|
| 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));
סוגי אובייקטים חדשים
New Enum Constants
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
New Enums
מבנים חדשים
- XrFaceTrackerCreateInfoANDROID
- XrFaceStateGetInfoANDROID
- XrFaceStateANDROID
- XrSystemFaceTrackingPropertiesANDROID
פונקציות חדשות
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
בעיות
היסטוריית הגרסאות
- Revision 1, 2024-09-05 (Levana Chen)
- תיאור ראשוני של התוסף
- Revision 2, 2025-04-01 (Kenny Vercaemer)
- נוספו אזורים של רמת מהימנות לזיהוי פנים
- Revision 3, 2025-06-04 (Levana Chen)
- נוסף קוד שגיאה חדש.
OpenXR™ והלוגו של OpenXR הם סימנים מסחריים בבעלות The Khronos Group Inc. והם רשומים כסימן מסחרי בסין, באיחוד האירופי, ביפן ובבריטניה.