Name String
XR_ANDROID_face_tracking
ประเภทส่วนขยาย
ส่วนขยายอินสแตนซ์
หมายเลขต่อที่ลงทะเบียน
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 ที่ระบุว่าระบบปัจจุบันรองรับการติดตามใบหน้าหรือไม่
แอปพลิเคชันสามารถตรวจสอบว่าระบบสามารถติดตามใบหน้าได้หรือไม่ โดยขยาย XrSystemProperties ด้วย โครงสร้าง XrSystemFaceTrackingPropertiesANDROID เมื่อเรียกใช้ xrGetSystemProperties
หากรันไทม์แสดงผล XR_FALSE
สำหรับ
supportsFaceTracking
รันไทม์ต้องแสดงผล
XR_ERROR_FEATURE_UNSUPPORTED
จาก xrCreateFaceTrackerANDROID
สร้างแฮนเดิลเครื่องมือติดตามใบหน้า
XR_DEFINE_HANDLE(XrFaceTrackerANDROID)
แฮนเดิล 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 session
ต้องเป็นแฮนเดิล XrSession ที่ถูกต้องcreateInfo
ต้องเป็นพอยน์เตอร์ไปยังโครงสร้าง XrFaceTrackerCreateInfoANDROID ที่ถูกต้องfaceTracker
ต้องเป็นตัวชี้ไปยังแฮนเดิล XrFaceTrackerANDROID
รหัสการคืนสินค้า
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
โครงสร้าง 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 faceTracker
ต้องเป็นแฮนเดิล XrFaceTrackerANDROID ที่ถูกต้อง
ความปลอดภัยของเธรด
- การเข้าถึง
faceTracker
และแฮนเดิลย่อยทั้งหมดต้องซิงค์ภายนอก
รหัสการคืนสินค้า
XR_SUCCESS
XR_ERROR_FUNCTION_UNSUPPORTED
XR_ERROR_HANDLE_INVALID
ตรวจสอบการปรับใบหน้า
ฟังก์ชัน xrGetFaceCalibrationStateANDROID
มีคำจำกัดความดังนี้
XrResult xrGetFaceCalibrationStateANDROID(
XrFaceTrackerANDROID faceTracker,
XrBool32* faceIsCalibratedOutput);
คำอธิบายพารามิเตอร์
faceTracker
คือ XrFaceTrackerANDROID ที่สร้างขึ้นก่อนหน้านี้โดย xrCreateFaceTrackerANDROIDfaceIsCalibratedOutput
ระบุว่าได้ปรับเทียบเครื่องมือติดตามใบหน้าแล้วหรือไม่
แอปพลิเคชันสามารถตรวจสอบสถานะการปรับเทียบใบหน้าได้โดยใช้ฟังก์ชัน xrGetFaceCalibrationStateANDROID
เมื่อบริการติดตามยังอยู่ระหว่างการเริ่มต้น รันไทม์อาจ
ส่งคืน XR_ERROR_SERVICE_NOT_READY_ANDROID
จาก
xrGetFaceCalibrationStateANDROID เพื่อระบุว่าแอปพลิเคชันสามารถ
ลองอีกครั้งในภายหลังได้
หากระบบไม่รองรับการปรับเทียบใบหน้า
xrGetFaceCalibrationStateANDROID จะแสดงผล
XR_ERROR_FEATURE_UNSUPPORTED
มิเช่นนั้น อาจตั้งค่า faceIsCalibratedOutput
เป็น XR_TRUE
เพื่อแสดงสถานะการปรับเทียบใบหน้า
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_face_tracking
ก่อนเรียกใช้ xrGetFaceCalibrationStateANDROID faceTracker
ต้องเป็นแฮนเดิล XrFaceTrackerANDROID ที่ถูกต้องfaceIsCalibratedOutput
ต้องเป็นตัวชี้ไปยังค่าXrBool32
รหัสการคืนสินค้า
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
รับการแสดงสีหน้า
ฟังก์ชัน xrGetFaceStateANDROID จะแสดงผลรูปร่างผสมของ การแสดงออกทางสีหน้า ณ เวลาที่กำหนด
XrResult xrGetFaceStateANDROID(
XrFaceTrackerANDROID faceTracker,
const XrFaceStateGetInfoANDROID* getInfo,
XrFaceStateANDROID* faceStateOutput);
คำอธิบายพารามิเตอร์
faceTracker
คือ XrFaceTrackerANDROID ที่สร้างขึ้นก่อนหน้านี้โดย xrCreateFaceTrackerANDROIDgetInfo
คือตัวชี้ไปยัง XrFaceStateGetInfoANDROID ที่อธิบาย ข้อมูลที่จะใช้รับการแสดงสีหน้าfaceStateOutput
คือตัวชี้ไปยัง XrFaceStateANDROID ที่รับ สถานะการติดตามใบหน้าและสีหน้าที่ส่งคืน
การใช้งานที่ถูกต้อง (โดยนัย)
- ต้องเปิดใช้ส่วนขยาย
XR_ANDROID_face_tracking
ก่อนเรียกใช้ xrGetFaceStateANDROID faceTracker
ต้องเป็นแฮนเดิล XrFaceTrackerANDROID ที่ถูกต้องgetInfo
ต้องเป็นพอยน์เตอร์ไปยังโครงสร้าง XrFaceStateGetInfoANDROID ที่ถูกต้องfaceStateOutput
ต้องเป็นตัวชี้ไปยังโครงสร้าง XrFaceStateANDROID
รหัสการคืนสินค้า
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
โครงสร้าง 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
จะเรียงตามลำดับเพื่อให้แอปพลิเคชัน สามารถจัดทำดัชนีองค์ประกอบโดยใช้การแสดงสีหน้าที่สอดคล้องกัน
enum (เช่น 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
ส่วนขยายยังให้ค่าความเชื่อมั่นสำหรับ
3 ส่วนของใบหน้า ได้แก่ ตาซ้าย ตาขวา และใบหน้าส่วนล่าง ค่าเหล่านี้
ซึ่งมีตั้งแต่ 0 (ไม่มีความมั่นใจ) ถึง 1 (มีความมั่นใจสูงสุด) แสดงถึงความแม่นยำ
ของการติดตามใบหน้าสำหรับแต่ละภูมิภาค
คุณสามารถใช้ค่าความเชื่อมั่นเหล่านี้เพื่อค่อยๆ ปิดใช้ Blendshape หรือใช้ ฟิลเตอร์ภาพ (เช่น การเบลอ) กับภูมิภาคใบหน้าที่เกี่ยวข้อง สำหรับการควบคุมเปิด/ปิดพื้นฐาน เราขอแนะนำให้ใช้เกณฑ์ 0.3 เพื่อปิดใช้งาน Blend Shape อย่างสมบูรณ์ในภูมิภาคใบหน้าที่เกี่ยวข้อง
ส่วน "ใบหน้าส่วนล่าง" หมายถึงทุกอย่างที่อยู่ใต้ดวงตา รวมถึงปาก คาง แก้ม และจมูก ภูมิภาคดวงตารวมถึงดวงตาและบริเวณคิ้ว
ตารางต่อไปนี้อธิบายรูปร่างผสมที่เชื่อมโยงกับแต่ละภูมิภาคที่มีความเชื่อมั่น
ภูมิภาคความเชื่อมั่น | Blendshape |
---|---|
ใบหน้าส่วนล่าง | `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` |
การตั้งชื่อรูปร่างผสม
ส่วนขยายนี้กำหนดรูปร่างผสม 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 | ปากซ้าย |
![]() |
![]() |
54 | ปากขวา |
![]() |
![]() |
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));
ประเภทออบเจ็กต์ใหม่
ค่าคงที่ Enum ใหม่
XR_FACE_PARAMETER_COUNT_ANDROID
มีการขยายการแจงนับ XrObjectType ด้วยรายการต่อไปนี้
XR_OBJECT_TYPE_FACE_TRACKER_ANDROID
มีการขยายการแจงนับ XrStructureType ด้วยรายการต่อไปนี้
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
Enums ใหม่
โครงสร้างใหม่
- XrFaceTrackerCreateInfoANDROID
- XrFaceStateGetInfoANDROID
- XrFaceStateANDROID
- XrSystemFaceTrackingPropertiesANDROID
ฟังก์ชันใหม่
- xrCreateFaceTrackerANDROID
- xrDestroyFaceTrackerANDROID
- xrGetFaceStateANDROID
- xrGetFaceCalibrationStateANDROID
ปัญหา
ประวัติเวอร์ชัน
- การแก้ไขครั้งที่ 1, 05-09-2024 (Levana Chen)
- คำอธิบายส่วนขยายเริ่มต้น
- การแก้ไขครั้งที่ 2, 01-04-2025 (Kenny Vercaemer)
- เพิ่มภูมิภาคที่มีความมั่นใจเกี่ยวกับใบหน้า
- การแก้ไข 3, 2025-06-04 (Levana Chen)
- เพิ่มรหัสข้อผิดพลาดใหม่
OpenXR™ และโลโก้ OpenXR เป็นเครื่องหมายการค้าของ The Khronos Group Inc. และจดทะเบียนเป็นเครื่องหมายการค้าในจีน สหภาพยุโรป ญี่ปุ่น และสหราชอาณาจักร