Name String
XR_ANDROID_face_tracking
Loại phần mở rộng
Tiện ích phiên bản
Số máy nhánh đã đăng ký
459
Bản sửa đổi
3
Phần mở rộng và các phần phụ thuộc vào phiên bản
Ngày sửa đổi gần đây nhất
2025-06-04
Trạng thái IP
Không có thông báo xác nhận quyền sở hữu nào đã biết về quyền sở hữu trí tuệ.
Cộng tác viên
Spencer Quin, Google
Jared Finder, Google
Levana Chen, Google
Tổng quan
Tiện ích này cho phép các ứng dụng lấy trọng số của hình dạng kết hợp và hiển thị biểu cảm khuôn mặt trong trải nghiệm XR.
Tiện ích này nhằm cung cấp thông tin cần thiết để tạo hình đại diện chân thực và thể hiện người dùng một cách biểu cảm trong không gian ảo. Ứng dụng có thể kiểm tra việc kích hoạt hiệu chỉnh khuôn mặt trước khi nhận được trọng số của các hình dạng kết hợp.
Công cụ theo dõi khuôn mặt
Trình theo dõi khuôn mặt là một thiết bị cảm biến theo dõi biểu cảm khuôn mặt thông qua các luồng hình ảnh hướng đến người dùng và chế độ hiệu chuẩn camera. Mục đích chính của tiện ích này là liên kết biểu cảm khuôn mặt của người dùng với hình đại diện của họ trong một cảnh ảo.
Dữ liệu theo dõi khuôn mặt là thông tin cá nhân nhạy cảm và có liên kết chặt chẽ với quyền riêng tư và tính toàn vẹn của cá nhân. Các ứng dụng lưu trữ hoặc chuyển dữ liệu theo dõi khuôn mặt luôn phải yêu cầu người dùng chủ động và cụ thể chấp nhận việc này.
- Các ứng dụng sẽ nhận được XR_ERROR_PERMISSION_INSUFFICIENTkhi tạo một trình theo dõi khuôn mặt đang hoạt động cho đến khi ứng dụng được phép truy cập vào trình theo dõi khuôn mặt.
- Khi nhận trạng thái khuôn mặt bằng cách sử dụng xrGetFaceStateANDROID, XrFaceStateANDROID::isValid sẽ không trả về XR_TRUEtrừ phi ứng dụng đã được cấp quyền truy cập
Kiểm tra khả năng của hệ thống
Cấu trúc XrSystemFaceTrackingPropertiesANDROID được xác định là:
typedef struct XrSystemFaceTrackingPropertiesANDROID {
    XrStructureType    type;
    void*              next;
    XrBool32           supportsFaceTracking;
} XrSystemFaceTrackingPropertiesANDROID;
Nội dung mô tả thành viên
- typelà XrStructureType của cấu trúc này.
- nextlà- NULLhoặc con trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc.
- supportsFaceTrackinglà một XrBool32 cho biết liệu hệ thống hiện tại có hỗ trợ tính năng theo dõi khuôn mặt hay không.
Một ứng dụng có thể kiểm tra xem hệ thống có khả năng theo dõi khuôn mặt hay không bằng cách mở rộng XrSystemProperties bằng cấu trúc XrSystemFaceTrackingPropertiesANDROID khi gọi xrGetSystemProperties.
Nếu và chỉ khi một thời gian chạy trả về XR_FALSE cho supportsFaceTracking, thì thời gian chạy phải trả về XR_ERROR_FEATURE_UNSUPPORTED từ xrCreateFaceTrackerANDROID.
Tạo một đối tượng theo dõi khuôn mặt
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
Xử lý XrFaceTrackerANDROID đại diện cho một trình theo dõi khuôn mặt để theo dõi khuôn mặt.
Bạn có thể dùng mã nhận dạng này để truy cập vào dữ liệu theo dõi khuôn mặt bằng các hàm khác trong tiện ích này.
Hàm xrCreateFaceTrackerANDROID được xác định như sau:
XrResult xrCreateFaceTrackerANDROID(
    XrSession                                   session,
    const XrFaceTrackerCreateInfoANDROID*       createInfo,
    XrFaceTrackerANDROID*                       faceTracker);
