【发布时间】:2019-05-03 22:52:08
【问题描述】:
我正在开发一个具有 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)
}
}
// .........................................
// .........................................
}
【问题讨论】:
-
基本上你在问'如何减少我没有发布的这个功能的电池使用量?'
标签: swift machine-learning augmented-reality arkit apple-vision