private async Task LoadModelAsync() { Debug.Write("LoadModelBegin | "); Debug.Write("LoadModel Lock | "); _binding?.Clear(); _session?.Dispose(); StorageFile modelFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri($"ms-appx:///Assets/{_appModel.ModelSource}.onnx")); _learningModel = await LearningModel.LoadFromStorageFileAsync(modelFile); _inferenceDeviceSelected = UseGpu ? LearningModelDeviceKind.DirectX : LearningModelDeviceKind.Cpu; // Lock so can't create a new session or binding while also being disposed lock (_processLock) { _session = new LearningModelSession(_learningModel, new LearningModelDevice(_inferenceDeviceSelected)); _binding = new LearningModelBinding(_session); } debugModelIO(); _inputImageDescription = _learningModel.InputFeatures.ToList().First().Name; _outputImageDescription = _learningModel.OutputFeatures.ToList().First().Name; Debug.Write("LoadModel Unlock\n"); }
public async Task <Output> Evaluate(Input input) { binding.Clear(); binding.Bind(inputParameterName, input.image); var result = await session.EvaluateAsync(binding, "0"); var output = new Output(); output.grid = result.Outputs[outputParameterName] as TensorFloat; return(output); }
private async Task <List <float> > EvaluateFrame(VideoFrame frame) { _binding.Clear(); _binding.Bind("input_1:0", frame); var results = await _session.EvaluateAsync(_binding, ""); TensorFloat result = results.Outputs["Identity:0"] as TensorFloat; var shape = result.Shape; var data = result.GetAsVectorView(); return(data.ToList <float>()); }
internal async Task <List <DetectionResult> > EvaluateFrame(VideoFrame frame) { _binding.Clear(); _binding.Bind("input_1:0", frame); var results = await _session.EvaluateAsync(_binding, ""); TensorFloat result = results.Outputs["Identity:0"] as TensorFloat; var shape = result.Shape; var data = result.GetAsVectorView(); var detections = ParseResult(data.ToList <float>().ToArray()); Comparer cp = new Comparer(); detections.Sort(cp); return(NMS(detections)); }