无法从请求VNCoreMLRequest的结果中获取boundingBox

时间:2020-09-04 21:13:53

标签: ios swift coreml vision

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

模型:我已经使用CreateML训练了模型,它可以检测2个特定项目。 我在CreateML中用各种图像测试了模型,它可以正确检测到这2个项目,并在它们周围放置一个框。因此,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)
    }
}

1 个答案:

答案 0 :(得分:1)

您真的训练了物体检测模型吗?还是分类模型?

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

假设您训练了一个物体检测器,则正确的类别是Song Document: { id: ID, eventType: String, numberOfLikes: Integer, sections: String[] } ,而不是eventType: { songs: [{ songId: ID, numberOfLikes: Integer, sections: String[] }] }