تعرَّف على كيفية استخدام ميزة "الوجوه المعززة" في تطبيقاتك الخاصة.
المتطلبات الأساسية
قبل المتابعة، تأكد من فهم مفاهيم الواقع المعزّز الأساسية وكيفية ضبط جلسة ARCore.
استخدام ميزة "التعرّف على الوجه" في نظام Android
ضبط جلسة ARCore
اختَر الكاميرا الأمامية في جلسة ARCore حالية لبدء استخدام ميزة "الوجوه المعززة". تجدر الإشارة إلى أنّ اختيار الكاميرا الأمامية سيؤدي إلى إجراء عدد من التغييرات في سلوك 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. } }