راهنمای برنامه‌نویس چهره‌های افزوده برای اندروید

با نحوه استفاده از ویژگی چهره های افزوده در برنامه های خود آشنا شوید.

پیش نیازها

قبل از ادامه، مطمئن شوید که مفاهیم اساسی AR و نحوه پیکربندی یک جلسه ARCore را درک کرده اید.

استفاده از چهره های تقویت شده در اندروید

  1. جلسه ARCore را پیکربندی کنید
  2. به چهره شناسایی شده دسترسی پیدا کنید

جلسه ARCore را پیکربندی کنید

دوربین جلو را در یک جلسه ARCore موجود برای شروع استفاده از چهره‌های افزوده انتخاب کنید. توجه داشته باشید که انتخاب دوربین جلو باعث ایجاد تغییراتی در رفتار ARCore می شود.

جاوا

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

کاتلین

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

فعال کردن AugmentedFaceMode :

جاوا

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

کاتلین

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

جهت مش صورت

به جهت مش چهره توجه کنید:

به چهره شناسایی شده دسترسی پیدا کنید

برای هر فریم یک Trackable دریافت کنید. Trackable چیزی است که ARCore می تواند ردیابی کند و Anchors می تواند به آن متصل شود.

جاوا

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

کاتلین

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

TrackingState برای هر Trackable دریافت کنید. اگر TRACKING باشد، در حال حاضر وضعیت آن توسط ARCore شناخته شده است.

جاوا

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.
  }
}

کاتلین

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.
  }
}