public func session(_ session: ARSession, didUpdate frame: ARFrame) {
let viewportSize = view.bounds.size
var updateFaceAnchor: ARFaceAnchor? = nil
if let faceAnchor = frame.anchors.first as? ARFaceAnchor {
if faceAnchor.isTracked {
updateFaceAnchor = self.currentARKitFaceAnchor
if let _ = frame.anchors.first as? ARPlaneAnchor {
let handler: ARGSessionProjectPointHandler = { (transform: simd_float3, orientation: UIInterfaceOrientation, viewport: CGSize) in
return frame.camera.projectPoint(transform, orientation: orientation, viewportSize: viewport)
if let faceAnchor = updateFaceAnchor {
self.argSession?.applyAdditionalFaceInfo(withPixelbuffer: frame.capturedImage, transform: faceAnchor.transform, vertices: faceAnchor.geometry.vertices, viewportSize: viewportSize, convert: handler)
self.argSession?.feedPixelbuffer(frame.capturedImage)
self.argSession?.feedPixelbuffer(frame.capturedImage)
public func didUpdate(_ arFrame: ARGFrame) {
guard let _ = arKitSession.configuration as? ARFaceTrackingConfiguration else {
if let cvPixelBuffer = arFrame.renderedPixelBuffer {