Quantcast
Channel: ppedv Team Blog
Viewing all articles
Browse latest Browse all 1198

Win.ML vs ML.NET

$
0
0

Bei meinen Experimenten (auch so ein Machine Learning Terminus) bin ich über customvision.ai und das exportierte ONNX Model gestolpert. Dort wird C# Code generiert der Windows ML nutzt. Etwas was man in UWP Anwendungen nutzen kann. Eingeführt wurde dies 2018 mit dem Ziel Windows Plattform.

ML.NET ist eine Bibliothek und setzt auf den Cross Plattform Gedanken. Es lassen sich alle mögliche Modelltypen und Programmiersprachen bis hin zu Python einbinden. Ist halt in der Praxis durchaus eine komplexe Sache. Dazu aber in einem anderen Blog Artikel mehr.

In dem ZIP des ONNX Models findet sich eine Datei mit 300 Zeilen C# Code in ObjectDetection.cs. Die kann man samt den Model ganz lässig in ein Visual Studio UWP Projekt kopieren.

UWPONNX1 

In den Eigenschaften von model.onnx unbedingt die Option Kopieren (wenn neuer) auswählen, weil es sonst ohne Model zu einem Laufzeitfehler kommt.

Die UWP App bekommt nur einen Button um einen Fileopen Dialog zu öffnen. Dort wählt Benutzer ein Bild aus um es von der AI bewerten zu lassen. Mein Bild gezeichnet und per Snipp kopiert nicht in bester Qualität.

test

Im C# der Mainpage.xml.cs wird die aus dem Model kopierte (und automatisch generierte) Helperklasse instanziert und die Liste der möglichen Labels gefüllt.

   1:  public MainPage()
   2:    {
   3:  this.InitializeComponent();
   4:        LabelList= new List<string> { "Kreis", "Viereck", "Dreieck" };
   5:    }
   6:  private ObjectDetection onnx;
   7:  private IList<string> LabelList   ;

Die Auswertung erfolgt in meinen UWP Projekt per Debugger. Ist ja nur Windows ML Showcase. Weil eigentlich primäre Aufgabe die Analyse eines Videostreams ist, erwartet die Predict Methode ein Objekt vom Typ Videoframe. Wenn man sich das überlegt genial und genial einfach. UWP war schon cool.

   1:  private async void Button_Click(object sender, RoutedEventArgs e)
   2:    {
   3:        Uri fileUri = new Uri("ms-appx:///model.onnx"); // Pfad zur Datei im App-Paket
   4:        StorageFile sf = await StorageFile.GetFileFromApplicationUriAsync(fileUri);
   5:        onnx = new ObjectDetection(LabelList, 3, 0.3f, 0.45f);
   6:        onnx.Init(sf);
   7:        var picker = new Windows.Storage.Pickers.FileOpenPicker();
   8:        picker.ViewMode = Windows.Storage.Pickers.PickerViewMode.Thumbnail;
   9:        picker.SuggestedStartLocation = Windows.Storage.Pickers.PickerLocationId.DocumentsLibrary;
  10:        picker.FileTypeFilter.Add(".png"); 
  11:        StorageFile file = await picker.PickSingleFileAsync();
  12:  if (file != null)
  13:        {
  14:            var vf =await LoadImageToVideoFrameAsync(file);
  15:           var res= await onnx.PredictImageAsync(vf);

Letztendlich braucht es noch einen Konverter vom Bild zum Videoframe

   1:  public async Task<VideoFrame> LoadImageToVideoFrameAsync(StorageFile file)
   2:  {
   3:  using (IRandomAccessStream stream = await file.OpenAsync(FileAccessMode.Read))
   4:    {
   5:       BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
   6:       SoftwareBitmap softwareBitmap = await decoder.GetSoftwareBitmapAsync();
   7:       VideoFrame videoFrame = VideoFrame.CreateWithSoftwareBitmap(softwareBitmap);
   8:  return videoFrame;
   9:     }
  10:  }

Wenn der Breakpoint Zeile 15 erreicht, sieht man drei erkannte Objekte. Hier den Kreis mit einer Wahrscheinlichkeit von 0,67 und vor allem die genau Position und Größe.

UWPONNX5

Einfacher wird es nicht mehr Machine Learning Funktion in seine Windows Anwendung zu bekommen.


Viewing all articles
Browse latest Browse all 1198

Trending Articles


Vimeo 10.7.1 by Vimeo.com, Inc.


UPDATE SC IDOL: TWO BECOME ONE


KASAMBAHAY BILL IN THE HOUSE


Girasoles para colorear


Presence Quotes – Positive Quotes


EASY COME, EASY GO


Love with Heart Breaking Quotes


Re:Mutton Pies (lleechef)


Ka longiing longsem kaba skhem bad kaba khlain ka pynlong kein ia ka...


Vimeo 10.7.0 by Vimeo.com, Inc.


FORECLOSURE OF REAL ESTATE MORTGAGE


FORTUITOUS EVENT


Pokemon para colorear


Sapos para colorear


Smile Quotes


Letting Go Quotes


Love Song lyrics that marks your Heart


RE: Mutton Pies (frankie241)


Hato lada ym dei namar ka jingpyrshah jong U JJM Nichols Roy (Bah Joy) ngin...


Long Distance Relationship Tagalog Love Quotes