ดูวิธีใช้ฟีเจอร์ Augmented Faces ในแอปของคุณเอง
ข้อกำหนดเบื้องต้น
ตรวจสอบว่าคุณเข้าใจแนวคิด AR พื้นฐาน และวิธีกําหนดค่าเซสชัน ARCore ก่อนดำเนินการต่อ
การใช้ Augmented Faces ใน Android
กำหนดค่าเซสชัน 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 จะติดตามได้
คุณแนบแท็ก Anchor ได้
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. } }