如何从VNClassificationObservation获取对象rect/coordinates

Svi*_*ana 6 image-recognition ios swift ios11 coreml

有来自的问题VNClassificationObservation.

我的目标是识别对象并使用对象名称显示弹出窗口,我能够获得名称,但我无法获得对象坐标或框架.

这是代码:

let handler = VNImageRequestHandler(cvPixelBuffer: pixelBuffer, options: requestOptions)
do {
    try handler.perform([classificationRequest, detectFaceRequest])
} catch {
    print(error)
}
Run Code Online (Sandbox Code Playgroud)

然后我处理

func handleClassification(request: VNRequest, error: Error?) {
      guard let observations = request.results as? [VNClassificationObservation] else {
          fatalError("unexpected result type from VNCoreMLRequest")
      }

    // Filter observation
    let filteredOservations = observations[0...10].filter({ $0.confidence > 0.1 })

    // Update UI
   DispatchQueue.main.async { [weak self] in

    for  observation in filteredOservations {
            print("observation: ",observation.identifier)
            //HERE: I need to display popup with observation name
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

更新:

lazy var classificationRequest: VNCoreMLRequest = {

    // Load the ML model through its generated class and create a Vision request for it.
    do {
        let model = try VNCoreMLModel(for: Inceptionv3().model)
        let request = VNCoreMLRequest(model: model, completionHandler: self.handleClassification)
        request.imageCropAndScaleOption = VNImageCropAndScaleOptionCenterCrop
        return request
    } catch {
        fatalError("can't load Vision ML model: \(error)")
    }
}()
Run Code Online (Sandbox Code Playgroud)

ric*_*ter 11

纯粹的分类器模型只能回答"这是什么图片?",而不是检测和定位图片中的对象.Apple开发者网站上的所有免费模型(包括Inception v3)都属于此类.

当Vision使用这样的模型时,它会根据MLModel文件中声明的输出将模型识别为分类器,并将VNClassificationObservation对象作为输出返回.

如果您找到或创建了经过训练以识别和定位对象的模型,您仍然可以将其与Vision一起使用.将该模型转换为Core ML格式时,MLModel文件将描述多个输出.当Vision与具有多个输出的模型一起工作时,它返回一个VNCoreMLFeatureValueObservation对象数组- 每个模型的输出一个.

模型如何声明其输出将决定哪些特征值代表什么.报告分类和边界框的模型可以输出字符串和四个双精度,或字符串和多个数组等.

附录:这是一个适用于iOS 11并返回的模型VNCoreMLFeatureValueObservation:TinyYOLO

  • 你能建议一个提供VNCoreMLFeatureValueObservation结果的特定模型吗? (7认同)

Mat*_*ans 4

这是因为分类器不返回对象坐标或框架。分类器仅给出类别列表的概率分布。

你在这里使用什么型号?

  • 这是因为 Inception-v3 不会为您提供坐标,仅提供类名称和这些类的概率的字典。 (2认同)