swift - MacOS:减少 VNFaceObservation 的 CPU 使用率

标签 swift macos vision-api

我正在尝试使用 Vision API 检测网络摄像头中的人脸。 CPU 使用率非常高,大约 60% 或 80%。有什么办法可以减少吗?

我已经尝试减少从网络摄像头传输的每秒帧数。然而这并没有帮助。 这是我尝试检测面孔的方式。这必须实时更新。

try? VNSequenceRequestHandler().perform([VNDetectFaceRectanglesRequest()], on: image)
if let results = VNDetectFaceRectanglesRequest().results as? [VNFaceObservation] {
    DispatchQueue.main.async {
        // update UI
    }
}

最佳答案

愿景

  • 尝试在 VNDetectFaceRectanglesRequest 中定义一个 regionOfInterest
  • 使用 usesCPUOnly 属性验证您的请求“[…] 请求可以免费利用 GPU 加速其处理。
  • 如果您的使用允许,请尝试 preferBackgroundProcessing

AVFoundation

如果您正在使用 AVCapture,您还可以为您的捕获设备选择较低的质量

比如根据 ProcessInfo.processInfo.thermalState 选择正确的设置:

  • 'AVCaptureSession.sessionPreset'
  • 每秒分析最大数量的人脸
  • 如果您的 AVCaptureDevice 不需要,请禁用 HDR

其他

  • 减少 CVPixelBuffer 的更新次数
    • 为其分配固定大小
    • 如果给用户展示,只使用展示的部分
  • 如果您要进行一些后期图像处理,请考虑使用 Accelerate

Avoid as much work on the main thread

关于swift - MacOS:减少 VNFaceObservation 的 CPU 使用率,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58664586/

相关文章:

facebook - 快速将 Facebook "name"添加到 PFUser ["fullname"]

iphone - IBOutlet 属性是否必须是非原子的?

ios - 作为一种类型的 Swift 协议(protocol)

ios - CloudKit 记录版本控制

java - Android Studio - 找不到tools.jar。请检查 X 是否包含有效的 JDK 安装

java - Groovy Spock 模拟调用模拟类的真实方法

ios - 将 Vision boundingBox 从 VNFaceObservation 转换为矩形以在图像上绘制

android - 如何使用 Mobile Vision API 获取图像中文本的位置?

ios - 如何刷新表格 View 但禁用弹跳?

ios - 再次调用 viewdidload 和 viewdidappear