void HandleClassifications(VNRequest request, NSError error)
        {
            DispatchQueue.MainQueue.DispatchAsync(() =>
            {
                var observations = request.GetResults <VNClassificationObservation>();
                if (observations == null)
                {
                    Debug.WriteLine("Error: no results");
                    _machineLearningTask.TrySetResult(null);
                    return;
                }

                var best = observations[0];
                if (best == null)
                {
                    Debug.WriteLine("Error: no observations");
                    _machineLearningTask.TrySetResult(null);
                    return;
                }

                var result = new MachineLearningResult();

                foreach (var observation in observations)
                {
                    result.Observations.Add(new Observation {
                        Confidence = observation.Confidence, Identifier = observation.Identifier
                    });
                }

                _machineLearningTask.TrySetResult(result);
            });
        }
예제 #2
0
        public Task <MachineLearningResult> AnalizeImageAsync(string mlModel, Stream imageStream)
        {
            if (_machineLearningTask != null)
            {
                _machineLearningTask.TrySetCanceled();
            }
            _machineLearningTask = new TaskCompletionSource <MachineLearningResult>();

            Task.Run(() =>
            {
                try
                {
                    mlModel                       = mlModel.Replace(".pb", "");
                    var imageClassifier           = new ImageClassifier(mlModel);
                    BitmapFactory.Options options = new BitmapFactory.Options();
                    options.InMutable             = true;
                    var mlResult                  = new MachineLearningResult();
                    using (var bitmap = BitmapFactory.DecodeStream(imageStream, null, options))
                    {
                        var result = imageClassifier.RecognizeImage(bitmap);
                        if (result != null)
                        {
                            foreach (var item in result)
                            {
                                mlResult.Observations.Add(new Observation {
                                    Confidence = item.Item1, Identifier = item.Item2
                                });
                            }
                        }
                        bitmap.Recycle();
                    }
                    _machineLearningTask.TrySetResult(mlResult);
                }
                catch (Exception error)
                {
                    Debug.WriteLine(error);
                    _machineLearningTask.TrySetResult(null);
                }
            });

            return(_machineLearningTask.Task);
        }