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