Przewodnik dla programistów dotyczący ulepszonej twarzy w Sceneform

Dowiedz się, jak używać funkcji Rozszerzonych twarzy w swoich aplikacjach.

Tworzenie i uruchamianie przykładowej aplikacji

Aby utworzyć i uruchomić aplikację AugmentedFaces Java:

  1. Otwórz Androida Studio w wersji 3.1 lub nowszej. Do działania z użyciem twarzy zalecamy używanie urządzenia fizycznego (a nie emulatora Androida). Urządzenie powinno być podłączone do maszyny programistycznej przez USB. Szczegółowe instrukcje znajdziesz w krótkim wprowadzeniu do Androida.

  2. zaimportować do projektu próbkę interfejsu Java AugmentedFaces.

  3. W Android Studio kliknij Uruchom . Następnie wybierz urządzenie jako miejsce docelowe wdrożenia i kliknij OK, aby uruchomić przykładową aplikację na swoim urządzeniu.

  4. Kliknij Zatwierdź, by przyznać aparatowi dostęp do przykładowej aplikacji.

    Aplikacja powinna otworzyć przedni aparat i natychmiast śledzić Twoją twarz w kamerze. Powinien umieścić obrazy uszu lisa na obu stronach czoła i ułożyć lisa na własnym nosie.

Korzystanie z rozpoznawania twarzy w Sceneform

  1. Importowanie zasobów do Sceneform

  2. Konfigurowanie sesji ARCore

  3. Uzyskiwanie dostępu do wykrytej twarzy

  4. Renderuj efekt na wykrytej twarzy

Importowanie zasobów do Sceneform

Zadbaj o to, aby zasoby, których używasz do rozpoznawania twarzy, były skalowane i odpowiednio umieszczone. Wskazówki i sprawdzone metody znajdziesz w artykule na temat tworzenia zasobów dla twarzy rozszerzonych.

Aby zastosować zasoby, takie jak tekstury i modele 3D, do siatki rozszerzonej twarzy w Sceneform, najpierw zaimportuj zasoby.

W czasie działania użyj ModelRenderable.Builder, aby wczytać modele *.sfb, i Texture.Builder, aby wczytać teksturę twarzy.

// 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);

Orientacja twarzy

Zwróć uwagę na orientację siatki twarzy na potrzeby sceny:

Skonfiguruj sesję ARCore

Trzeba skonfigurować sesje rzeczywistości rozszerzonej, aby używały kamery ARCore do używania przedniego aparatu (do selfie) i włączenia obsługi siatki siatki. Aby to zrobić w Sceneform, rozwiń klasę ARsnippet i zastąp konfigurację:

@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;
}

W układzie aktywności odwołuj się do tych nieklasycznych klas ArFragment.

Uzyskiwanie dostępu do wykrytej twarzy

Klasa AugmentedFace rozszerza klasę Trackable. W aktywności w aplikacji użyj AugmentedFace, aby uzyskać dostęp do wykrytej twarzy, wywołując ją metodą addOnUpdateListener().

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

Renderowanie efektu twarzy

Renderowanie efektu obejmuje te kroki:

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);

  …
 }