You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

MAUI项目中加载ML.NET图像分类模型失败求助

解决MAUI中ML.NET模型文件找不到的问题

第一步:检查模型文件的属性设置

把MLModel2.zip和model.consumption文件添加到项目后,必须设置正确的构建属性:

  • 在解决方案资源管理器右键点击这两个文件,选择属性
  • 将生成操作设置为Embedded resource
  • 将复制到输出目录设置为如果较新则复制或始终复制

第二步:修正模型加载路径与方式

MAUI中读取嵌入式资源不能直接用文件名,需结合项目命名空间构造完整资源路径,修改模型加载代码:

private static PredictionEngine<ModelInput, ModelOutput> CreatePredictEngine()
{
    // 替换成你的项目命名空间,例如项目名为HotDogApp,路径就是HotDogApp.MLModel2.zip
    string resourcePath = "你的项目命名空间.MLModel2.zip";
    var assembly = typeof(MLModel2).Assembly;
    
    using var stream = assembly.GetManifestResourceStream(resourcePath);
    if (stream == null)
    {
        throw new FileNotFoundException("模型文件未找到,请检查资源路径是否正确", resourcePath);
    }
    
    var mlContext = new MLContext();
    ITransformer mlModel = mlContext.Model.Load(stream, out var _);
    return mlContext.Model.CreatePredictionEngine<ModelInput, ModelOutput>(mlModel);
}

小技巧:可以通过assembly.GetManifestResourceNames()打印所有可用的嵌入式资源名称,找到模型文件的完整路径。

第三步:处理异步初始化问题

你的CreatePredictEngine是异步方法,但MLModel2.Predict是同步调用,容易导致初始化不完整。建议在应用启动时提前初始化预测引擎:

在App.xaml.cs的启动方法中完成初始化:

public partial class App : Application
{
    public static PredictionEngine<ModelInput, ModelOutput> PredictionEngine { get; private set; }

    protected override async void OnStart()
    {
        base.OnStart();
        PredictionEngine = await CreatePredictEngine();
    }
}

然后修改拍照方法中的预测调用:

var prediction = App.PredictionEngine.Predict(modelInput);

第四步:验证文件是否存在于输出包

如果仍报错,可前往项目输出目录(如bin\Debug\net7.0-android)检查MLModel2.zip是否被正确复制,确认文件未丢失。

内容的提问来源于stack exchange,提问作者geralt420

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.12 16:46:08