Vision フレームワーク機能 (CoreML モデルの処理) を備えた ARKit アプリを開発しています。
loopCoreMLUpdate()
関数は、非常に高いエネルギーへの影響(CPU=70%、GPU=66%)につながるループを作成します。
このタスクを処理し、エネルギー影響を LOW レベルに下げるにはどうすればよいですか?
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)
}
}
// .........................................
// .........................................
}