Example #1
0
        private async void Button_Click(object sender, RoutedEventArgs e)
        {
            // Use Picket to get file
            var file = await GetImageFile();

            SoftwareBitmap softwareBitmap;

            byte[] bytes;


            // Load image & scale to tensor input dimensions
            using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read))
            {
                bytes = await GetImageAsByteArrayAsync(stream, 320, 320, BitmapPixelFormat.Rgba8);

                softwareBitmap = await GetImageAsSoftwareBitmapAsync(stream, 320, 320, BitmapPixelFormat.Bgra8);
            }

            // Display source image
            var source = new SoftwareBitmapSource();
            await source.SetBitmapAsync(softwareBitmap);

            sourceImage.Source = source;

            // Convert rgba-rgba-...-rgba to bb...b-rr...r-gg...g as colour weighted tensor (0..1)
            TensorFloat input = TensorFloat.CreateFromIterable(new long[] { 1, 3, 320, 320 }, TensorBrg(bytes));

            // Load model & perform inference
            StorageFile modelFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri($"ms-appx:///Assets/u2net.onnx"));

            u2netModel model = await u2netModel.CreateFromStreamAsync(modelFile);

            Stopwatch sw = new Stopwatch();

            sw.Start();
            u2netOutput output = await model.EvaluateAsync(new u2netInput { input = input });

            sw.Stop();

            await ToImage(output.o6, o6);
            await ToImage(output.o5, o5);
            await ToImage(output.o4, o4);
            await ToImage(output.o3, o3);
            await ToImage(output.o2, o2);
            await ToImage(output.o1, o1);

            await ToBlendedImage(bytes, output.o0, targetImage);
        }
Example #2
0
        public async Task <u2netOutput> EvaluateAsync(u2netInput input)
        {
            binding.Bind("input", input.input);
            var result = await session.EvaluateAsync(binding, "0");

            var output = new u2netOutput();

            output.o0 = result.Outputs["o0"] as TensorFloat;
            output.o1 = result.Outputs["o1"] as TensorFloat;
            output.o2 = result.Outputs["o2"] as TensorFloat;
            output.o3 = result.Outputs["o3"] as TensorFloat;
            output.o4 = result.Outputs["o4"] as TensorFloat;
            output.o5 = result.Outputs["o5"] as TensorFloat;
            output.o6 = result.Outputs["o6"] as TensorFloat;
            return(output);
        }