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");
        }
Beispiel #2
0
        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>());
        }
Beispiel #4
0
        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));
        }