是否只有在VisionLabelDetector中才能获得最高的置信度结果?

时间:2018-08-26 19:59:24

标签: ios swift firebase-mlkit

要对此进行存档,我正在考虑仅采用1个结果,该结果是最高的,因此我查看了文档,VisionCloudDetectorOptions使用了此变量maxResults,因此如果将其设置为1,我的目标是完整,但这仅适用于基于云的图像标签。因此,我检查了VisionLabelDetectorOptions在本地运行,并且没有选项。而从中打印出来的结果

return "Label: \(String(describing: feature.label)), " +
      "Confidence: \(feature.confidence), " +
      "EntityID: \(String(describing: feature.entityID)), " +
      "Frame: \(feature.frame)"
    }.joined(separator: "\n")

会变成这个

Label: Food, Confidence: 0.795696, EntityID: /m/02wbm, Frame: (0.0, 0.0, 0.0, 0.0)
Label: Fruit, Confidence: 0.71232, EntityID: /m/02xwb, Frame: (0.0, 0.0, 0.0, 0.0)
Label: Vegetable, Confidence: 0.595484, EntityID: /m/0f4s2w, Frame: (0.0, 0.0, 0.0, 0.0)
Label: Plant, Confidence: 0.536178, EntityID: /m/05s2s, Frame: (0.0, 0.0, 0.0, 0.0)

这些是我从Firebase/quickstart-ios开始的示例代码,从645行开始。

我的第二个解决方案是像使用topResult返回第一个结果的CoreML一样执行VNClassificationObservation。像这样

guard let results = request.results as? [VNClassificationObservation],
            let topResult = results.first else {
                fatalError("Unexpected result")
        }

但是我还没有弄清楚如何复制。

因此,有没有办法仅采用最高的Confidence标签?在这种情况下是Food标签。

1 个答案:

答案 0 :(得分:1)

假设if(yourTextBox.Items[yourTextBox.SelectedIndex] == "Tea") { //Your Code } 是包含labels返回的所有VisionLabel对象的数组,通常该数组中的所有标签已经根据其VisionLabelDetector.detect(in:completion:)从最高到最低进行了排序,因此您可以简单地通过confidence获得最高的confidence标签。

如果您想更加安全并自己选择最高可信度标签,则可以执行以下操作:

labels.first