【问题标题】:Is there a way to take highest confidence result only in VisionLabelDetector?有没有办法只在 VisionLabelDetector 中获得最高置信度结果?
【发布时间】:2018-08-26 19:59:23
【问题描述】:

为了存档这个,我想只取 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 行开始。

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

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

但我还没有想出如何像那样复制。

那么,有没有办法只取最高的Confidence 标签?在这种情况下是Food 标签。

【问题讨论】:

    标签: ios swift firebase-mlkit


    【解决方案1】:

    假设labels是包含VisionLabelDetector.detect(in:completion:)返回的所有VisionLabel对象的数组,通常数组中的所有标签都已经根据它们的confidence从高到低排序,所以你可以简单地得到最高的@ 987654324@ 标签为labels.first

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

    let topLabel = labels.max(by: { (a, b) -> Bool in return a.confidence < b.confidence })

    【讨论】:

    • 在这种情况下,示例 repo,他们使用了features。只需添加features.top,然后像上面一样打印出结果,我们将拥有最高置信度标签。感谢您的建议!
    猜你喜欢
    • 1970-01-01
    • 2014-03-20
    • 1970-01-01
    • 2011-03-13
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    相关资源
    最近更新 更多