【问题标题】:Unable to get boundingBox from result for a request VNCoreMLRequest无法从请求 VNCoreMLRequest 的结果中获取 boundingBox
【发布时间】:2020-12-24 03:14:32
【问题描述】:

我正在尝试将 Vision 与我训练的自定义模型一起使用,但我没有找到一种方法来获取 Vision 在框架中检测到的边界框。

模型:我使用 CreateML 训练了模型,它可以检测 2 个特定项目。 我在 CreateML 中使用各种图像测试了模型,它正确检测了这两个项目并在它们周围放置了一个框。那么,Vision 不应该也可以给我边界框吗?

func prepare() {
    do {
        let vnModel = try VNCoreMLModel(for: modelFile.model)
        let coreMlRequest = VNCoreMLRequest(model: vnModel,
                                            completionHandler: { (request, error) in
            guard
                let results = request.results
                    as? [VNClassificationObservation]  // is this the right cast?
            else { return }

            // how do I get the bounding box from the results?
        })
        vnRequests = [coreMlRequest]
    }
    catch {
        print(error)
    }
}

func run(arFrame: ARFrame) {
    do {
        let requestHandler = VNImageRequestHandler(cvPixelBuffer: arFrame.capturedImage,
                                                   options: [:])
        try requestHandler.perform(self.vnRequests)
    }
    catch {
        print(error)
    }
}

【问题讨论】:

    标签: ios swift coreml vision


    【解决方案1】:

    您是否真的训练了对象检测模型?还是分类模型?

    您只能获得对象检测模型的边界框,而不是分类器。

    假设您训练了一个对象检测器,正确的类是 VNRecognizedObjectObservation,而不是 VNClassificationObservation

    【讨论】:

    • 我对 CoreML 很陌生,这是我的第一个模型。有可能我没有正确地做到这一点。通过在我想训练的项目周围放置一个矩形,我标记了 50 个图像。当我在 CreateML 中尝试模型时,它会找到项目并在它们周围放置一个准确的矩形,所以我猜它是为对象检测而训练的。
    • 听起来是对的。 :-) 你应该得到VNRecognizedObjectObservation 结果。
    • ‘VNRecognizedObjectObservation’成功了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-01-02
    • 1970-01-01
    • 1970-01-01
    • 2018-12-15
    相关资源
    最近更新 更多