Aracılığıyla paylaş


Windows Machine Learning API'leri ile ML.NET modelinizi bir Windows uygulamasında dağıtma

Bu öğreticinin önceki bölümünde, ONNX biçiminde bir ML.NET modeli oluşturmayı ve dışarı aktarmayı öğrendiniz. Artık bu modeli kullandığınıza göre, WinML API'lerini çağırarak bir Windows uygulamasına ekleyebilir ve bir cihazda yerel olarak çalıştırabilirsiniz.

İşiniz bittiğinde çalışan bir Görüntü sınıflandırıcısı WinML UWP uygulamasına (C#) sahip olacaksınız.

Örnek uygulama hakkında

Modelimizi kullanarak yiyecek görüntülerini sınıflandırabilen bir uygulama oluşturacağız. Yerel cihazınızdan bir görüntü seçmenize ve önceki bölümde oluşturup eğitmiş olduğunuz yerel olarak depolanan bir sınıflandırma ONNX modeliyle işlemenize olanak tanır. Döndürülen etiketler görüntünün yanında ve sınıflandırmanın olasılık olasılığıyla birlikte görüntülenir.

Bu öğreticiyi şu ana kadar takip ediyorsanız, uygulama geliştirme için gerekli önkoşullara zaten sahip olmanız gerekir. Eğer bir hatırlatmaya ihtiyacınız varsa, bu öğreticinin ilk bölümüne bakabilirsiniz.

Uyarı

Örnek kodun tamamını indirmeyi tercih ederseniz çözüm dosyasını kopyalayabilirsiniz. Depoyu kopyalayın, bu örneğe gidin ve dosyayı Visual Studio ile açın classifierMLNETModel.sln . Ardından [Uygulamayı başlat](uygulamayı #Launch) adımına atlayabilirsiniz.

WinML UWP oluşturma (C#)

Aşağıda, uygulamanızı ve WinML kodunuzu sıfırdan nasıl oluşturabileceğinizi göstereceğiz. Nasıl yapılacağını öğreneceksiniz:

  • Makine öğrenmesi modeli yükleme.
  • Görüntüyü gerekli biçimde yükleyin.
  • Modelin girişlerini ve çıkışlarını bağlayın.
  • Modeli değerlendirin ve anlamlı sonuçlar görüntüleyin.

Ayrıca basit bir GUI oluşturmak için temel XAML'yi kullanarak görüntü sınıflandırıcısını test edebilirsiniz.

Uygulamayı oluşturma

  1. Visual Studio'yu açın ve öğesini seçin create a new project.

Yeni bir Visual Studio projesi oluşturma

  1. Arama çubuğuna yazın UWP ve ardından öğesini seçin Blank APP (Universal Windows. Bu, önceden tanımlanmış denetimleri veya düzeni olmayan tek sayfalı Evrensel Windows Platformu (UWP) uygulaması için yeni bir C# projesi açar. Proje için bir yapılandırma penceresi açmak için seçin Next .

UWP uygulaması oluşturma

  1. Yapılandırma penceresinde:
  • Projeniz için bir ad seçin. Burada , classifierMLNETModel kullanıyoruz.
  • Projenizin konumunu seçin.
  • VS 2019 kullanıyorsanız, Place solution and project in the same directory seçeneğinin işaretli olmadığından emin olun.
  • VS 2017 kullanıyorsanız işaretli olduğundan emin olun Create directory for solution .

Uygulamanızı yapılandırma

Projenizi oluşturmak için basın create . Minimum hedef sürüm penceresi açılabilir. En düşük sürümünüzün Windows 10 derleme 17763 veya üzeri olarak ayarlandığından emin olun.

Uygulama oluşturmak ve WinML uygulamasıyla model dağıtmak için aşağıdakilere ihtiyacınız vardır:

  1. Proje oluşturulduktan sonra proje klasörüne gidin, [.\classifierMLNETModel\Assets] assets klasörünü açın ve dosyanızı bestModel.onnx bu konuma kopyalayın.

Proje çözümünü keşfetme

Şimdi proje çözümünüzü inceleyelim.

Visual Studio, Çözüm Gezgini'nin içinde otomatik olarak birkaç cs-code dosyası oluşturmuştur. MainPage.xaml GUI'nizin XAML kodunu ve MainPage.xaml.cs uygulama kodunuzu içerir. Daha önce bir UWP uygulaması oluşturduysanız, bu dosyalar size çok tanıdık geliyor olmalıdır.

Uygulama GUI'sini oluşturma

İlk olarak uygulamanız için basit bir GUI oluşturalım.

  1. Dosyaya MainPage.xaml çift tıklayın. Boş uygulamanızda uygulamanızın GUI'sinin XAML şablonu boş olduğundan bazı kullanıcı arabirimi özellikleri eklememiz gerekir.

  2. kodunu MainPage.xaml aşağıdakilerle değiştirin.

<Page
    x:Class="classifierMLNETModel.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="using:classifierMLNETModel"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
    mc:Ignorable="d"
    Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

       <Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">

	
        <StackPanel Margin="1,0,-1,0">
            <TextBlock x:Name="Menu" 
                       FontWeight="Bold" 
                       TextWrapping="Wrap"
                       Margin="10,0,0,0"
                       Text="Image Classification"/>
            <TextBlock Name="space" />
            <Button Name="recognizeButton"
                    Content="Pick Image"
                    Click="OpenFileButton_Click" 
                    Width="110"
                    Height="40"
                    IsEnabled="True" 
                    HorizontalAlignment="Left"/>
            <TextBlock Name="space3" />
            <Button Name="Output"
                    Content="Result is:"
                    Width="110"
                    Height="40"
                    IsEnabled="True" 
                    HorizontalAlignment="Left" 
                    VerticalAlignment="Top">
            </Button>
            <!--Dispaly the Result-->
            <TextBlock Name="displayOutput" 
                       FontWeight="Bold" 
                       TextWrapping="Wrap"
                       Margin="25,0,0,0"
                       Text="" Width="1471" />
            <TextBlock Name="space2" />
            <!--Image preview -->
            <Image Name="UIPreviewImage" Stretch="Uniform" MaxWidth="300" MaxHeight="300"/>
        </StackPanel>
    </Grid> 
</Page>

Windows Machine Learning Kod Oluşturucusu'nu kullanarak modeli projeye ekleme

Windows Machine Learning Kod Oluşturucusu veya mlgen, UWP uygulamalarında WinML API'lerini kullanmaya başlamanıza yardımcı olan bir Visual Studio uzantısıdır. UWP projesine eğitilmiş bir ONNX dosyası eklediğinizde şablon kodu oluşturur.

Windows Machine Learning'in kod oluşturucu mlgen'i, sizin için Windows ML API'sini çağıran sarmalayıcı sınıflarıyla bir arabirim (C#, C++/WinRT ve C++/CX için) oluşturur. Bu sayede projenizdeki bir modeli kolayca yükleyebilir, bağlayabilir ve değerlendirebilirsiniz. Bu öğreticide bu işlevlerin çoğunu bizim için işlemek için kullanacağız.

Kod oluşturucu, Visual Studio 2017 ve sonraki sürümlerde kullanılabilir. Windows 10, sürüm 1903 ve sonraki sürümlerde mlgen'in artık Windows 10 SDK'sında bulunmadığını, bu nedenle uzantıyı indirip yüklemeniz gerektiğini unutmayın. Bu öğreticiyi giriş bölümünden takip ediyorsanız, bunu zaten halletmiş olursunuz, ancak değilse VS 2019 veya VS 2017 için indirmeniz gerekecek.

Uyarı

mlgen hakkında daha fazla bilgi edinmek için lütfen mlgen belgelerine bakın

  1. Henüz yüklemediyseniz mlgen'i yükleyin.

  2. Visual Studio'da Assets Çözüm Gezgini'nde klasöre sağ tıklayın ve öğesini seçin Add > Existing Item.

  3. içindeki ImageClassifierAppUWP [….\ImageClassifierAppUWP\Assets]varlıklar klasörüne gidin, daha önce buraya kopyaladığınız ONNX modelini bulun ve öğesini seçin add.

  4. VS'de çözüm gezginindeki assets klasörüne bir ONNX modeli ("ad: "sınıflandırıcı") ekledikten sonra projede artık iki yeni dosya olmalıdır:

  • bestModel.onnx - bu, ONNX biçimindeki modelinizdir.
  • bestModel.cs – otomatik olarak oluşturulan WinML kod dosyası.

ONNX modeli eklenmiş proje yapısı

  1. Modelin derlendiğinden emin olmak için bestModel.onnx dosyasını seçin ve Properties seçin. Build Action için Content öğesini seçin.

Şimdi dosyada bestModel.cs yeni oluşturulan kodu inceleyelim.

Oluşturulan kod üç sınıf içerir:

  • bestModelModel: Bu sınıf, model örneği oluşturma ve model değerlendirmesi için iki yöntem içerir. Makine öğrenmesi modeli gösterimini oluşturmamıza, sistem varsayılan cihazında oturum oluşturmamıza, belirli giriş ve çıkışları modele bağlamamıza ve modeli zaman uyumsuz olarak değerlendirmemize yardımcı olur.
  • bestModelInput: Bu sınıf, modelin beklediği giriş türlerini başlatır. Model girişi, giriş verilerinin model gereksinimlerine bağlıdır.
  • bestModelOutput: Bu sınıf, modelin çıkış yapacağı türleri başlatır. Model çıkışı, model tarafından nasıl tanımlandığına bağlıdır.

Şimdi projemizdeki modeli yüklemek, bağlamak ve değerlendirmek için bu sınıfları kullanacaksınız.

Tensor dönüştürme

Tensorizasyon ile ilgilenmeyi kolaylaştırmak için, giriş TensorFloat sınıfını ImageFeatureValue olarak değiştirin.

  1. Dosyada bestModel.cs aşağıdaki değişiklikleri yapın:

Kod:

public sealed class bestModelInput
    {
        public TensorFloat input; // shape(-1,3,32,32)
    }

Şu hale gelir:

public sealed class bestModelInput
    {
        public ImageFeatureValue input; // shape(-1,3,32,32)
    }

Modeli ve girişleri yükleme

Modeli yükleme

  1. Uygulama kodunu açmak için kod dosyasına çift tıklayın MainPage.xaml.cs .

  2. İhtiyacınız olan tüm API'lere erişim elde etmek için "using" deyimlerini aşağıdakilerle değiştirin.

// Specify all the using statements which give us the access to all the APIs that you'll need
using System;
using System.Threading.Tasks;
using Windows.AI.MachineLearning;
using Windows.Graphics.Imaging;
using Windows.Media;
using Windows.Storage;
using Windows.Storage.Pickers;
using Windows.Storage.Streams;
using Windows.UI.Xaml;
using Windows.UI.Xaml.Controls;
using Windows.UI.Xaml.Media.Imaging;
  1. Aşağıdaki değişken bildirimlerini using deyimlerinden sonra sınıfınızın MainPage içinde, ad alanının classifierMLNETModel altına ekleyin.
		// All the required fields declaration
		private bestModelModel modelGen;
		private bestModelInput image = new bestModelInput();
		private bestModelOutput results;
		private StorageFile selectedStorageFile;
		private string label = "";
		private float probability = 0;
		private Helper helper = new Helper();

		public enum Labels
		{
			desert,
			soup,
			vegetable_fruit,
		}

Şimdi LoadModel yöntemini uygulayacaksınız. yöntemi ONNX modeline erişip bellekte depolar. Ardından, modeli bir CreateFromStreamAsync nesne olarak oluşturmak için LearningModel yöntemini kullanacaksınız. LearningModel sınıfı eğitilmiş bir makine öğrenmesi modelini temsil eder. Örneklemi oluşturulduğunda, LearningModel Windows ML ile etkileşim kurmak için kullandığınız ilk nesneyi oluşturur.

Modeli yüklemek için sınıfında birkaç statik yöntem LearningModel kullanabilirsiniz. Bu durumda CreateFromStreamAsync yöntemini kullanacaksınız.

CreateFromStreamAsync yöntemi mlgen ile otomatik olarak oluşturulmuştur, bu nedenle bu yöntemi uygulamanız gerekmez. Mlgen tarafından oluşturulan dosyaya bestModel.cs çift tıklayarak bu yöntemi gözden geçirebilirsiniz.

Sınıf hakkında LearningModel daha fazla bilgi edinmek için lütfen LearningModel Sınıfı belgelerini gözden geçirin.

Modeli yüklemenin ek yolları hakkında daha fazla bilgi edinmek için lütfen Model yükleme belgelerini gözden geçirin

  1. Şimdi ana yöntemi tanımlayalım.
// The main page to initialize and execute the model.
public MainPage()
{
	this.InitializeComponent();
	loadModel();
}
  1. loadModel yönteminin uygulamasını MainPage.xaml.cs sınıfı içindeki MainPage kod dosyanıza ekleyin.
private async Task loadModel()
{
// Get an access the ONNX model and save it in memory. 
	StorageFile modelFile = await StorageFile.GetFileFromApplicationUriAsync(new Uri($"ms-appx:///Assets/bestModel.onnx"));
// Instantiate the model. 
	modelGen = await bestModelModel.CreateFromStreamAsync(modelFile);
}

Görüntüyü Yükleme

  1. Model yürütme için dört yöntem çağrısı sırasını başlatmak için bir tıklama olayı tanımlamamız gerekir: dönüştürme, bağlama ve değerlendirme, çıkış ayıklama ve sonuçları görüntüleme. Aşağıdaki metodu MainPage.xaml.cs sınıfının içindeki MainPage kod dosyanıza ekleyin.
        // Waiting for a click event to select a file 
        private async void OpenFileButton_Click(object sender, RoutedEventArgs e)
        {
            if (!await getImage())
            {
                return;
            }
            // After the click event happened and an input selected, begin the model execution. 
            // Bind the model input
            await imageBind();
            // Model evaluation
            await evaluate();
            // Extract the results
            extractResult();
            // Display the results  
            await displayResult();
        }
  1. Şimdi getImage() yöntemini uygulayacaksınız. Bu yöntem bir giriş görüntüsü dosyası seçip belleğe kaydeder. Aşağıdaki metodu MainPage.xaml.cs sınıfının içindeki MainPage kod dosyanıza ekleyin.
        // A method to select an input image file
        private async Task<bool> getImage()
        {
            try
            {
                // Trigger file picker to select an image file
                FileOpenPicker fileOpenPicker = new FileOpenPicker();
                fileOpenPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
                fileOpenPicker.FileTypeFilter.Add(".jpg");
                fileOpenPicker.FileTypeFilter.Add(".png");
                fileOpenPicker.ViewMode = PickerViewMode.Thumbnail;
                selectedStorageFile = await fileOpenPicker.PickSingleFileAsync();
                if (selectedStorageFile == null)
                {
                    return false;
                }
            }
            catch (Exception)
            {
                return false;
            }
            return true;
        }

Ardından, dosyanın bit eşlem BGRA8 biçiminde gösterimini almak için bir görüntü Bind() yöntemi uygulayacaksınız. Ancak önce görüntüyü yeniden boyutlandırmak için bir yardımcı sınıf oluşturacaksınız.

  1. Yardımcı bir dosya oluşturmak için, çözümün adına sağ tıklayın (ClassifierPyTorch) ve Add a new item öğesini seçin. Açık pencerede seçin Class ve bir ad verin. Burada, adını Helperdiyoruz.

Yardımcı dosyası ekleme

  1. Projenizde yeni bir sınıf dosyası görüntülenir. Bu sınıfı açın ve aşağıdaki kodu ekleyin:
using System; 
using System.Threading.Tasks; 
using Windows.Graphics.Imaging; 
using Windows.Media; 

namespace classifierPyTorch 
{ 
    public class Helper 
    { 
        private const int SIZE = 32;  
        VideoFrame cropped_vf = null; 
 
        public async Task<VideoFrame> CropAndDisplayInputImageAsync(VideoFrame inputVideoFrame) 
        { 
            bool useDX = inputVideoFrame.SoftwareBitmap == null; 

            BitmapBounds cropBounds = new BitmapBounds(); 
            uint h = SIZE; 
            uint w = SIZE; 
            var frameHeight = useDX ? inputVideoFrame.Direct3DSurface.Description.Height : inputVideoFrame.SoftwareBitmap.PixelHeight; 
            var frameWidth = useDX ? inputVideoFrame.Direct3DSurface.Description.Width : inputVideoFrame.SoftwareBitmap.PixelWidth; 
 
            var requiredAR = ((float)SIZE / SIZE); 
            w = Math.Min((uint)(requiredAR * frameHeight), (uint)frameWidth); 
            h = Math.Min((uint)(frameWidth / requiredAR), (uint)frameHeight); 
            cropBounds.X = (uint)((frameWidth - w) / 2); 
            cropBounds.Y = 0; 
            cropBounds.Width = w; 
            cropBounds.Height = h; 
 
            cropped_vf = new VideoFrame(BitmapPixelFormat.Bgra8, SIZE, SIZE, BitmapAlphaMode.Ignore); 
 
            await inputVideoFrame.CopyToAsync(cropped_vf, cropBounds, null); 
            return cropped_vf; 
        } 
    } 
} 

Şimdi görüntüyü uygun biçime dönüştürelim.

sınıfı, bestModelInput modelin beklediği giriş türlerini başlatır. Bizim örneğimizde kodumuzu bir ImageFeatureValuebekleyebileceğiniz şekilde yapılandırdık.

ImageFeatureValue sınıfı, bir modeli geçirmek amacıyla kullanılan görüntünün özelliklerini açıklar. Bir ImageFeatureValue oluşturmak için CreateFromVideoFrame yöntemini kullanırsınız. Bunun neden böyle olduğu ve bu sınıfların ve yöntemlerin nasıl çalıştığı hakkında daha ayrıntılı bilgi için ImageFeatureValue sınıf belgelerine bakın.

Uyarı

Bu öğreticide, bir tensör yerine ImageFeatureValue sınıfını kullanacağız. Window ML modelinizin renk biçimini desteklemiyorsa, bu bir seçenek olmayacaktır. Görüntü dönüştürmeleri ve tensorizasyon ile çalışma örneği için bkz. Özel Tensorizasyon Örneği.

  1. MainPage sınıfı içindeki convert() kod dosyanıza, MainPage.xaml.cs yönteminin uygulamasını ekleyin. dönüştürme yöntemi, giriş dosyasının BGRA8 biçiminde bir gösterimini alır.
// A method to convert and bind the input image.  
        private async Task imageBind()
        {
            UIPreviewImage.Source = null;
            try
            {
                SoftwareBitmap softwareBitmap;
                using (IRandomAccessStream stream = await selectedStorageFile.OpenAsync(FileAccessMode.Read))
                {
                    // Create the decoder from the stream 
                    BitmapDecoder decoder = await BitmapDecoder.CreateAsync(stream);
                    // Get the SoftwareBitmap representation of the file in BGRA8 format
                    softwareBitmap = await decoder.GetSoftwareBitmapAsync();
                    softwareBitmap = SoftwareBitmap.Convert(softwareBitmap, BitmapPixelFormat.Bgra8, BitmapAlphaMode.Premultiplied);
                }
                // Display the image
                SoftwareBitmapSource imageSource = new SoftwareBitmapSource();
                await imageSource.SetBitmapAsync(softwareBitmap);
                UIPreviewImage.Source = imageSource;

				// Encapsulate the image within a VideoFrame to be bound and evaluated
            	VideoFrame inputImage = VideoFrame.CreateWithSoftwareBitmap(softwareBitmap);
              	// Resize the image size to 224x224 
              	inputImage=await helper.CropAndDisplayInputImageAsync(inputImage);
              	// Bind the model input with image
              	ImageFeatureValue imageTensor = ImageFeatureValue.CreateFromVideoFrame(inputImage);
				image.input1 = imageTensor;

				// Encapsulate the image within a VideoFrame to be bound and evaluated
				VideoFrame inputImage = VideoFrame.CreateWithSoftwareBitmap(softwareBitmap);
				// Bind the input image
				ImageFeatureValue imageTensor = ImageFeatureValue.CreateFromVideoFrame(inputImage);
				image.modelInput = imageTensor;

            }
            catch (Exception e)
            {
            }
        }

Modeli bağlama ve değerlendirme

Ardından modeli temel alan bir oturum oluşturacak, oturumdaki girişi ve çıkışı bağlayacak ve modeli değerlendireceksiniz.

Modeli bağlamak için bir oturum oluşturun:

Oturum oluşturmak için sınıfını LearningModelSession kullanırsınız. Bu sınıf makine öğrenmesi modellerini değerlendirmek için kullanılır ve modeli çalıştıran ve modeli değerlendiren bir cihaza bağlar. Modelinizi makinenizin belirli bir cihazında yürütmek için bir oturum oluşturduğunuzda bir cihaz seçebilirsiniz. Varsayılan cihaz CPU'dur.

Uyarı

Cihaz seçme hakkında daha fazla bilgi edinmek için lütfen Oturum oluşturma belgelerini gözden geçirin.

Model girişlerini ve çıkışlarını bağlama:

Giriş ve çıkış bağlamak için sınıfını LearningModelBinding kullanırsınız. Makine öğrenmesi modeli, bilgileri modele aktaran ve modelden dışarı aktaran giriş ve çıkış özelliklerine sahiptir. Gerekli özelliklerin Window ML API'leri tarafından desteklenmesi gerektiğini unutmayın. LearningModelBinding sınıfı, değerleri adlandırılmış giriş ve çıkış özelliklerine bağlamak için LearningModelSession öğesine uygulanır.

Bağlamanın uygulanması mlgen tarafından otomatik olarak oluşturulur, bu nedenle bununla ilgilenmeniz gerekmez. Bağlama, sınıfının önceden tanımlanmış yöntemleri LearningModelBinding çağrılarak uygulanır. Bizim örneğimizde, adlandırılmış özellik türüne bir değer bağlamak için yöntemini kullanır Bind .

Modeli değerlendirme:

Modeli ve sınırlanmış değerleri modelin girişlerine ve çıkışlarına bağlamak için bir oturum oluşturduktan sonra modelin girişlerini değerlendirebilir ve tahminlerini alabilirsiniz. Model yürütmeyi çalıştırmak için LearningModelSession üzerinde önceden tanımlanmış değerlendirme yöntemlerinden herhangi birini çağırmanız gerekir. Bizim örneğimizde yöntemini kullanacağız EvaluateAsync .

yöntemine benzer şekilde CreateFromStreamAsyncEvaluateAsync WinML Kod Oluşturucu tarafından da otomatik olarak oluşturulmuştur, bu nedenle bu yöntemi uygulamanız gerekmez. Dosyada bestModel.cs bu yöntemi gözden geçirebilirsiniz.

Yöntemi, EvaluateAsync bağlamalara bağlı olan özellik değerlerini kullanarak makine öğrenmesi modelini asenkron olarak değerlendirir. LearningModelSession ile bir oturum oluşturur, girişi ve çıkışı LearningModelBinding ile bağlar, model değerlendirmesini yürütür ve LearningModelEvaluationResult sınıfını kullanarak modelin çıkış özelliklerini alır.

Uyarı

Modeli çalıştırmaya yönelik diğer değerlendirme yöntemleri hakkında bilgi edinmek için LearningModelSession Sınıfı belgelerini gözden geçirerek LearningModelSession'da hangi yöntemlerin uygulanabileceğini denetleyin.

  1. MainPage sınıfındaki kod dosyanıza MainPage.xaml.cs aşağıdaki yöntemi ekleyerek bir oturum oluşturun, modeli bağlayın ve değerlendirin.
        // A method to evaluate the model
        private async Task evaluate()
        {
            results = await modelGen.EvaluateAsync(image);
        }

Sonuçları ayıklama ve görüntüleme

Şimdi model çıkışını ayıklamanız ve extractResult ve displayResult yöntemlerini uygulayarak doğru sonucu görüntülemeniz gerekiyor. Doğru etiketi döndürmek için en yüksek olasılığı bulmanız gerekir.

  1. extractResult yöntemini MainPage.xaml.cs sınıfının içindeki MainPage kod dosyasına ekleyin.
        // A method to extract output from the model 
        private void extractResult()
        {
            // Retrieve the results of evaluation
            var mResult = results.modelOutput as TensorFloat;
            // convert the result to vector format
            var resultVector = mResult.GetAsVectorView();
            
            probability = 0;
            int index = 0;
            // find the maximum probability
            for(int i=0; i<resultVector.Count; i++)
            {
                var elementProbability=resultVector[i];
                if (elementProbability > probability)
                {
                    index = i;
                }
            }
            label = ((Labels)index).ToString();
        }
  1. displayResult yöntemini MainPage.xaml.cs sınıfının içindeki MainPage kod dosyasına ekleyin.
        private async Task displayResult() 
        {
            displayOutput.Text = label; 
        }

Bu kadar! Sınıflandırma modelimizi test etmek için temel bir GUI ile Windows makine öğrenmesi uygulamasını başarıyla oluşturdunuz. Sonraki adım uygulamayı başlatmak ve Windows cihazınızda yerel olarak çalıştırmaktır.

Uygulamayı başlatma

Uygulama arabirimini tamamladıktan, modeli ekledikten ve Windows ML kodunu oluşturduktan sonra uygulamayı test edebilirsiniz!

Visual Studio'dan geliştirici modunu etkinleştirin ve uygulamanızı test edin. Üst araç çubuğundaki açılan menülerin Debug olarak ayarlandığından emin olun. Cihazınız 64 bitse projeyi yerel makinenizde çalıştırmak için Çözüm Platformu'nun x64, 32 bit ise x86 olarak değiştirin.

Uygulamamızı test etmek için aşağıdaki çorba görüntüsünü kullanalım. Şimdi uygulamamızın görüntünün içeriğini nasıl sınıflandırır görelim.

Uygulama testi görüntüsü

  1. Uygulamayı test etmek için bu görüntüyü yerel cihazınıza kaydedin. Gerekirse görüntü biçimini olarak .jpg değiştirin. Ayrıca, yerel cihazınızdan .jpg.png veya biçimindeki diğer ilgili görüntüleri de ekleyebilirsiniz.

  2. Projeyi çalıştırmak için araç çubuğundaki düğmeyi Start Debugging seçin veya tuşuna basın F5.

  3. Uygulama başladığında, Pick Image tuşuna basın ve yerel cihazınızdan görüntüyü seçin.

Uygulama arabirimi

Sonuç hemen ekranda görünür. Gördüğünüz gibi, Windows ML uygulamamız görüntüyü başarıyla çorba olarak sınıflandırdı.

Uygulamanızda başarılı sınıflandırma

Özet

Model oluşturma aşamasından başarılı yürütmeye kadar ilk Windows Machine Learning uygulamanızı yaptınız.

Ek Kaynaklar

Bu öğreticide bahsedilen konular hakkında daha fazla bilgi edinmek için aşağıdaki kaynakları ziyaret edin: