使用VNCoreMLRequest一次检测多个对象?

时间:2018-03-30 22:29:49

标签: ios swift coreml

我已经设置了正常工作的VNCoreMLRequest

extension CameraVC : AVCaptureVideoDataOutputSampleBufferDelegate {

    func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
          print("Camera was able to capture a frame: ", Date())

        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
            if err != nil { print(err?.localizedDescription) ; return }

            guard let results = finishedReq.results as? [VNClassificationObservation] else { return }
            guard let firstObservation = results.first else { return }
            print(firstObservation.identifier, firstObservation.confidence)

        }
       try? VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: [:]).perform([request])
    }
}

此请求返回请求认为正在查看的内容的数组,列表中的第一项是最佳猜测。

我想知道是否有办法使用这种技术同时检测多个独特的物体?如果我同时在框架中有一个苹果和一个香蕉,有没有办法检测两个物体而不是相机试图找出在框架中可以找到哪个突出物体?

1 个答案:

答案 0 :(得分:1)

是的,你可以这样做但不使用ResNet50。

ResNet50是一种分类模型,它只能告诉您图像的“主要主题”。如果图像中有苹果和香蕉,那么苹果和香蕉在其前5个预测中可能得分较高(例如40%的苹果和35%的香蕉以及25%的其他东西),但这不是你的真实情况。寻找。

更好的解决方案是使用对象检测模型,该模型不仅可以告诉您图像中各个对象的位置,还可以告诉您它们的位置。