Есть ли способ получить самый высокий результат доверия только в VisionLabelDetector? - PullRequest
0 голосов
/ 26 августа 2018

Чтобы заархивировать это, я думал только о результате выполнения 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 голосов
/ 27 августа 2018

Предполагая, что labels - это массив, содержащий все объекты VisionLabel, возвращаемые VisionLabelDetector.detect(in:completion:), обычно все метки в массиве уже отсортированы по их confidence от высшего к низшему, поэтому вы можете просто получить самое высокое confidence метка с labels.first.

Если вы хотите быть в большей безопасности и выбрать метку с самым высоким уровнем доверия, вы можете сделать следующее:

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

...