Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
Den här guiden visar hur du skapar ett internt C#-tillägg som använder Windows Machine Learning (WinML) i din Electron-app. Med WinML kan du köra machine learning modeller (ONNX-format) lokalt på Windows-enheter för uppgifter som bildklassificering, objektidentifiering med mera.
Förutsättningar
- Installationen av utvecklingsmiljön har slutförts
- Windows 11 eller Windows 10 (version 1809 eller senare)
Anmärkning
WinML körs på valfri Windows 10 (1809+) eller Windows 11 enhet. För bästa prestanda rekommenderas enheter med GPU:er eller NPU:er, men API:et fungerar även på CPU.
Steg 1: Skapa ett internt C#-tillägg
npx winapp node create-addon --template cs --name winMlAddon
Detta skapar en winMlAddon/ mapp med en C# project konfigurerad med Windows SDK och Windows App SDK referenser.
Skapa tillägget:
npm run build-winMlAddon
Steg 2: Ladda ned SqueezeNet-modellen
- Installera AI Dev-galleriet
- Gå till exempel på Klassificera bild
- Ladda ned SqueezeNet 1.1-modellen
- Kopiera filen
.onnxtill mappenmodels/i din project-rot
Anmärkning
Modellen kan också laddas ned från ONNX Model Zoo GitHub lagringsplats.
Steg 3: Lägg till nödvändiga NuGet-paket
Uppdatera Directory.packages.props i din projektrot:
<PackageVersion Include="Microsoft.ML.OnnxRuntime.Extensions" Version="0.14.0" />
<PackageVersion Include="System.Drawing.Common" Version="9.0.9" />
Uppdatera winMlAddon/winMlAddon.csproj för att lägga till paketreferenserna:
<PackageReference Include="Microsoft.ML.OnnxRuntime.Extensions" />
<PackageReference Include="System.Drawing.Common" />
Steg 4: Lägg till exempelkoden
AI Dev Gallery tillhandahåller en fullständig implementering för bildklassificering med SqueezeNet. Du hittar den anpassade koden i exemplet electron-winml.
winMlAddon/ Kopiera mappen från exemplet eller uppdatera winMlAddon/addon.cs manuellt med exempelkoden.
Viktig implementeringsinformation
Projektets rotsökväg: Tillägget kräver att JavaScript-koden skickar projektets rotsökväg så att det kan hitta ONNX-modellen och inbyggda beroenden.
Förinläsning av inbyggda beroenden: Tillägget innehåller en metod för att läsa in nödvändiga DLL:er som fungerar för både utvecklings- och produktionsscenarier.
Electron Forge-konfiguration: Konfigurera din paketerare för att packa upp inbyggda filer:
module.exports = {
packagerConfig: {
asar: {
unpack: "**/*.{dll,exe,node,onnx}"
},
ignore: [
/^\/.winapp\//,
"\\.msix$",
/^\/winMlAddon\/(?!dist).+/
]
},
};
Steg 5: Skapa tillägget
npm run build-winMlAddon
Steg 6: Testa tillägget
Öppna src/index.js och läs in tillägget:
const winMlAddon = require('../winMlAddon/dist/winMlAddon.node');
Lägg till en testfunktion:
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);
}
};
Förbered testbilder genom att skapa en test-images/ mapp med exempelbilder och kör sedan:
npm start
Steg 7: Uppdatera felsökningsidentitet
npx winapp node add-electron-debug-identity
Anmärkning
Det finns en känd Windows-bugg med gles paketering av Elektronprogram som kan orsaka krascher eller tomma fönster. Se installationsguiden för lösningen.
Nästa steg
- Skapa ett Phi Silica-tillägg – Använda AI-API:er på enheten
- Paketering för distribution – Skapa ett signerat MSIX-paket
Relaterade ämnen
Windows developer