Electron için WinML eklentisi oluşturma

Bu kılavuzda, Electron uygulamanızda Windows Machine Learning (WinML) kullanan bir C# yerel eklentisinin nasıl oluşturulacağı gösterilmektedir. WinML, görüntü sınıflandırma, nesne algılama ve daha fazlası gibi görevler için windows cihazlarında machine learning modelleri (ONNX biçimi) yerel olarak çalıştırmanızı sağlar.

Önkoşullar

Uyarı

WinML herhangi bir Windows 10 (1809+) veya Windows 11 cihazda çalışır. En iyi performans için GPU'ları veya NPU'ları olan cihazlar önerilir, ancak API de CPU üzerinde çalışır.

1. Adım: C# yerel eklentisi oluşturma

npx winapp node create-addon --template cs --name winMlAddon

Windows SDK ve Windows App SDK başvuruları ile yapılandırılmış bir C# projesi içeren bir winMlAddon/ klasörü oluşturur.

Eklentiyi oluşturun:

npm run build-winMlAddon

2. Adım: SqueezeNet modelini indirme

  1. Yapay Zeka Geliştirme Galerisi'ni yükleme
  2. Görüntüyü Sınıflandır örneğine gidin
  3. SqueezeNet 1.1 modelini indirme
  4. .onnx dosyasını project kökünüzdeki bir models/ klasörüne kopyalayın

3. Adım: Gerekli NuGet paketlerini ekleme

Proje kökünüzde Directory.packages.props güncelleyin.

<PackageVersion Include="Microsoft.ML.OnnxRuntime.Extensions" Version="0.14.0" />
<PackageVersion Include="System.Drawing.Common" Version="9.0.9" />

winMlAddon/winMlAddon.csproj'yi paket başvurularını eklemek için güncelleştirin.

<PackageReference Include="Microsoft.ML.OnnxRuntime.Extensions" />
<PackageReference Include="System.Drawing.Common" />

4. Adım: Örnek kodu ekleme

AI Geliştirme Galerisi, SqueezeNet ile görüntü sınıflandırması için tam uygulama sağlar. Uyarlanmış kodu electron-winml örneğinde bulabilirsiniz.

Örnekten winMlAddon/ klasörü kopyalayın veya örnek kodla el ile güncelleştirin winMlAddon/addon.cs .

Önemli uygulama ayrıntıları

Project kök yolu: Eklenti, ONNX modelini ve yerel bağımlılıkları bulabilmesi için JavaScript kodunun project kök yolunu geçirmesini gerektirir.

Yerel bağımlılıkları önceden yükleme: Eklenti, hem geliştirme hem de üretim senaryolarında çalışan gerekli DLL'leri yüklemek için bir yöntem içerir.

Electron Forge yapılandırması: Paketleyicinizi yerel dosyaların paketini açmak için yapılandırın:

module.exports = {
  packagerConfig: {
    asar: {
      unpack: "**/*.{dll,exe,node,onnx}"
    },
    ignore: [
      /^\/.winapp\//,
      "\\.msix$",
      /^\/winMlAddon\/(?!dist).+/
    ]
  },
};

5. Adım: Eklentiyi oluşturma

npm run build-winMlAddon

6. Adım: Eklentiyi test edin

Eklentiyi açın src/index.js ve yükleyin:

const winMlAddon = require('../winMlAddon/dist/winMlAddon.node');

Test işlevi ekleyin:

const testWinML = async () => {
  try {
    let projectRoot = path.join(__dirname, '..');
    if (projectRoot.includes('app.asar')) {
      projectRoot = projectRoot.replace('app.asar', 'app.asar.unpacked');
    }

    const addon = await winMlAddon.Addon.createAsync(projectRoot);
    console.log('Model loaded successfully!');

    const imagePath = path.join(projectRoot, 'test-images', 'sample.jpg');
    const predictions = await addon.classifyImage(imagePath);

    console.log('Top predictions:');
    predictions.slice(0, 5).forEach((pred, i) => {
      console.log(`${i + 1}. ${pred.label}: ${(pred.confidence * 100).toFixed(2)}%`);
    });
  } catch (error) {
    console.error('Error testing WinML:', error.message);
  }
};

Örnek görüntüleri içeren bir test-images/ klasör oluşturarak test görüntülerini hazırlayın ve ardından şunu çalıştırın:

npm start

7. Adım: Hata ayıklama kimliğini güncelleştirme

npx winapp node add-electron-debug-identity

Uyarı

Seyrek paketlemesi olan "Electron" uygulamalarıyla ilgili, kilitlenmelere veya boş pencerelere neden olabilecek bilinen bir Windows hatası vardır. Geçici çözüm için kurulum kılavuzuna bakın.

Sonraki Adımlar