Nội dung mô tả về tham số
- sessionlà một đối tượng XrSession mà trong đó trình theo dõi khuôn mặt sẽ hoạt động.
- createInfolà XrFaceTrackerCreateInfoANDROID dùng để chỉ định trình theo dõi khuôn mặt.
- faceTrackerlà ô điều khiển XrFaceTrackerANDROID được trả về.
Một ứng dụng có thể tạo một đối tượng XrFaceTrackerANDROID bằng hàm xrCreateFaceTrackerANDROID.
Nếu hệ thống không hỗ trợ tính năng theo dõi khuôn mặt, xrCreateFaceTrackerANDROID sẽ trả về XR_ERROR_FEATURE_UNSUPPORTED.
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích XR_ANDROID_face_trackingtrước khi gọi xrCreateFaceTrackerANDROID
- sessionphải là một đối tượng XrSession hợp lệ
- createInfophải là con trỏ đến một cấu trúc XrFaceTrackerCreateInfoANDROID hợp lệ
- faceTrackerphải là con trỏ đến một handle XrFaceTrackerANDROID
Mã trả về
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_OUT_OF_MEMORY
- XR_ERROR_LIMIT_REACHED
Cấu trúc XrFaceTrackerCreateInfoANDROID được mô tả như sau:
typedef struct XrFaceTrackerCreateInfoANDROID {
    XrStructureType    type;
    void*              next;
} XrFaceTrackerCreateInfoANDROID;
Nội dung mô tả thành viên
- typelà XrStructureType của cấu trúc này.
- nextlà- NULLhoặc con trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.
Cấu trúc XrFaceTrackerCreateInfoANDROID mô tả thông tin để tạo một đối tượng XrFaceTrackerANDROID.
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích XR_ANDROID_face_trackingtrước khi sử dụng XrFaceTrackerCreateInfoANDROID
- typephải là- XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
- nextphải là- NULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Hàm xrDestroyFaceTrackerANDROID được xác định như sau:
XrResult xrDestroyFaceTrackerANDROID(
    XrFaceTrackerANDROID                        faceTracker);
Nội dung mô tả về tham số
- faceTrackerlà một XrFaceTrackerANDROID do xrCreateFaceTrackerANDROID tạo trước đó.
Hàm xrDestroyFaceTrackerANDROID giải phóng faceTracker và các tài nguyên cơ bản khi trải nghiệm theo dõi khuôn mặt kết thúc.
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích XR_ANDROID_face_trackingtrước khi gọi xrDestroyFaceTrackerANDROID
- faceTrackerphải là một đối tượng XrFaceTrackerANDROID hợp lệ
Độ an toàn cho luồng
- Quyền truy cập vào faceTrackervà mọi đối tượng con phải được đồng bộ hoá bên ngoài
Mã trả về
- XR_SUCCESS
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_HANDLE_INVALID
Kiểm tra chế độ hiệu chỉnh khuôn mặt
Hàm xrGetFaceCalibrationStateANDROID được xác định như sau:
XrResult xrGetFaceCalibrationStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    XrBool32*                                   faceIsCalibratedOutput);
Nội dung mô tả về tham số
- faceTrackerlà một XrFaceTrackerANDROID do xrCreateFaceTrackerANDROID tạo trước đó.
- faceIsCalibratedOutputcho biết liệu trình theo dõi khuôn mặt đã được hiệu chuẩn hay chưa.
Ứng dụng có thể kiểm tra trạng thái hiệu chỉnh khuôn mặt bằng hàm xrGetFaceCalibrationStateANDROID.
Khi dịch vụ theo dõi vẫn đang trong quá trình khởi tạo, thời gian chạy có thể trả về XR_ERROR_SERVICE_NOT_READY_ANDROID từ xrGetFaceCalibrationStateANDROID để cho biết rằng ứng dụng có thể thử lại sau.
Nếu hệ thống không hỗ trợ hiệu chỉnh khuôn mặt, xrGetFaceCalibrationStateANDROID sẽ trả về XR_ERROR_FEATURE_UNSUPPORTED. Nếu không, faceIsCalibratedOutput có thể được đặt thành XR_TRUE để phản ánh trạng thái hiệu chỉnh khuôn mặt.
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích XR_ANDROID_face_trackingtrước khi gọi xrGetFaceCalibrationStateANDROID
- faceTrackerphải là một đối tượng XrFaceTrackerANDROID hợp lệ
- faceIsCalibratedOutputphải là một con trỏ đến giá trị- XrBool32
Mã trả về
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_OUT_OF_MEMORY
- XR_ERROR_LIMIT_REACHED
- XR_ERROR_SERVICE_NOT_READY_ANDROID
Nhận biểu cảm khuôn mặt
Hàm xrGetFaceStateANDROID trả về các hình dạng kết hợp của biểu cảm khuôn mặt tại một thời điểm nhất định.
XrResult xrGetFaceStateANDROID(
    XrFaceTrackerANDROID                        faceTracker,
    const XrFaceStateGetInfoANDROID*            getInfo,
    XrFaceStateANDROID*                         faceStateOutput);
