Ejemplo n.º 1
0
        public async Task <PredictionsResult> GetPredictions(PredictionsRequest request)
        {
            if (request?.Image == null)
            {
                return(null);
            }

            await LoadModel();

            var outputNames = new[] { OutputName };
            var floatValues = GetBitmapPixels(request.Image);
            var outputs     = new float[_loadedLabels.Count];

            inferenceInterface.Feed(InputName, floatValues, 1, InputSize, InputSize, 3);
            inferenceInterface.Run(outputNames);
            inferenceInterface.Fetch(OutputName, outputs);

            var results = new List <Prediction>();

            for (var i = 0; i < outputs.Length; ++i)
            {
                results.Add(new Prediction
                {
                    Label       = _loadedLabels[i],
                    Probability = outputs[i]
                });
            }

            return(new PredictionsResult
            {
                Predictions = results,
            });
        }
Ejemplo n.º 2
0
        public async Task <PredictionsResult> GetPredictions(PredictionsRequest request)
        {
            if (request?.Image == null)
            {
                return(null);
            }

            await LoadModel();

            var imageData = NSData.FromStream(request.Image);
            var input     = UIImage.LoadFromData(imageData);
            var output    = Classify(_loadedModel, input);

            return(new PredictionsResult
            {
                Predictions = output,
            });
        }
Ejemplo n.º 3
0
        private async Task UpdatePredictionsForImage(Stream inputImage)
        {
            var predictionsRequest = new PredictionsRequest {
                Image = inputImage
            };
            var predictions = await CustomVisionService.Value.GetPredictions(predictionsRequest);

            foreach (var prediction in predictions?.Predictions)
            {
                System.Diagnostics.Debug.WriteLine($"{prediction.Label}: {(prediction.Probability * 100):0.00}%\n");
            }

            var predictionTags = predictions?
                                 .Predictions?
                                 .Where(p => p.Probability >= Constants.ProbabilityThreshold)
                                 .OrderByDescending(p => p.Probability)
                                 .ToList();

            var status = MobCatOrNotStatus.idk;

            if (predictionTags != null)
            {
                var anyPersonTag    = predictionTags.FirstOrDefault(p => p.Label != Constants.CustomVisionMobCatTag && p.Label != Constants.CustomVisionNotMobCatTag);
                var anyMobcatTag    = predictionTags.FirstOrDefault(p => p.Label == Constants.CustomVisionMobCatTag);
                var anyNotMobcatTag = predictionTags.FirstOrDefault(p => p.Label == Constants.CustomVisionNotMobCatTag);
                if (anyPersonTag != null)
                {
                    status = MobCatOrNotStatus.yes;
                }
                else if (anyMobcatTag != null && anyMobcatTag.Probability > (anyNotMobcatTag?.Probability ?? 0))
                {
                    status = MobCatOrNotStatus.idk;
                }
                else if (anyNotMobcatTag != null)
                {
                    status = MobCatOrNotStatus.no;
                }
            }

            MobCatStatus   = status;
            PredictionTags = predictions?.Predictions;
        }