Как добавить в приложение отслеживание лица с помощью ARCore для Jetpack XR

Поддерживаемые XR-устройства
Это руководство поможет вам создавать контент для таких устройств.
XR-шлемы
Проводные XR-очки

После того как пользователь предоставит разрешение на отслеживание лица, ваше приложение сможет получать информацию о форме лица через ARCore для Jetpack XR. Информация о форме лица может помочь приложению показать пользователя в виртуальном мире, например при виртуальной примерке очков.

Как создать сеанс ARCore для Jetpack XR

Получать информацию о лице с помощью Jetpack XR Runtime Session, который может создать ваше приложение.

Как настроить сеанс

Отслеживание лица по умолчанию не включено в сеансах XR. Чтобы включить отслеживание лица, настройте сеанс и задайте режим FaceTrackingMode.USER:

val newConfig = Config.Builder(session.config)
    .setFaceTracking(FaceTrackingMode.BLEND_SHAPES)
    .build()
when (val result = session.configure(newConfig)) {
    is SessionConfigureSuccess -> TODO(/* Success! */)
    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)
face.state.collect { state ->
    if (state.trackingState != TrackingState.TRACKING) return@collect

    val confidence = state.getConfidence(FaceConfidenceRegion.LOWER)
    val blendShapeValue = state.blendShapes[FaceBlendShapeType.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_OUT = 0.0
референсное изображение для отслеживания лица;
TONGUE_OUT = 1.0
TONGUE_LEFT
Референсное изображение с нейтральным выражением лица
TONGUE_LEFT = 0.0
референсное изображение для отслеживания лица;
TONGUE_LEFT = 1.0
TONGUE_RIGHT
Референсное изображение с нейтральным выражением лица
TONGUE_RIGHT = 0.0
референсное изображение для отслеживания лица;
TONGUE_RIGHT = 1.0
TONGUE_UP
Референсное изображение с нейтральным выражением лица
TONGUE_UP = 0.0
референсное изображение для отслеживания лица;
TONGUE_UP = 1.0
TONGUE_DOWN
Референсное изображение с нейтральным выражением лица
TONGUE_DOWN = 0.0
референсное изображение для отслеживания лица;
TONGUE_DOWN = 1.0