Nội dung mô tả về tham số
- faceTrackerlà một XrFaceTrackerANDROID do xrCreateFaceTrackerANDROID tạo trước đó.
- getInfolà một con trỏ đến XrFaceStateGetInfoANDROID mô tả thông tin để lấy biểu cảm khuôn mặt.
- faceStateOutputlà con trỏ đến XrFaceStateANDROID nhận trạng thái theo dõi khuôn mặt và biểu cảm khuôn mặt được trả về.
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích XR_ANDROID_face_trackingtrước khi gọi xrGetFaceStateANDROID
- faceTrackerphải là một đối tượng XrFaceTrackerANDROID hợp lệ
- getInfophải là con trỏ đến một cấu trúc XrFaceStateGetInfoANDROID hợp lệ
- faceStateOutputphải là con trỏ đến cấu trúc XrFaceStateANDROID
Mã trả về
- XR_SUCCESS
- XR_SESSION_LOSS_PENDING
- XR_ERROR_FUNCTION_UNSUPPORTED
- XR_ERROR_VALIDATION_FAILURE
- XR_ERROR_RUNTIME_FAILURE
- XR_ERROR_HANDLE_INVALID
- XR_ERROR_INSTANCE_LOST
- XR_ERROR_SESSION_LOST
- XR_ERROR_OUT_OF_MEMORY
- XR_ERROR_LIMIT_REACHED
- XR_ERROR_TIME_INVALID
Cấu trúc XrFaceStateGetInfoANDROID mô tả thông tin cần thiết để lấy biểu cảm khuôn mặt.
typedef struct XrFaceStateGetInfoANDROID {
    XrStructureType    type;
    void*              next;
    XrTime             time;
} XrFaceStateGetInfoANDROID;
Nội dung mô tả thành viên
- typelà XrStructureType của cấu trúc này.
- nextlà- NULLhoặc con trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.
- timelà một- XrTimemà tại đó các biểu cảm khuôn mặt được yêu cầu.
Các ứng dụng nên yêu cầu một khoảng thời gian bằng với thời gian hiển thị dự kiến cho khung hình được kết xuất.
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích XR_ANDROID_face_trackingtrước khi dùng XrFaceStateGetInfoANDROID
- typephải là- XR_TYPE_FACE_STATE_GET_INFO_ANDROID
- nextphải là- NULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
Cấu trúc XrFaceStateANDROID trả về trạng thái theo dõi khuôn mặt và biểu cảm khuôn mặt.
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;
Nội dung mô tả thành viên
- typelà XrStructureType của cấu trúc này.
- nextlà- NULLhoặc con trỏ đến cấu trúc tiếp theo trong chuỗi cấu trúc. Không có cấu trúc nào như vậy được xác định trong OpenXR cốt lõi hoặc tiện ích này.
- parametersCapacityInputlà một- uint32_tmô tả dung lượng của mảng- parametershoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.
- parametersCountOutputlà một- uint32_tmô tả số lượng- parametershoặc dung lượng cần thiết trong trường hợp- parametersCapacityInputkhông đủ.
- parameterslà một con trỏ đến mảng- floatdo ứng dụng phân bổ. Mảng này sẽ được điền trọng số của các hình dạng kết hợp biểu cảm khuôn mặt.
- faceTrackingStatelà- XrFaceTrackingStateANDROIDtrạng thái hợp lệ của tính năng theo dõi khuôn mặt.
- sampleTimelà thời gian- XrTimemà các biểu thức được trả về được theo dõi hoặc ngoại suy đến. Giá trị này bằng thời gian mà các trọng số biểu thức được yêu cầu nếu quá trình ngoại suy tại thời điểm đó thành công.
- isValidcho biết liệu dữ liệu có hợp lệ hay không, ngay cả khi dữ liệu đó không phải từ khung hình hiện tại.
- regionConfidencesCapacityInputlà một- uint32_tmô tả dung lượng của mảng- regionConfidenceshoặc 0 để cho biết yêu cầu truy xuất dung lượng cần thiết.
- regionConfidencesCountOutputlà một- uint32_tmô tả số lượng- regionConfidenceshoặc dung lượng cần thiết trong trường hợp- regionConfidencesCapacityInputkhông đủ.
- regionConfidenceslà một con trỏ đến mảng- floatdo ứng dụng phân bổ. Mảng này sẽ được điền các giá trị độ tin cậy cho từng vùng trên khuôn mặt.
- Hãy xem phần Tham số kích thước vùng đệm để biết nội dung mô tả chi tiết về cách truy xuất kích thước parametersvàregionConfidencescần thiết.
Ứng dụng có thể đặt parametersCapacityInput thành XR_FACE_PARAMETER_COUNT_ANDROID để nhận các biểu cảm khuôn mặt được lập chỉ mục theo XrFaceParameterIndicesANDROID.
parameters được trả về biểu thị trọng số của các hình dạng kết hợp của biểu cảm khuôn mặt hiện tại.
Mảng parameters sẽ được sắp xếp theo thứ tự để ứng dụng có thể lập chỉ mục các phần tử bằng cách sử dụng enum biểu cảm khuôn mặt tương ứng (ví dụ: XrFaceParameterIndicesANDROID).
Sử dụng hợp lệ (Ngầm ẩn)
- Bạn phải bật tiện ích XR_ANDROID_face_trackingtrước khi sử dụng XrFaceStateANDROID
- typephải là- XR_TYPE_FACE_STATE_ANDROID
- nextphải là- NULLhoặc một con trỏ hợp lệ đến cấu trúc tiếp theo trong chuỗi cấu trúc
- Nếu parametersCapacityInputkhông phải là0, parametersthì must phải là con trỏ đến một mảng gồm các giá trịparametersCapacityInput float
- Nếu regionConfidencesCapacityInputkhông phải là0, regionConfidencesthì must phải là con trỏ đến một mảng gồm các giá trịregionConfidencesCapacityInput float
- faceTrackingStatephải là một giá trị XrFaceTrackingStateANDROID hợp lệ
Liệt kê XrFaceTrackingStateANDROID để xác định các trạng thái khác nhau của trình theo dõi khuôn mặt.
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;
Các enum có ý nghĩa như sau:
| Enum | Nội dung mô tả | 
| 
 | Cho biết tính năng theo dõi khuôn mặt đang tạm dừng nhưng có thể tiếp tục trong tương lai. | 
