From 474d002983ff555a9a29736c66857a45ba78e949 Mon Sep 17 00:00:00 2001 From: Scott McKay Date: Mon, 25 Jul 2022 15:51:33 +1000 Subject: [PATCH 01/10] Add initial pieces --- .../MauiVisionSample/MauiVisionSample.sln | 27 + .../MauiVisionSample/App.xaml | 14 + .../MauiVisionSample/App.xaml.cs | 11 + .../MauiVisionSample/AppShell.xaml | 14 + .../MauiVisionSample/AppShell.xaml.cs | 9 + .../ExecutionProviderOptions.cs | 11 + .../MauiVisionSample/IImageProcessor.cs | 15 + .../MauiVisionSample/IVisionSample.cs | 16 + .../MauiVisionSample/ImageProcessingResult.cs | 17 + .../MauiVisionSample/MainPage.xaml | 77 ++ .../MauiVisionSample/MainPage.xaml.cs | 288 +++++ .../MauiVisionSample/MauiProgram.cs | 18 + .../MauiVisionSample/MauiVisionSample.csproj | 72 ++ .../Platforms/Android/AndroidManifest.xml | 6 + .../Platforms/Android/MainActivity.cs | 10 + .../Platforms/Android/MainApplication.cs | 22 + .../Android/Resources/values/colors.xml | 6 + .../Platforms/MacCatalyst/AppDelegate.cs | 9 + .../Platforms/MacCatalyst/Info.plist | 30 + .../Platforms/MacCatalyst/Program.cs | 15 + .../MauiVisionSample/Platforms/Tizen/Main.cs | 16 + .../Platforms/Tizen/tizen-manifest.xml | 15 + .../Platforms/Windows/App.xaml | 8 + .../Platforms/Windows/App.xaml.cs | 24 + .../Platforms/Windows/Package.appxmanifest | 44 + .../Platforms/Windows/app.manifest | 15 + .../Platforms/iOS/AppDelegate.cs | 9 + .../MauiVisionSample/Platforms/iOS/Info.plist | 38 + .../MauiVisionSample/Platforms/iOS/Program.cs | 15 + .../MauiVisionSample/PredictionBox.cs | 21 + .../Properties/launchSettings.json | 8 + .../ResNet50v2/ResNetImageProcessor.cs | 55 + .../ResNet50v2/ResNetLabelMap.cs | 1010 +++++++++++++++++ .../ResNet50v2/ResNetPrediction.cs | 11 + .../ResNet50v2/ResNetSample.cs | 75 ++ .../Resources/AppIcon/appicon.svg | 4 + .../Resources/AppIcon/appiconfg.svg | 8 + .../Resources/Fonts/OpenSans-Regular.ttf | Bin 0 -> 107140 bytes .../Resources/Fonts/OpenSans-Semibold.ttf | Bin 0 -> 111048 bytes .../Resources/Raw/AboutAssets.txt | 15 + .../MauiVisionSample/Resources/Raw/dog.jpg | Bin 0 -> 6888 bytes .../MauiVisionSample/Resources/Raw/satya.jpg | Bin 0 -> 95137 bytes .../Resources/Splash/splash.svg | 8 + .../Resources/Styles/Colors.xaml | 44 + .../Resources/Styles/Styles.xaml | 384 +++++++ .../SkiaSharpImageProcessor.cs | 86 ++ .../MauiVisionSample/SkiaSharpUtils.cs | 79 ++ .../Ultraface/UltrafaceImageProcessor.cs | 61 + .../Ultraface/UltrafacePrediction.cs | 11 + .../Ultraface/UltrafaceSample.cs | 68 ++ .../MauiVisionSample/Utils.cs | 13 + .../MauiVisionSample/VisionSampleBase.cs | 94 ++ 52 files changed, 2926 insertions(+) create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample.sln create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/App.xaml create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/App.xaml.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/AppShell.xaml create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/AppShell.xaml.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/ExecutionProviderOptions.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/IImageProcessor.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/IVisionSample.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/ImageProcessingResult.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/MainPage.xaml create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/MainPage.xaml.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/MauiProgram.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/MauiVisionSample.csproj create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/Android/AndroidManifest.xml create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/Android/MainActivity.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/Android/MainApplication.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/Android/Resources/values/colors.xml create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/MacCatalyst/AppDelegate.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/MacCatalyst/Info.plist create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/MacCatalyst/Program.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/Tizen/Main.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/Tizen/tizen-manifest.xml create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/Windows/App.xaml create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/Windows/App.xaml.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/Windows/Package.appxmanifest create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/Windows/app.manifest create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/iOS/AppDelegate.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/iOS/Info.plist create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Platforms/iOS/Program.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/PredictionBox.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Properties/launchSettings.json create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/ResNet50v2/ResNetImageProcessor.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/ResNet50v2/ResNetLabelMap.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/ResNet50v2/ResNetPrediction.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/ResNet50v2/ResNetSample.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Resources/AppIcon/appicon.svg create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Resources/AppIcon/appiconfg.svg create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Resources/Fonts/OpenSans-Regular.ttf create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Resources/Fonts/OpenSans-Semibold.ttf create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Resources/Raw/AboutAssets.txt create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Resources/Raw/dog.jpg create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Resources/Raw/satya.jpg create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Resources/Splash/splash.svg create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Resources/Styles/Colors.xaml create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Resources/Styles/Styles.xaml create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/SkiaSharpImageProcessor.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/SkiaSharpUtils.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Ultraface/UltrafaceImageProcessor.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Ultraface/UltrafacePrediction.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Ultraface/UltrafaceSample.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/Utils.cs create mode 100644 mobile/examples/Maui/MauiVisionSample/MauiVisionSample/VisionSampleBase.cs diff --git a/mobile/examples/Maui/MauiVisionSample/MauiVisionSample.sln b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample.sln new file mode 100644 index 000000000..afe383e14 --- /dev/null +++ b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample.sln @@ -0,0 +1,27 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.0.31611.283 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "MauiVisionSample", "MauiVisionSample\MauiVisionSample.csproj", "{B181D00F-FFC0-489C-A59B-27665CD58015}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {B181D00F-FFC0-489C-A59B-27665CD58015}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B181D00F-FFC0-489C-A59B-27665CD58015}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B181D00F-FFC0-489C-A59B-27665CD58015}.Debug|Any CPU.Deploy.0 = Debug|Any CPU + {B181D00F-FFC0-489C-A59B-27665CD58015}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B181D00F-FFC0-489C-A59B-27665CD58015}.Release|Any CPU.Build.0 = Release|Any CPU + {B181D00F-FFC0-489C-A59B-27665CD58015}.Release|Any CPU.Deploy.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {61F7FB11-1E47-470C-91E2-47F8143E1572} + EndGlobalSection +EndGlobal diff --git a/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/App.xaml b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/App.xaml new file mode 100644 index 000000000..a5e3f56e5 --- /dev/null +++ b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/App.xaml @@ -0,0 +1,14 @@ + + + + + + + + + + + diff --git a/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/App.xaml.cs b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/App.xaml.cs new file mode 100644 index 000000000..d35e96edf --- /dev/null +++ b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/App.xaml.cs @@ -0,0 +1,11 @@ +namespace MauiVisionSample; + +public partial class App : Application +{ + public App() + { + InitializeComponent(); + + MainPage = new AppShell(); + } +} diff --git a/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/AppShell.xaml b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/AppShell.xaml new file mode 100644 index 000000000..8aee3ef57 --- /dev/null +++ b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/AppShell.xaml @@ -0,0 +1,14 @@ + + + + + + diff --git a/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/AppShell.xaml.cs b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/AppShell.xaml.cs new file mode 100644 index 000000000..c2cd6a274 --- /dev/null +++ b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/AppShell.xaml.cs @@ -0,0 +1,9 @@ +namespace MauiVisionSample; + +public partial class AppShell : Shell +{ + public AppShell() + { + InitializeComponent(); + } +} diff --git a/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/ExecutionProviderOptions.cs b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/ExecutionProviderOptions.cs new file mode 100644 index 000000000..c23ace2c3 --- /dev/null +++ b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/ExecutionProviderOptions.cs @@ -0,0 +1,11 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace MauiVisionSample +{ + public enum ExecutionProviderOptions + { + CPU, + Platform + } +} \ No newline at end of file diff --git a/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/IImageProcessor.cs b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/IImageProcessor.cs new file mode 100644 index 000000000..a14f8b343 --- /dev/null +++ b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/IImageProcessor.cs @@ -0,0 +1,15 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Collections.Generic; +using Microsoft.ML.OnnxRuntime.Tensors; + +namespace MauiVisionSample +{ + public interface IImageProcessor + { + TImage PreprocessSourceImage(byte[] sourceImage); + Tensor GetTensorForImage(TImage image); + byte[] ApplyPredictionsToImage(IList predictions, TImage image); + } +} \ No newline at end of file diff --git a/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/IVisionSample.cs b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/IVisionSample.cs new file mode 100644 index 000000000..cce40b4c6 --- /dev/null +++ b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/IVisionSample.cs @@ -0,0 +1,16 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +using System.Threading.Tasks; + +namespace MauiVisionSample +{ + public interface IVisionSample + { + string Name { get; } + string ModelName { get; } + Task InitializeAsync(); + Task UpdateExecutionProviderAsync(ExecutionProviderOptions executionProvider); + Task ProcessImageAsync(byte[] image); + } +} diff --git a/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/ImageProcessingResult.cs b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/ImageProcessingResult.cs new file mode 100644 index 000000000..5483f3fbd --- /dev/null +++ b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/ImageProcessingResult.cs @@ -0,0 +1,17 @@ +// Copyright (c) Microsoft Corporation. All rights reserved. +// Licensed under the MIT License. + +namespace MauiVisionSample +{ + public class ImageProcessingResult + { + public byte[] Image { get; private set; } + public string Caption { get; private set; } + + internal ImageProcessingResult(byte[] image, string caption = null) + { + Image = image; + Caption = caption; + } + } +} \ No newline at end of file diff --git a/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/MainPage.xaml b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/MainPage.xaml new file mode 100644 index 000000000..226ce8012 --- /dev/null +++ b/mobile/examples/Maui/MauiVisionSample/MauiVisionSample/MainPage.xaml @@ -0,0 +1,77 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + +