با نحوه استفاده از ویژگی چهره های افزوده در برنامه های خود آشنا شوید.
پیش نیازها
قبل از ادامه، مطمئن شوید که مفاهیم اساسی AR و نحوه پیکربندی یک جلسه ARCore را درک کرده اید.
استفاده از چهره های تقویت شده در اندروید
جلسه 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. } }