Observação
O acesso a essa página exige autorização. Você pode tentar entrar ou alterar diretórios.
O acesso a essa página exige autorização. Você pode tentar alterar os diretórios.
Este guia mostra como criar um complemento nativo em C# que usa o WinML (Windows Machine Learning) em seu aplicativo Electron. O WinML permite que você execute machine learning modelos (formato ONNX) localmente em dispositivos Windows para tarefas como classificação de imagem, detecção de objetos e muito mais.
Pré-requisitos
- Concluído a configuração do ambiente de desenvolvimento
- Windows 11 ou Windows 10 (versão 1809 ou posterior)
Observação
O WinML é executado em qualquer dispositivo Windows 10 (1809+) ou Windows 11. Para obter melhor desempenho, dispositivos com GPUs ou NPUs são recomendados, mas a API também funciona na CPU.
Etapa 1: Criar um complemento nativo em C#
npx winapp node create-addon --template cs --name winMlAddon
Isso cria uma pasta winMlAddon/ com um projeto em C# configurado com o SDK do Windows e referências do Windows App SDK.
Crie o complemento:
npm run build-winMlAddon
Etapa 2: Baixar o modelo SqueezeNet
- Instalar a Galeria de Desenvolvimento de IA
- Navegue até o exemplo Classificar Imagem
- Baixar o modelo SqueezeNet 1.1
- Copie o arquivo
.onnxpara uma pastamodels/na raiz do project
Observação
O modelo também pode ser baixado do repositório ONNX Model Zoo GitHub.
Etapa 3: Adicionar pacotes NuGet necessários
Atualize Directory.packages.props na raiz do seu projeto:
<PackageVersion Include="Microsoft.ML.OnnxRuntime.Extensions" Version="0.14.0" />
<PackageVersion Include="System.Drawing.Common" Version="9.0.9" />
Atualize winMlAddon/winMlAddon.csproj para adicionar as referências do pacote:
<PackageReference Include="Microsoft.ML.OnnxRuntime.Extensions" />
<PackageReference Include="System.Drawing.Common" />
Etapa 4: Adicionar o código de exemplo
A Galeria de Desenvolvimento de IA fornece a implementação completa para classificação de imagem com SqueezeNet. Você pode encontrar o código adaptado no exemplo electron-winml.
Copie a winMlAddon/ pasta do exemplo ou atualize winMlAddon/addon.cs manualmente com o código de exemplo.
Principais detalhes de implementação
Caminho raiz do projeto: o addon requer que o código JavaScript forneça o caminho raiz do projeto para localizar o modelo ONNX e as dependências nativas.
Pré-carregamento de dependências nativas: O complemento inclui um método para carregar DLLs necessárias que funciona para cenários de desenvolvimento e produção.
Configuração do Electron Forge: configure o empacotador para desempacotar arquivos nativos:
module.exports = {
packagerConfig: {
asar: {
unpack: "**/*.{dll,exe,node,onnx}"
},
ignore: [
/^\/.winapp\//,
"\\.msix$",
/^\/winMlAddon\/(?!dist).+/
]
},
};
Etapa 5: Criar o complemento
npm run build-winMlAddon
Etapa 6: Testar o complemento
Abra src/index.js e carregue o complemento:
const winMlAddon = require('../winMlAddon/dist/winMlAddon.node');
Adicionar uma função de teste:
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);
}
};
Prepare imagens de teste criando uma test-images/ pasta com imagens de exemplo e execute:
npm start
Etapa 7: Atualizar identidade usada para depuração
npx winapp node add-electron-debug-identity
Observação
Há um bug conhecido no Windows associado a aplicativos Electron com embalagem esparsa, que pode resultar em falhas ou janelas em branco. Consulte o guia de configuração para a solução alternativa.
Próximas Etapas
- Criando um complemento Phi Silica – Usar APIs de IA no dispositivo
- Empacotamento para distribuição – Criar um pacote MSIX assinado
Tópicos relacionados
Windows developer