| 
 | Tính năng theo dõi đã dừng nhưng ứng dụng vẫn có một trình theo dõi khuôn mặt đang hoạt động. | 
| 
 | Khuôn mặt được theo dõi và tư thế của khuôn mặt là tư thế hiện tại. | 
Vùng tin cậy
Tiện ích XR_ANDROID_face_tracking cũng cung cấp các giá trị độ tin cậy cho 3 vùng trên khuôn mặt: mắt trái, mắt phải và phần dưới khuôn mặt. Các giá trị này (từ 0 (không tin tưởng) đến 1 (tin tưởng nhất)) cho biết độ chính xác của tính năng theo dõi khuôn mặt cho từng khu vực.
Bạn có thể sử dụng các giá trị độ tin cậy này để dần vô hiệu hoá blendshape hoặc áp dụng bộ lọc hình ảnh (chẳng hạn như làm mờ) cho vùng khuôn mặt tương ứng. Để có chế độ kiểm soát bật/tắt cơ bản, bạn nên sử dụng ngưỡng 0,3 để huỷ kích hoạt hoàn toàn các hình dạng kết hợp trong vùng khuôn mặt tương ứng.
Khu vực "khuôn mặt dưới" thể hiện mọi thứ bên dưới mắt, bao gồm cả miệng, cằm, má và mũi. Vùng mắt bao gồm mắt và vùng lông mày.
Bảng sau đây mô tả các blendshape liên kết với từng vùng tin cậy:
| Vùng tin cậy | Blendshape | 
|---|---|
| Mặt dưới | `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` | 
| Mặt trên bên trái/phải | `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` | 
Quy ước về hình dạng kết hợp
Tiện ích này xác định 68 hình dạng kết hợp thông qua XR_FACE_PARAMETER_COUNT_ANDROID cho định dạng G-Nome rút gọn. Mỗi tham số trong enum này là một chỉ mục trong mảng hình dạng kết hợp có các giá trị thuộc loại float và thời gian chạy chuẩn hoá thành 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;
| Chỉ mục | Tên | Hình ảnh tham khảo | |
|---|---|---|---|
| 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 |   |   | 
Mã ví dụ để theo dõi khuôn mặt
Đoạn mã ví dụ sau đây minh hoạ cách lấy tất cả trọng số cho các hình dạng kết hợp biểu cảm khuôn mặt.
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));
Các loại đối tượng mới
Hằng số Enum mới
- XR_FACE_PARAMETER_COUNT_ANDROID
Liệt kê XrObjectType được mở rộng bằng:
- XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
Liệt kê XrStructureType được mở rộng bằng:
- XR_TYPE_FACE_TRACKER_CREATE_INFO_ANDROID
- XR_TYPE_FACE_STATE_GET_INFO_ANDROID
- XR_TYPE_FACE_STATE_ANDROID
- XR_TYPE_SYSTEM_FACE_TRACKING_PROPERTIES_ANDROID
Enum mới
Cấu trúc mới
- XrFaceTrackerCreateInfoANDROID
- XrFaceStateGetInfoANDROID
- XrFaceStateANDROID
- XrSystemFaceTrackingPropertiesANDROID
Hàm mới
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
Vấn đề
Nhật ký phiên bản
- Bản sửa đổi 1, ngày 5 tháng 9 năm 2024 (Levana Chen)
- Nội dung mô tả ban đầu của tiện ích
 
- Bản sửa đổi 2, ngày 1 tháng 4 năm 2025 (Kenny Vercaemer)
- Đã thêm các vùng có độ tin cậy về khuôn mặt
 
- Bản sửa đổi 3, ngày 4 tháng 6 năm 2025 (Levana Chen)
- Đã thêm mã lỗi mới.
 
OpenXR™ và biểu trưng OpenXR là các nhãn hiệu thuộc sở hữu của The Khronos Group Inc. và được đăng ký làm nhãn hiệu ở Trung Quốc, Liên minh Châu Âu, Nhật Bản và Vương quốc Anh.
