Пример #1
0
        public async Task <modelOutput> EvaluateAsync(modelInput input)
        {
            var output = new modelOutput();

            binding.Bind("data", input.data);
            binding.Bind("classLabel", output.ClassLabel);
            binding.Bind("loss", output.Loss);
            var result = await session.EvaluateAsync(binding, "0");

            output.ClassLabel = result.Outputs["classLabel"] as TensorString;
            output.Loss       = result.Outputs["loss"] as List <IDictionary <string, float> >;
            return(output);
        }
Пример #2
0
        private async void EvaluateVideoFrameAsync(VideoFrame inputImage)
        {
            elaborate = true;
            //Image crop to required size
            ModelInput.data = ImageFeatureValue.CreateFromVideoFrame(await CenterCropImageAsync(inputImage, 227, 227));

            //Evaluate the model
            ModelOutput = await ModelGen.EvaluateAsync(ModelInput);

            //If no results
            if (ModelOutput.Loss == null || ModelOutput.Loss.Count == 0)
            {
                return;
            }
            var loss = ModelOutput.Loss.ToList()[0];

            //Find max
            var maxValue = loss.Values.Max();

            if (maxValue > 0.7)
            {
                lastAlert = DateTime.Now;

                var pos   = loss.Values.ToList().IndexOf(maxValue);
                var label = loss.Keys.ToList().ElementAt(pos);

                await Dispatcher.RunAsync(CoreDispatcherPriority.Normal,
                                          () =>

                {
                    //Get current image
                    var source = new SoftwareBitmapSource();
                    source.SetBitmapAsync(inputImage.SoftwareBitmap);

                    //Create alarm image
                    var lossStr = new ResultModel
                    {
                        Name    = label,
                        Percent = maxValue * 100.0f,
                        Image   = source
                    };


                    resultsList.Insert(0, lossStr);
                    PlaySound();
                });
            }

            elaborate = false;
        }