iOS용 증강 얼굴 개발자 가이드

앱에서 증강 얼굴 기능을 사용하는 방법을 알아보세요.

기본 요건

  • Xcode 버전 13.0 이상
  • Cocoapods 1.4.0 이상(Cocoapods를 사용하는 경우)
  • iOS 12.0 이상을 실행하는 ARKit 호환 Apple 기기 (iOS 12.0 이상의 배포 대상 필요)
를 통해 개인정보처리방침을 정의할 수 있습니다.

샘플 앱 빌드 및 실행

자세한 단계는 빠른 시작을 참고하세요.

  1. GitHub에서 iOS용 ARCore SDK를 복제하거나 다운로드하여 샘플 앱 코드를 가져옵니다.
  2. 터미널 창을 열고 Xcode 프로젝트가 있는 폴더에서 pod install를 실행합니다.
  3. Xcode 버전 10.3 이상에서 샘플 앱을 열고 USB를 통해 기기를 개발 머신에 연결합니다. 빌드 오류를 방지하려면 .xcodeproj 파일이 아닌 .xcworkspace 파일에서 빌드해야 합니다.
  4. Cmd+R을 누르거나 Run를 클릭합니다. 증강 얼굴 기능은 시뮬레이터가 아닌 실제 기기를 사용합니다.
  5. '확인'을 탭하여 카메라에 샘플 앱에 대한 액세스 권한을 부여합니다. 앱에서 전면 카메라를 열고 카메라 피드에서 내 얼굴을 즉시 추적해야 합니다. 이마 양쪽에 여우 귀 이미지를 배치하고 자신의 코 위에 여우 코를 배치해야 합니다.

앱의 증강 얼굴 구현 개요

Xcode로 *.scn 파일 가져오기

앱에서 감지된 얼굴에 텍스처, 3D 모델과 같은 자체 애셋을 추가하려면 *.scn 애셋을 Xcode로 드래그합니다.

증강 얼굴 세션 초기화

앱에서 Augmented Faces API를 사용하려면 Augmented Faces 세션을 초기화하세요. 이 세션은 60fps로 카메라 이미지를 촬영하고 대리자 메서드에 얼굴 업데이트를 비동기식으로 반환합니다. 초기화할 때 캡처 기기의 시야를 전달하고 대리자를 설정했는지 확인합니다.

// Session takes a float for field of view
let faceSession = try? GARAugmentedFaceSession(fieldOfView: cameraFieldOfView)
faceSession?.delegate = self

세션에 카메라 이미지 전달

이제 세션이 올바르게 초기화되고 구성되었으므로 앱이 카메라 이미지를 세션으로 전송할 수 있습니다. 샘플 앱은 전면 카메라의 동영상 프레임이 있는 AVCaptureSession를 만들어 카메라 이미지를 가져옵니다.

다음 코드 샘플은 이미지, 타임스탬프, 인식 회전을 얼굴 세션에 전달하는 AVFoundation의 캡처 출력 위임 메서드의 구현을 보여줍니다.

func captureOutput(_ output: AVCaptureOutput,
                     didOutput sampleBuffer: CMSampleBuffer,
                     from connection: AVCaptureConnection) {

     faceSession.update(with: imageBuffer,
                        timestamp: frameTime,
                        recognitionRotation: rotationDegrees)
}

이미지가 처리된 후 Augmented Faces API는 GARAugmentedFaceFrame를 반환하는 대리자 콜백을 전송합니다. 얼굴에 효과를 적용하는 데 도움이 되는 증강 얼굴 객체가 포함되어 있습니다. 여기에는 업데이트 메서드에 전달한 이미지 버퍼와 타임스탬프도 포함됩니다. 이 기능은 얼굴 효과를 이미지에 동기화하는 데 유용합니다. 또한 이 객체는 인식된 얼굴에 연결된 것처럼 보이는 얼굴 효과를 쉽게 렌더링할 수 있는 방식으로 3D 세계 및 2D 뷰를 설정할 수 있도록 디스플레이 변환 및 투영 매트릭스를 제공합니다.

var face: GARAugmentedFace? { get }
var capturedImage: CVPixelBuffer { get }
var timestamp: TimeInterval { get }

얼굴 메시 방향

iOS용 페이스 메시의 방향에 유의하세요.

면에 2D 텍스처 적용

샘플 앱에서는 증강 얼굴을 SCNGeometry 객체로 변환하는 클래스를 제공합니다. 이 도형을 사용하여 증강 얼굴의 가운데 변환에 배치하게 될 SceneKit 노드에 쉽게 연결할 수 있습니다.

let faceNode = SCNNode()

// Gets the most recent frame's face
let face = faceSession.currentFrame?.face

// This is instantiated once, not with every frame
let faceGeometryConverter = FaceMeshGeometryConverter()

// Converts Augmented Face to SCNGeometry object
let faceMesh = faceGeometryConverter.geometryFromFace(face)

// Assigns geometry to node and sets the pose
faceNode.geometry = faceMesh
faceNode.simdTransform = face.centerTransform

2D 얼굴 텍스처는 UIImage로 로드되고 얼굴 메시의 도형에 연결된 머티리얼로 설정됩니다.

faceTextureMaterial = SCNMaterial()
faceTextureMaterial.diffuse.contents = UIImage(named:@"face.png")

faceMesh?.firstMaterial = faceTextureMaterial

면에 3D 물체 부착

대리자 콜백에서 수신된 GARAugmentedFace는 얼굴에 콘텐츠를 첨부하는 데 사용할 수 있는 세 가지 다른 영역 또는 변환을 제공합니다. 이러한 변환을 통해 코, 이마 왼쪽, 이마 오른쪽을 세계 공간에서 얻을 수 있습니다. 여기서 코 변환은 구를 코에 연결하는 데 사용됩니다.

// Create node and add to scene
let node = SCNNode(geometry: SCNSphere(radius: .02))
sceneView.rootNode.addChild(node)

// Every frame updates the node's position
node.simdWorldTransform = session.currentFrame.face.transform(for: .nose)

Xcode로 자체 애셋 가져오기

앱에서 감지된 얼굴에 텍스처, 3D 모델과 같은 애셋을 추가하려면 먼저 애셋을 Xcode로 가져옵니다.

  1. *.dae (3D 모델) 파일을 내보냅니다.
  2. *.dae 파일을 Xcode 프로젝트로 드래그합니다.
  3. Editor > Convert to SceneKit scene file format (.scn)로 이동하여 Xcode에서 파일을 .scn 형식으로 변환합니다.
를 통해 개인정보처리방침을 정의할 수 있습니다.