Hướng dẫn dành cho nhà phát triển về Khuôn mặt tăng cường cho Android

Tìm hiểu cách sử dụng tính năng Khuôn mặt tăng cường trong ứng dụng của chính bạn.

Điều kiện tiên quyết

Hãy đảm bảo bạn hiểu rõ các khái niệm cơ bản về Thực tế tăng cường và cách định cấu hình một phiên ARCore trước khi tiếp tục.

Sử dụng tính năng Khuôn mặt tăng cường trong Android

  1. Định cấu hình phiên ARCore
  2. Nhận quyền truy cập vào khuôn mặt được phát hiện

Định cấu hình phiên ARCore

Chọn máy ảnh trước trong một phiên ARCore hiện có để bắt đầu sử dụng tính năng Khuôn mặt tăng cường. Lưu ý rằng việc chọn máy ảnh trước sẽ dẫn đến một số thay đổi trong hành vi ARCore.

Java

// Set a camera configuration that usese the front-facing camera.
CameraConfigFilter filter =
    new CameraConfigFilter(session).setFacingDirection(CameraConfig.FacingDirection.FRONT);
CameraConfig cameraConfig = session.getSupportedCameraConfigs(filter).get(0);
session.setCameraConfig(cameraConfig);

Kotlin

// Set a camera configuration that usese the front-facing camera.
val filter = CameraConfigFilter(session).setFacingDirection(CameraConfig.FacingDirection.FRONT)
val cameraConfig = session.getSupportedCameraConfigs(filter)[0]
session.cameraConfig = cameraConfig

Bật AugmentedFaceMode:

Java

Config config = new Config(session);
config.setAugmentedFaceMode(Config.AugmentedFaceMode.MESH3D);
session.configure(config);

Kotlin

val config = Config(session)
config.augmentedFaceMode = Config.AugmentedFaceMode.MESH3D
session.configure(config)

Hướng lưới khuôn mặt

Lưu ý hướng của lưới mặt:

Truy cập vào khuôn mặt được phát hiện

Nhận Trackable cho mỗi khung. Trackable là thứ mà ARCore có thể theo dõi và có thể liên kết với văn bản liên kết.

Java

// ARCore's face detection works best on upright faces, relative to gravity.
Collection<AugmentedFace> faces = session.getAllTrackables(AugmentedFace.class);

Kotlin

// ARCore's face detection works best on upright faces, relative to gravity.
val faces = session.getAllTrackables(AugmentedFace::class.java)

Nhận TrackingState cho mỗi Trackable. Nếu đó là TRACKING, thì tức là tư cách của nó hiện đã được ARCore biết đến.

Java

for (AugmentedFace face : faces) {
  if (face.getTrackingState() == TrackingState.TRACKING) {
    // UVs and indices can be cached as they do not change during the session.
    FloatBuffer uvs = face.getMeshTextureCoordinates();
    ShortBuffer indices = face.getMeshTriangleIndices();
    // Center and region poses, mesh vertices, and normals are updated each frame.
    Pose facePose = face.getCenterPose();
    FloatBuffer faceVertices = face.getMeshVertices();
    FloatBuffer faceNormals = face.getMeshNormals();
    // Render the face using these values with OpenGL.
  }
}

Kotlin

faces.forEach { face ->
  if (face.trackingState == TrackingState.TRACKING) {
    // UVs and indices can be cached as they do not change during the session.
    val uvs = face.meshTextureCoordinates
    val indices = face.meshTriangleIndices
    // Center and region poses, mesh vertices, and normals are updated each frame.
    val facePose = face.centerPose
    val faceVertices = face.meshVertices
    val faceNormals = face.meshNormals
    // Render the face using these values with OpenGL.
  }
}