无法从请求 VNCoreMLRequest 的结果中获取边界框
Unable to get boundingBox from result for a request VNCoreMLRequest
我正在尝试将 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)
}
}
你真的训练过物体检测模型吗?还是 class化模型?
您只能获得对象检测模型的边界框,而不是 classifier。
假设您训练了一个对象检测器,正确的 class 是 VNRecognizedObjectObservation
,而不是 VNClassificationObservation
。
我正在尝试将 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)
}
}
你真的训练过物体检测模型吗?还是 class化模型?
您只能获得对象检测模型的边界框,而不是 classifier。
假设您训练了一个对象检测器,正确的 class 是 VNRecognizedObjectObservation
,而不是 VNClassificationObservation
。