我正在开发一个具有 Vision 框架功能(处理 CoreML 模型)的 ARKit 应用程序。
loopCoreMLUpdate()
函数生成一个循环,导致非常高的能量影响(CPU=70%,GPU=66%)。
如何处理此任务并将能量影响降低到低水平?
这个循环问题的解决方法是什么,可以帮助我减少 CPU/GPU 工作量?
这是我的代码:
import UIKit
import SpriteKit
import ARKit
import Vision
class ViewController: UIViewController, ARSKViewDelegate {
@IBOutlet weak var sceneView: ARSKView!
let dispatchQueueML = DispatchQueue(label: "AI")
var visionRequests = [VNRequest]()
// .........................................
// .........................................
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
let configuration = AROrientationTrackingConfiguration()
sceneView.session.run(configuration)
loopCoreMLUpdate()
}
func loopCoreMLUpdate() {
dispatchQueueML.async {
self.loopCoreMLUpdate() // SELF-LOOP LEADS TO A VERY HIGH IMPACT
self.updateCoreML()
}
}
func updateCoreML() {
let piBuffer: CVPixelBuffer? = (sceneView.session.currentFrame?.capturedImage)
if piBuffer == nil { return }
let ciImage = CIImage(cvPixelBuffer: piBuffer!)
let imageRequestHandler = VNImageRequestHandler(ciImage: ciImage, options: [:])
do {
try imageRequestHandler.perform(self.visionRequests)
} catch {
print(error)
}
}
// .........................................
// .........................................
}