public async Task <IEnumerable <ImageClassification> > Evalute(CoreMlInput source)
        {
            var tcs = new TaskCompletionSource <IEnumerable <ImageClassification> >();

            var request = new VNCoreMLRequest(_model, (response, e) =>
            {
                if (e != null)
                {
                    tcs.SetException(new NSErrorException(e));
                }
                else
                {
                    var results = response.GetResults <VNClassificationObservation>();
                    tcs.SetResult(results.Select(r => new ImageClassification(r.Identifier, r.Confidence)).ToList());
                }
            });

            // Pre-process image (scale down)
            var buffer = source.Image.ToCVPixelBuffer(_targetImageSize);

            var requestHandler = new VNImageRequestHandler(buffer, new NSDictionary());

            requestHandler.Perform(new[] { request }, out NSError error);

            var classifications = await tcs.Task;

            if (error != null)
            {
                throw new NSErrorException(error);
            }

            return(classifications);
        }
        public async Task <IReadOnlyList <ImageClassification> > ClassifyImage(byte[] image)
        {
            if (!IsInitialized)
            {
                await Init();
            }

            try
            {
                var input   = CoreMlInput.CreateFrom(image);
                var results = await coreMlModel.Evalute(input);

                return(results
                       .Where(p => p.Probability > 0.85)
                       .ToList());
            }
            catch (Exception ex)
            {
                throw new ImageClassifierException("Failed to classify image - check the inner exception for more details", ex);
            }
        }