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