Vytvoření doplňku WinML pro Elektron

V této příručce se dozvíte, jak vytvořit nativní doplněk jazyka C#, který ve vaší aplikaci Electron používá Windows Machine Learning (WinML). WinML umožňuje spouštět machine learning modely (formát ONNX) místně na zařízeních s Windows pro úlohy, jako je klasifikace obrázků, detekce objektů a další.

Předpoklady

Poznámka:

WinML běží na jakémkoli zařízení Windows 10 (1809+) nebo Windows 11. Pro zajištění nejlepšího výkonu se doporučuje zařízení s GRAFICKÝmi procesory nebo NPU, ale rozhraní API funguje i na procesoru.

Krok 1: Vytvoření nativního doplňku jazyka C#

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

Tím se vytvoří složka winMlAddon/ s projektem C# konfigurovaným s Windows SDK a odkazy na Windows App SDK.

Sestavte doplněk:

npm run build-winMlAddon

Krok 2: Stažení modelu SqueezeNet

  1. Nainstalujte AI galerii pro vývojáře
  2. Přejít na ukázku Klasifikace obrazu
  3. Stažení modelu SqueezeNet 1.1
  4. Zkopírujte soubor .onnx do složky models/ v kořenovém adresáři project.

Poznámka:

Model lze také stáhnout z úložiště ONNX Model Zoo GitHub.

Krok 3: Přidání požadovaných balíčků NuGet

Aktualizujte Directory.packages.props v kořenovém adresáři projektu:

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

Aktualizujte winMlAddon/winMlAddon.csproj a přidejte odkazy na balíčky:

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

Krok 4: Přidání ukázkového kódu

Galerie vývojářů AI poskytuje úplnou implementaci klasifikace obrázků pomocí SqueezeNetu. Upravený kód najdete v ukázce electron-winml.

winMlAddon/ Zkopírujte složku z ukázky nebo ručně aktualizujte winMlAddon/addon.cs vzorovým kódem.

Klíčové podrobnosti implementace

Kořenová cesta projektu: Doplněk vyžaduje, aby kód JavaScriptu předal kořenovou cestu projektu, aby mohl vyhledat model ONNX a nativní závislosti.

Předběžné načtení nativních závislostí: Doplněk obsahuje metodu pro načtení požadovaných knihoven DLL, které fungují pro vývojové i produkční scénáře.

Konfigurace Electron Forge: Nakonfigurujte vaší balíčkovací aplikaci, aby rozbalila nativní soubory:

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

Krok 5: Sestavení doplňku

npm run build-winMlAddon

Krok 6: Otestování doplňku

Otevřete src/index.js a načtěte doplněk:

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

Přidání testovací funkce:

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);
  }
};

Připravte testovací image tak, že test-images/ vytvoříte složku s ukázkovými obrázky a pak spustíte:

npm start

Krok 7: Aktualizujte identitu ladění

npx winapp node add-electron-debug-identity

Poznámka:

Existuje známá chyba ve Windows se „sparse packaging“ aplikací Electron, která může způsobit pády nebo prázdná okna. Alternativní řešení najdete v průvodci nastavením .

Další kroky