1

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

我尝试过降低从网络摄像头馈送传递的每秒帧数。然而这并没有帮助。这是我尝试检测人脸的方法。这必须实时更新。

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

1 回答 1

2

想象

  • 尝试定义一个regionOfInterestinVNDetectFaceRectanglesRequest
  • 验证您的请求“ [...] 请求可以自由地利用 GPU 来加速其处理。 ”与usesCPUOnly属性
  • 如果您的使用允许,请尝试preferBackgroundProcessing

AV基金会

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

就像根据以下内容选择正确的设置ProcessInfo.processInfo.thermalState

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

其他

  • 减少您的更新次数CVPixelBuffer
    • 分配它的固定大小
    • 如果为用户显示,只使用显示的部分
  • 如果您正在做一些后期图像处理,请考虑使用Accelerate

避免在主线程上做太多工作

于 2019-11-11T10:05:46.847 回答