Руководство разработчика расширенных лиц для Sceneform

Узнайте, как использовать функцию дополненных лиц в собственных приложениях.

Создайте и запустите образец приложения

Чтобы создать и запустить Java-приложение AugmentedFaces :

  1. Откройте Android Studio версии 3.1 или выше. Для работы с Augmented Faces рекомендуется использовать физическое устройство (а не эмулятор Android). Устройство должно быть подключено к машине разработки через USB. Подробные инструкции см. в кратком руководстве по Android .

  2. Импортируйте образец Java AugmentedFaces в свой проект.

  3. В Android Studio нажмите «Выполнить». . Затем выберите свое устройство в качестве цели развертывания и нажмите кнопку ОК , чтобы запустить образец приложения на своем устройстве.

  4. Нажмите « Подтвердить », чтобы предоставить камере доступ к образцу приложения.

    Приложение должно открыть переднюю камеру и сразу же отследить ваше лицо в потоке камеры. Он должен разместить изображения лисьих ушей по обеим сторонам вашего лба, а лисьий нос поместить на ваш собственный нос.

Использование дополненных лиц в форме сцены

  1. Импорт активов в Sceneform

  2. Настройте сеанс ARCore

  3. Получить доступ к обнаруженному лицу

  4. Визуализация эффекта на обнаруженном лице

Импорт активов в Sceneform

Убедитесь, что ресурсы, которые вы используете для дополненных лиц, правильно масштабированы и расположены. Советы и рекомендации см. в разделе «Создание ресурсов для дополненных лиц» .

Чтобы применить ресурсы, такие как текстуры и 3D-модели, к расширенной сетке лица в Sceneform, сначала импортируйте ресурсы.

Во время выполнения используйте ModelRenderable.Builder для загрузки моделей *.sfb и используйте Texture.Builder для загрузки текстуры лица.

// To ensure that the asset doesn't cast or receive shadows in the scene,
// ensure that setShadowCaster and setShadowReceiver are both set to false.
ModelRenderable.builder()
    .setSource(this, R.raw.fox_face)
    .build()
    .thenAccept(
        modelRenderable -> {
          faceRegionsRenderable = modelRenderable;
          modelRenderable.setShadowCaster(false);
          modelRenderable.setShadowReceiver(false);
        });

// Load the face mesh texture.
Texture.builder()
    .setSource(this, R.drawable.fox_face_mesh_texture)
    .build()
    .thenAccept(texture -> faceMeshTexture = texture);

Ориентация лицевой сетки

Обратите внимание на ориентацию сетки лица для Sceneform:

Настройте сеанс ARCore

Augmented Faces требует, чтобы сеанс ARCore был настроен для использования фронтальной (селфи) камеры и включения поддержки сетки лица. Чтобы сделать это в Sceneform, расширьте класс ARfragment и переопределите конфигурацию:

@Override
protected Set<Session.Feature> getSessionFeatures() {
  return EnumSet.of(Session.Feature.FRONT_CAMERA);
}

@Override
protected Config getSessionConfiguration(Session session) {
  Config config = new Config(session);
  config.setAugmentedFaceMode(AugmentedFaceMode.MESH3D);
  return config;
}

Обратитесь к этому подклассу класса ArFragment в своем макете активности.

Получить доступ к обнаруженному лицу

Класс AugmentedFace расширяет класс Trackable . В активности вашего приложения используйте AugmentedFace , чтобы получить доступ к обнаруженному лицу, вызвав его из addOnUpdateListener() .

// Get list of detected faces.
Collection<AugmentedFace> faceList = session.getAllTrackables(AugmentedFace.class);

Рендерим эффект для лица

Рендеринг эффекта включает в себя следующие шаги:

for (AugmentedFace face : faceList) {
  // Create a face node and add it to the scene.
  AugmentedFaceNode faceNode = new AugmentedFaceNode(face);
  faceNode.setParent(scene);

  // Overlay the 3D assets on the face.
  faceNode.setFaceRegionsRenderable(faceRegionsRenderable);

  // Overlay a texture on the face.
  faceNode.setFaceMeshTexture(faceMeshTexture);

  …
 }