近两年市面上出现了很多有关有关美颜滤镜、贴纸等各种贴纸效果的相机出现,由于项目的需要调研了google开源的一个能够提供3D角度的ARCore框架,本人也结合ARKit在iOS手机上实现了类抖音的效果
系统要求
iOS11.0以上系统
2.iPhone6s以上的Iphone手机
首先看下效果
IMG_3543.PNG
1.引入需求的库
target 'ARCoreFaceDemo'
platform :ios, '10.0'
pod 'ARCore/AugmentedFaces', '~> 1.13.0'
pod 'SnapKit', '~> 4.2.0'
2.使用AVFoundation框架进行数据的采集工作
/// Setup a camera capture session from the front camera to receive captures.
private func setupCamera() {
guard let device =
AVCaptureDevice.default(.builtInWideAngleCamera, for: .video, position: .back),
let input = try? AVCaptureDeviceInput(device: device)
else {
NSLog("Failed to create capture device from front camera.")
return
}
let output = AVCaptureVideoDataOutput()
output.videoSettings = [kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA]
output.setSampleBufferDelegate(self, queue: DispatchQueue.global(qos: .userInteractive))
session.sessionPreset = .high
videoInput = input
session.addInput(input)
session.addOutput(output)
captureSession = session
captureDevice = device
cameraImageLayer.contentsGravity = .center
cameraImageLayer.frame = self.view.bounds
view.layer.insertSublayer(cameraImageLayer, at: 0)
startCameraCapture()
}
3.设置场景
private func setupScene() {
let scene = SCNScene(named: "Face.scnassets/fox_face.scn")
// Face.scnassets/face_texture.png
guard let faceImage = UIImage(named: "multiply01.png"),
// let modelRoot = scene?.rootNode.childNode(withName: "asset", recursively: false)
let modelRoot = scene?.rootNode.childNodes.first
else {
NSLog("Failed to load face scene!")
return
}
// SceneKit uses meters for units, while the canonical face mesh