in SAM2-Demo/Common/SAM2.swift [107:126]
func getPromptEncoding(from allPoints: [SAMPoint], with size: CGSize) async throws {
guard let model = promptEncoderModel else {
throw SAM2Error.modelNotLoaded
}
let transformedCoords = try transformCoords(allPoints.map { $0.coordinates }, normalize: false, origHW: size)
// Create MLFeatureProvider with the required input format
let pointsMultiArray = try MLMultiArray(shape: [1, NSNumber(value: allPoints.count), 2], dataType: .float32)
let labelsMultiArray = try MLMultiArray(shape: [1, NSNumber(value: allPoints.count)], dataType: .int32)
for (index, point) in transformedCoords.enumerated() {
pointsMultiArray[[0, index, 0] as [NSNumber]] = NSNumber(value: Float(point.x))
pointsMultiArray[[0, index, 1] as [NSNumber]] = NSNumber(value: Float(point.y))
labelsMultiArray[[0, index] as [NSNumber]] = NSNumber(value: allPoints[index].category.type.rawValue)
}
let encoding = try model.prediction(points: pointsMultiArray, labels: labelsMultiArray)
self.promptEncodings = encoding
}