پس از اینکه کاربر اجازه ردیابی چهره را داد ، برنامه شما میتواند اطلاعات شکل چهره را از طریق ARCore برای Jetpack XR بازیابی کند. اطلاعات شکل چهره میتواند به برنامه شما کمک کند تا کاربر را در دنیای مجازی، مثلاً برای امتحان کردن عینک مجازی، نمایش دهد.
یک جلسه ARCore برای Jetpack XR ایجاد کنید
اطلاعات مربوط به حالت سر را از طریق یک جلسه ARCore برای Jetpack XR دریافت کنید. برای دریافت یک Session
، به بخش «درک چرخه عمر یک جلسه » مراجعه کنید.
پیکربندی جلسه
ردیابی چهره به طور پیشفرض در جلسات XR فعال نیست. برای فعال کردن ردیابی چهره، جلسه را پیکربندی کرده و حالت FaceTrackingMode.USER
را تنظیم کنید:
val newConfig = session.config.copy( faceTracking = Config.FaceTrackingMode.USER, ) when (val result = session.configure(newConfig)) { is SessionConfigureSuccess -> TODO(/* Success! */) is SessionConfigureConfigurationNotSupported -> TODO(/* Some combinations of configurations are not valid. Handle this failure case. */) else -> TODO(/* The session could not be configured. See SessionConfigureResult for possible causes. */) }
بازیابی اطلاعات چهره
از Face.getUserFace(session)
برای بازیابی دادههای چهره کاربر استفاده کنید که شامل موارد زیر است:
- مقادیر ترکیب شکل چهره : حالات ممکن یک چهره ترکیبی از ۶۸ مقدار شکل ترکیبی است. هر مقدار شکل ترکیبی نشان دهنده یک حرکت یا تغییر شکل چهره است و مقدار آن شدت آن را نشان میدهد که از
0.0
تا1.0
متغیر است. برای توضیح هر نوع شکل ترکیبی، به بخش «درک انواع شکل ترکیبی چهره» مراجعه کنید. - مقادیر اطمینان برای نواحی : چهره دارای سه ناحیه است. مقادیر اطمینان، میزان اطمینان از دقت برای حالتهای داده شده را نشان میدهند و از
0.0
تا1.0
متغیر هستند، که1.0
نشان دهنده بالاترین میزان اطمینان است.
val face = Face.getUserFace(session) ?: return face.state.collect { state -> if (state.trackingState != TrackingState.TRACKING) return@collect val confidence = state.getConfidence(FaceConfidenceRegion.FACE_CONFIDENCE_REGION_LOWER) val blendShapeValue = state.blendShapes[FaceBlendShapeType.FACE_BLEND_SHAPE_TYPE_LIPS_TOWARD] }
انواع ترکیبهای چهره را بشناسید
جداول زیر انواع فرمهای ترکیبی چهره را فهرست میکنند:
شکلهای ترکیبی ناحیه بالایی
نام | تصاویر مرجع | |
---|---|---|
BROW_LOWERER_L | ![]() BROW_LOWERER_L = 0.0 | ![]() BROW_LOWERER_L = 1.0 |
BROW_LOWERER_R | ![]() BROW_LOWERER_R = 0.0 | ![]() BROW_LOWERER_R = 1.0 |
EYES_CLOSED_L | ![]() EYES_CLOSED_L = 0.0 | ![]() EYES_CLOSED_L = 1.0 |
EYES_CLOSED_R | ![]() EYES_CLOSED_R = 0.0 | ![]() EYES_CLOSED_R = 1.0 |
EYES_LOOK_DOWN_L | ![]() EYES_LOOK_DOWN_L = 0.0 | ![]() EYES_LOOK_DOWN_L = 1.0 |
EYES_LOOK_DOWN_R | ![]() EYES_LOOK_DOWN_R = 0.0 | ![]() EYES_LOOK_DOWN_R = 1.0 |
EYES_LOOK_LEFT_L | ![]() EYES_LOOK_LEFT_L = 0.0 | ![]() EYES_LOOK_LEFT_L = 1.0 |
EYES_LOOK_LEFT_R | ![]() EYES_LOOK_LEFT_R = 0.0 | ![]() EYES_LOOK_LEFT_R = 1.0 |
EYES_LOOK_RIGHT_L | ![]() EYES_LOOK_RIGHT_L = 0.0 | ![]() EYES_LOOK_RIGHT_L = 1.0 |
EYES_LOOK_RIGHT_R | ![]() EYES_LOOK_RIGHT_R = 0.0 | ![]() EYES_LOOK_RIGHT_R = 1.0 |
EYES_LOOK_UP_L | ![]() EYES_LOOK_UP_L = 0.0 | ![]() EYES_LOOK_UP_L = 1.0 |
EYES_LOOK_UP_R | ![]() EYES_LOOK_UP_R = 0.0 | ![]() EYES_LOOK_UP_R = 1.0 |
INNER_BROW_RAISER_L | ![]() INNER_BROW_RAISER_L = 0.0 | ![]() INNER_BROW_RAISER_L = 1.0 |
INNER_BROW_RAISER_R | ![]() INNER_BROW_RAISER_R = 0.0 | ![]() INNER_BROW_RAISER_R = 1.0 |
LID_TIGHTENER_L | ![]() LID_TIGHTENER_L = 0.0 | ![]() LID_TIGHTENER_L = 1.0 |
LID_TIGHTENER_R | ![]() LID_TIGHTENER_R = 0.0 | ![]() LID_TIGHTENER_R = 1.0 |
OUTER_BROW_RAISER_L | ![]() OUTER_BROW_RAISER_L = 0.0 | ![]() OUTER_BROW_RAISER_L = 1.0 |
OUTER_BROW_RAISER_R | ![]() OUTER_BROW_RAISER_R = 0.0 | ![]() OUTER_BROW_RAISER_R = 1.0 |
UPPER_LID_RAISER_L | ![]() UPPER_LID_RAISER_L = 0.0 | ![]() UPPER_LID_RAISER_L = 1.0 |
UPPER_LID_RAISER_R | ![]() UPPER_LID_RAISER_R = 0.0 | ![]() UPPER_LID_RAISER_R = 1.0 |
شکلهای ترکیبی ناحیه پایینی
نام | تصاویر مرجع | |
---|---|---|
CHEEK_PUFF_L | ![]() CHEEK_PUFF_L = 0.0 | ![]() CHEEK_PUFF_L = 1.0 |
CHEEK_PUFF_R | ![]() CHEEK_PUFF_R = 0.0 | ![]() CHEEK_PUFF_R = 1.0 |
CHEEK_RAISER_L | ![]() CHEEK_RAISER_L = 0.0 | ![]() CHEEK_RAISER_L = 1.0 |
CHEEK_RAISER_R | ![]() CHEEK_RAISER_R = 0.0 | ![]() CHEEK_RAISER_R = 1.0 |
CHEEK_SUCK_L | ![]() CHEEK_SUCK_L = 0.0 | ![]() CHEEK_SUCK_L = 1.0 |
CHEEK_SUCK_R | ![]() CHEEK_SUCK_R = 0.0 | ![]() CHEEK_SUCK_R = 1.0 |
CHIN_RAISER_B | ![]() CHIN_RAISER_B = 0.0 | ![]() CHIN_RAISER_B = 1.0 |
CHIN_RAISER_T | ![]() CHIN_RAISER_T = 0.0 | ![]() CHIN_RAISER_T = 1.0 |
DIMPLER_L | ![]() DIMPLER_L = 0.0 | ![]() DIMPLER_L = 1.0 |
DIMPLER_R | ![]() DIMPLER_R = 0.0 | ![]() DIMPLER_R = 1.0 |
JAW_DROP | ![]() JAW_DROP = 0.0 | ![]() JAW_DROP = 1.0 |
JAW_SIDEWAYS_LEFT | ![]() JAW_SIDEWAYS_LEFT = 0.0 | ![]() JAW_SIDEWAYS_LEFT = 1.0 |
JAW_SIDEWAYS_RIGHT | ![]() JAW_SIDEWAYS_RIGHT = 0.0 | ![]() JAW_SIDEWAYS_RIGHT = 1.0 |
JAW_THRUST | ![]() JAW_THRUST = 0.0 | ![]() JAW_THRUST = 1.0 |
LIP_CORNER_DEPRESSOR_L | ![]() LIP_CORNER_DEPRESSOR_L = 0.0 | ![]() LIP_CORNER_DEPRESSOR_L = 1.0 |
LIP_CORNER_DEPRESSOR_R | ![]() LIP_CORNER_DEPRESSOR_R = 0.0 | ![]() LIP_CORNER_DEPRESSOR_R = 1.0 |
LIP_CORNER_PULLER_L | ![]() LIP_CORNER_PULLER_L = 0.0 | ![]() LIP_CORNER_PULLER_L = 1.0 |
LIP_CORNER_PULLER_R | ![]() LIP_CORNER_PULLER_R = 0.0 | ![]() LIP_CORNER_PULLER_R = 1.0 |
LIP_FUNNELER_LB | ![]() LIP_FUNNELER_LB = 0.0 | ![]() LIP_FUNNELER_LB = 1.0 |
LIP_FUNNELER_LT | ![]() LIP_FUNNELER_LT = 0.0 | ![]() LIP_FUNNELER_LT = 1.0 |
LIP_FUNNELER_RB | ![]() LIP_FUNNELER_RB = 0.0 | ![]() LIP_FUNNELER_RB = 1.0 |
LIP_FUNNELER_RT | ![]() LIP_FUNNELER_RT = 0.0 | ![]() LIP_FUNNELER_RT = 1.0 |
LIP_PRESSOR_L | ![]() LIP_PRESSOR_L = 0.0 | ![]() LIP_PRESSOR_L = 1.0 |
LIP_PRESSOR_R | ![]() LIP_PRESSOR_R = 0.0 | ![]() LIP_PRESSOR_R = 1.0 |
LIP_PUCKER_L | ![]() LIP_PUCKER_L = 0.0 | ![]() LIP_PUCKER_L = 1.0 |
LIP_PUCKER_R | ![]() LIP_PUCKER_R = 0.0 | ![]() LIP_PUCKER_R = 1.0 |
LIP_STRETCHER_L | ![]() LIP_STRETCHER_L = 0.0 | ![]() LIP_STRETCHER_L = 1.0 |
LIP_STRETCHER_R | ![]() LIP_STRETCHER_R = 0.0 | ![]() LIP_STRETCHER_R = 1.0 |
LIP_SUCK_LB | ![]() LIP_SUCK_LB = 0.0 | ![]() LIP_SUCK_LB = 1.0 |
LIP_SUCK_LT | ![]() LIP_SUCK_LT = 0.0 | ![]() LIP_SUCK_LT = 1.0 |
LIP_SUCK_RB | ![]() LIP_SUCK_RB = 0.0 | ![]() LIP_SUCK_RB = 1.0 |
LIP_SUCK_RT | ![]() LIP_SUCK_RT = 0.0 | ![]() LIP_SUCK_RT = 1.0 |
LIP_TIGHTENER_L | ![]() LIP_TIGHTENER_L = 0.0 | ![]() LIP_TIGHTENER_L = 1.0 |
LIP_TIGHTENER_R | ![]() LIP_TIGHTENER_R = 0.0 | ![]() LIP_TIGHTENER_R = 1.0 |
LIPS_TOWARD | ![]() LIPS_TOWARD = 0.0 | ![]() JAW_DROP = 1.0 and LIPS_TOWARD = 1.0 |
LOWER_LIP_DEPRESSOR_L | ![]() LOWER_LIP_DEPRESSOR_L = 0.0 | ![]() LOWER_LIP_DEPRESSOR_L = 1.0 |
LOWER_LIP_DEPRESSOR_R | ![]() LOWER_LIP_DEPRESSOR_R = 0.0 | ![]() LOWER_LIP_DEPRESSOR_R = 1.0 |
MOUTH_LEFT | ![]() MOUTH_LEFT = 0.0 | ![]() MOUTH_LEFT = 1.0 |
MOUTH_RIGHT | ![]() MOUTH_RIGHT = 0.0 | ![]() MOUTH_RIGHT = 1.0 |
NOSE_WRINKLER_L | ![]() NOSE_WRINKLER_L = 0.0 | ![]() NOSE_WRINKLER_L = 1.0 |
NOSE_WRINKLER_R | ![]() NOSE_WRINKLER_R = 0.0 | ![]() NOSE_WRINKLER_R = 1.0 |
UPPER_LIP_RAISER_L | ![]() UPPER_LIP_RAISER_L = 0.0 | ![]() UPPER_LIP_RAISER_L = 1.0 |
UPPER_LIP_RAISER_R | ![]() UPPER_LIP_RAISER_R = 0.0 | ![]() UPPER_LIP_RAISER_R = 1.0 |
TONGUE_OUT | ![]() | ![]() |
TONGUE_LEFT | ![]() | ![]() |
TONGUE_RIGHT | ![]() | ![]() |
TONGUE_UP | ![]() | ![]() |
TONGUE_DOWN | ![]() | ![]() |