IMLFeatureProvider CreateInput(UIImage image) { var pixelBuffer = image.Resize(new CGSize(227, 227)).ToPixelBuffer(); var imageValue = MLFeatureValue.FromPixelBuffer(pixelBuffer); var inputs = new NSDictionary <NSString, NSObject> (new NSString("image"), imageValue); return(new MLDictionaryFeatureProvider(inputs, out var error)); }
internal void Classify(UIImage source) { var model = models[currentModel]; var pixelBuffer = source.Scale(sizeFor[model]).ToCVPixelBuffer(); var imageValue = MLFeatureValue.FromPixelBuffer(pixelBuffer); var inputs = new NSDictionary <NSString, NSObject>(new NSString("image"), imageValue); var inputFp = new MLDictionaryFeatureProvider(inputs, out var error); if (error != null) { ErrorOccurred(this, new EventArgsT <string>(error.ToString())); return; } var outFeatures = model.GetPrediction(inputFp, out var err2); if (err2 != null) { ErrorOccurred(this, new EventArgsT <string>(err2.ToString())); return; } var predictionsDictionary = outFeatures.GetFeatureValue("classLabelProbs").DictionaryValue; var byProbability = new List <Tuple <double, string> >(); foreach (var key in predictionsDictionary.Keys) { var description = (string)(NSString)key; var prob = (double)predictionsDictionary[key]; byProbability.Add(new Tuple <double, string>(prob, description)); } //Sort descending byProbability.Sort((t1, t2) => t1.Item1.CompareTo(t2.Item1) * -1); var prediction = new ImageDescriptionPrediction(); prediction.ModelName = currentModel; prediction.predictions = byProbability; PredictionsUpdated(this, new EventArgsT <ImageDescriptionPrediction>(prediction)); }