amplify-swift/AmplifyPlugins/Predictions/AWSPredictionsPlugin/Support/Utils/IdentifyLabelsResultTransfo...

86 lines
2.7 KiB
Swift

//
// Copyright Amazon.com Inc. or its affiliates.
// All Rights Reserved.
//
// SPDX-License-Identifier: Apache-2.0
//
import Foundation
import AWSRekognition
import Amplify
class IdentifyLabelsResultTransformers: IdentifyResultTransformers {
static func processLabels(_ rekognitionLabels: [AWSRekognitionLabel]) -> [Label] {
var labels = [Label]()
for rekognitionLabel in rekognitionLabels {
guard let name = rekognitionLabel.name else {
continue
}
let parents = processParents(rekognitionLabel.parents)
let metadata = LabelMetadata(confidence: Double(
truncating: rekognitionLabel.confidence ?? 0.0), parents: parents)
let boundingBoxes = processInstances(rekognitionLabel.instances)
let label = Label(name: name, metadata: metadata, boundingBoxes: boundingBoxes)
labels.append(label)
}
return labels
}
static func processModerationLabels(_ rekognitionLabels: [AWSRekognitionModerationLabel]) -> [Label] {
var labels = [Label]()
for rekognitionLabel in rekognitionLabels {
guard let name = rekognitionLabel.name else {
continue
}
var parents = [Parent]()
if let parentName = rekognitionLabel.parentName {
let parent = Parent(name: parentName)
parents.append(parent)
}
let metadata = LabelMetadata(confidence: Double(
truncating: rekognitionLabel.confidence ?? 0.0), parents: parents)
let label = Label(name: name, metadata: metadata, boundingBoxes: nil)
labels.append(label)
}
return labels
}
static func processParents(_ rekognitionParents: [AWSRekognitionParent]?) -> [Parent] {
var parents = [Parent]()
guard let rekognitionParents = rekognitionParents else {
return parents
}
for parent in rekognitionParents {
if let name = parent.name {
parents.append(Parent(name: name))
}
}
return parents
}
static func processInstances(_ rekognitionInstances: [AWSRekognitionInstance]?) -> [CGRect] {
var boundingBoxes = [CGRect]()
guard let rekognitionInstances = rekognitionInstances else {
return boundingBoxes
}
for rekognitionInstance in rekognitionInstances {
guard let boundingBox = processBoundingBox(rekognitionInstance.boundingBox) else {
continue
}
boundingBoxes.append(boundingBox)
}
return boundingBoxes
}
}