Интегрируйте отслеживание лица в свое приложение с помощью ARCore для Jetpack XR

После того, как пользователь даст разрешение на отслеживание лица , ваше приложение сможет получать информацию о форме лица через 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) для получения данных о лице пользователя, которые содержат следующее:

  • Значения формы смешивания лица : Возможные выражения лица представляют собой комбинацию 68 значений формы смешивания . Каждое значение формы смешивания представляет собой движение или деформацию лица, а значение указывает на его интенсивность в диапазоне от 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
Эталонное изображение нейтрального лица
ВЫХОД_ЯЗЫКА = 0.0
эталонное изображение для отслеживания лица
ВЫСЫПЬ_ЯЗЫКА = 1.0
TONGUE_LEFT
Эталонное изображение нейтрального лица
ЯЗЫК_ЛЕВЫЙ = 0.0
эталонное изображение для отслеживания лица
ЯЗЫК_ЛЕВЫЙ = 1.0
TONGUE_RIGHT
Эталонное изображение нейтрального лица
ПРАВЫЙ_ЯЗЫК = 0.0
эталонное изображение для отслеживания лица
ПРАВЫЙ_ЯЗЫК = 1.0
TONGUE_UP
Эталонное изображение нейтрального лица
ЯЗЫК_ВВЕРХ = 0.0
эталонное изображение для отслеживания лица
ЯЗЫК_ВВЕРХ = 1.0
TONGUE_DOWN
Эталонное изображение нейтрального лица
ЯЗЫК_ВНИЗ = 0.0
эталонное изображение для отслеживания лица
ЯЗЫК_ВНИЗ = 1.0