如何在没有视图子层的情况下运行 CoreML 模型的请求?

Posted

技术标签:

【中文标题】如何在没有视图子层的情况下运行 CoreML 模型的请求?【英文标题】:How do I run a CoreML model's request without having the view sublayer? 【发布时间】:2020-11-01 10:59:21 【问题描述】:

除非我有这些行,否则我的回调似乎不会运行:

let previewLayer = AVCaptureVideoPreviewLayer(session: captureSession)
view.layer.addSublayer(previewLayer)
previewLayer.frame = view.frame

即使看起来回调会响应:

let dataOutput = AVCaptureVideoDataOutput()
dataOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
captureSession.addOutput(dataOutput)

这是回调函数的声明:

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)

【问题讨论】:

【参考方案1】:

想通了;您需要两个 DispatchQueue,一个用于配置和启动 CaptureSession,另一个用于运行 CaptureSession

sessionQueue.async  [unowned self] in
    self.configureSession()
    self.captureSession.startRunning()

let dataOutput = AVCaptureVideoDataOutput()
dataOutput.setSampleBufferDelegate(self, queue: DispatchQueue(label: "videoQueue"))
captureSession.addOutput(dataOutput)

请务必查看此Medium Post(并阅读第二条评论,因为部分代码已过时)

【讨论】:

以上是关于如何在没有视图子层的情况下运行 CoreML 模型的请求?的主要内容,如果未能解决你的问题,请参考以下文章

每次视图出现时,UIView 层的子层显示不同/随机

如何在正确的位置渲染 CALayer 子层

CoreML 图像模型只识别给定的数据集,如何包含外部数据?

如何在缩放的 CALayer 中保持子层的比例

层的 UIView 的子层在 Storyboard 中显示为 @IBDesignable,但在模拟器中却没有

如何估计 CoreML 模型的最大运行时占用空间(以兆字节为单位)