앱에서 증강 얼굴 기능을 사용하는 방법을 알아보세요.
기본 요건
계속 진행하기 전에 기본 AR 개념과 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)
각 Trackable
의 TrackingState
를 가져옵니다. 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. } }