دليل المطوّرين للوجوه المعزَّزة لنظام التشغيل Android

تعرَّف على كيفية استخدام ميزة "وجوه معززة" في تطبيقاتك.

المتطلبات الأساسية

احرص على فهم مفاهيم الواقع المعزّز الأساسية. وكيفية ضبط جلسة ARCore قبل المتابعة.

استخدام ميزة "وجوه معززة" في Android

  1. ضبط جلسة ARCore
  2. الوصول إلى الوجه الذي تم رصده

إعداد جلسة ARCore

اختَر الكاميرا الأمامية في جلسة ARCore حالية لبدء استخدام ميزة Augmented Faces. تجدر الإشارة إلى أنّ اختيار الكاميرا الأمامية سيؤدي إلى حدوث عدد من التغييرات في سلوك 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

تفعيل 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)

اتجاه الشبكة المتداخلة للوجه

لاحظ اتجاه الشبكة المتداخلة للوجه:

الوصول إلى الوجه الذي تم رصده

الحصول على Trackable لكل إطار. Trackable هو شيء يمكن لـ ARCore تتبُّعه يمكن إرفاق علامات الارتساء بها.

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)

الحصول على TrackingState لكل Trackable. إذا كانت القيمة TRACKING، فسيعرف وضعه حاليًا بواسطة ARCore.

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