在指定的时间段内运行和暂停ARSession

ARG*_*Geo -6 augmented-reality ios swift arkit dispatch-queue

我正在使用手势识别开发ARKit/ VisioniOS应用程序.我的应用程序有一个包含单个的简单UI UIView.没有ARSCNView/ 根本没有ARSKView.我正在将一系列捕获ARFramesCVPixelBuffer我用于的内容中VNRecognizedObjectObservation.

我不需要会话中的任何跟踪数据.我只需要currentFrame.capturedImageCVPixelBuffer.我需要以30 fps捕获ARFrame.60 fps是过高的帧速率.

preferredFramesPerSecond在我的情况下,实例属性绝对没用,因为它控制渲染ARSCNView/的帧速率ARSKView.我没有ARViews.并且它不会影响会话的帧速率.

所以,我决定使用run()pause()方法来降低会话的帧速率.

我想知道如何在指定的时间内自动runpauseARSession?持续时间runpause方法必须16 ms(或0.016秒).我想通过它可能是可能的DispatchQueue.但我不知道如何实现它.

怎么做?

在此输入图像描述

这是一个伪代码:

session.run(configuration)

    /*  run lasts 16 ms  */

session.pause()

    /*  pause lasts 16 ms  */

session.run(session.configuration!)

    /*  etc...  */
Run Code Online (Sandbox Code Playgroud)

PS 我在我的应用程序中既不使用CocoaPod也不使用Carthage.

更新:它是关于如何currentFrame.capturedImage检索和使用ARSession的.

let session = ARSession()

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)

    session.delegate = self
    let configuration = ARImageTrackingConfiguration() // 6DOF
    configuration.providesAudioData = false
    configuration.isAutoFocusEnabled = true            
    configuration.isLightEstimationEnabled = false
    configuration.maximumNumberOfTrackedImages = 0
    session.run(configuration)  

    spawnCoreMLUpdate()
}

func spawnCoreMLUpdate() {    // Spawning new async tasks

    dispatchQueue.async {
        self.spawnCoreMLUpdate()
        self.updateCoreML()
    }
}

func updateCoreML() {

    let pixelBuffer: CVPixelBuffer? = (session.currentFrame?.capturedImage)
    if pixelBuffer == nil { return }
    let ciImage = CIImage(cvPixelBuffer: pixelBuffer!)
    let imageRequestHandler = VNImageRequestHandler(ciImage: ciImage, options: [:])
    do {
        try imageRequestHandler.perform(self.visionRequests)
    } catch {
        print(error)
    }
}
Run Code Online (Sandbox Code Playgroud)

Emi*_*aez 5

如果你想要的是将帧速率从60降低到30,你应该使用的preferredFramesPerSecond属性SCNView.我假设你正在使用一个ARSCNView,它是一个子类SCNView.

财产文件.