Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Questa guida illustra come creare un componente aggiuntivo nativo C# che usa Windows Machine Learning (WinML) nell'app Electron. WinML consente di eseguire machine learning modelli (formato ONNX) in locale nei dispositivi Windows per attività come la classificazione delle immagini, il rilevamento degli oggetti e altro ancora.
Prerequisiti
- Completata la configurazione dell'ambiente di sviluppo
- Windows 11 o Windows 10 (versione 1809 o successiva)
Annotazioni
WinML viene eseguito in qualsiasi dispositivo Windows 10 (1809+) o Windows 11. Per ottenere prestazioni ottimali, i dispositivi con GPU o NPU sono consigliati, ma l'API funziona anche sulla CPU.
Passaggio 1: Creare un componente aggiuntivo nativo C#
npx winapp node create-addon --template cs --name winMlAddon
Verrà creata una cartella winMlAddon/ con un project C# configurato con Windows SDK e riferimenti Windows App SDK.
Compilare il componente aggiuntivo:
npm run build-winMlAddon
Passaggio 2: Scaricare il modello SqueezeNet
- Installare AI Dev Gallery
- Passare all'esempio di classificazione dell'immagine
- Scaricare il modello SqueezeNet 1.1
- Copiare il file
.onnxin la cartellamodels/nella cartella principale del progetto
Annotazioni
Il modello può essere scaricato anche dal repository ONNX Model Zoo GitHub.
Passaggio 3: Aggiungere pacchetti NuGet necessari
Aggiorna Directory.packages.props nella directory principale del progetto.
<PackageVersion Include="Microsoft.ML.OnnxRuntime.Extensions" Version="0.14.0" />
<PackageVersion Include="System.Drawing.Common" Version="9.0.9" />
Aggiornare winMlAddon/winMlAddon.csproj per aggiungere i riferimenti al pacchetto:
<PackageReference Include="Microsoft.ML.OnnxRuntime.Extensions" />
<PackageReference Include="System.Drawing.Common" />
Passaggio 4: Aggiungere il codice di esempio
Ai Dev Gallery offre l'implementazione completa per la classificazione delle immagini con SqueezeNet. È possibile trovare il codice adattato nell'esempio electron-winml.
Copiare la winMlAddon/ cartella dall'esempio o aggiornare winMlAddon/addon.cs manualmente con il codice di esempio.
Dettagli chiave dell'implementazione
Percorso radice del progetto: Il componente aggiuntivo richiede che il codice JavaScript passi il percorso radice del progetto in modo che possa individuare il modello ONNX e le dipendenze native.
Precaricamento delle dipendenze native: il componente aggiuntivo include un metodo per caricare le DLL necessarie che funzionano sia per gli scenari di sviluppo che per gli scenari di produzione.
Configurazione di Electron Forge: configurare il pacchettizzatore per decomprimere i file nativi:
module.exports = {
packagerConfig: {
asar: {
unpack: "**/*.{dll,exe,node,onnx}"
},
ignore: [
/^\/.winapp\//,
"\\.msix$",
/^\/winMlAddon\/(?!dist).+/
]
},
};
Passaggio 5: Compilare il componente aggiuntivo
npm run build-winMlAddon
Passaggio 6: Testare il componente aggiuntivo
Aprire src/index.js e caricare il componente aggiuntivo:
const winMlAddon = require('../winMlAddon/dist/winMlAddon.node');
Aggiungere una funzione di test:
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);
}
};
Preparare le immagini di test creando una test-images/ cartella con immagini di esempio, quindi eseguire:
npm start
Passaggio 7: Aggiornare l'identità di debug
npx winapp node add-electron-debug-identity
Annotazioni
Esiste un bug noto di Windows con pacchetti sparse di applicazioni Electron che possono causare arresti anomali o finestre vuote. Vedere la guida alla configurazione per la soluzione alternativa.
Passaggi successivi
- Creazione di un componente aggiuntivo Phi Silica - Usare le API di intelligenza artificiale sul dispositivo
- Creazione di pacchetti per la distribuzione - Creare un pacchetto MSIX firmato