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));
        }