【问题标题】:AVCaptureVideo not showing labelAVCaptureVideo 不显示标签
【发布时间】:2018-02-28 13:01:16
【问题描述】:

我试图保留控制台中的对象以显示为标签(分类器文本)。出现“UILabel.text 只能从主线程使用”的警告。为什么将项目显示为标签的问题似乎是什么?

var previewLayer: AVCaptureVideoPreviewLayer!

let classifierText: UILabel = {
    let classifier = UILabel()
    classifier.translatesAutoresizingMaskIntoConstraints = false
    classifier.textColor = .black
    classifier.font = UIFont(name: "Times-New-Roman", size: 10)
    classifier.textAlignment = .center
    return classifier
}()

func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
    guard let pixelBuffer: CVPixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer) else { return }
    guard let model =  try? VNCoreMLModel(for: Resnet50().model) else { return }
    let request = VNCoreMLRequest(model: model) { (finishedReq, err) in
    let results = finishedReq.results as?  [VNClassificationObservation]
    let firstObservation = results!.first
    self.classifierText.text = "\(firstObservation!.identifier as String)"

【问题讨论】:

    标签: swift uilabel avcapture coreml


    【解决方案1】:

    方法captureOutput(sampleBuffer, etc) 不在主线程上运行。所以你试图从一个不是主线程的线程中更改标签。

    解决办法是把工作安排在主线程上,像这样:

    DispatchQueue.main.async {
        self.classifierText.text = "\(firstObservation!.identifier as String)"
    }
    

    【讨论】:

      猜你喜欢
      • 2016-07-10
      • 1970-01-01
      • 2020-08-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-09-26
      • 2018-01-20
      • 1970-01-01
      相关资源
      最近更新 更多