Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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
- Dokončeno nastavení vývojového prostředí.
- Windows 11 nebo Windows 10 (verze 1809 nebo novější)
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
- Nainstalujte AI galerii pro vývojáře
- Přejít na ukázku Klasifikace obrazu
- Stažení modelu SqueezeNet 1.1
- Zkopírujte soubor
.onnxdo složkymodels/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
- Vytvoření doplňku Phi Silica – Použití rozhraní API AI na zařízení
- Balení pro distribuci – Vytvoření podepsaného balíčku MSIX
Příbuzná témata
Windows developer