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

标签 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])
    }
}

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

我想知道是否有办法使用这项技术同时检测多个独特的物体?如果我要同时在画面中放一个苹果和一根香蕉,有没有一种方法可以检测这两个物体,而不是让相机试图弄清楚画面中可以找到一个突出的物体?

最佳答案

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

ResNet50 是一个分类模型,它只能告诉你图像的“主题”。如果图像中有一个苹果和一个香蕉,它可能在其前 5 个预测中对苹果和香蕉有高分(比如 40% 的苹果和 35% 的香蕉和 25% 的其他东西)但这并不是你真正想要的正在寻找。

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

关于ios - 使用 VNCoreMLRequest 一次检测多个对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49582237/

相关文章:

php - NSURLSession 加载速度快,但 UI 更改时间太长

ios - iOS 屏幕几何布局是如何工作的?

iOS条件链接静态库

ios - CloudKit 上传速度很慢

python - 从 Tensorflow 转换 -> CoreML 3.0 用于插槽/意图检测

iphone - 如何在 iPhone 应用程序内的 MKMapView 中显示和连接带有注释的路线的多个位置?

swift - 单元测试错误说参数不匹配任何可用的重载

ios - NSURLSession - 高内存使用率

swift - Apple Vision – 是否可以从静态图像获取相机位置?

machine-learning - 将 Python 创建的神经网络导出到 CoreML,这可能吗?