You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Android FirebaseML报错:Local model is not registered 求助

解决Firebase MLKit报错:Local model is not registered

嘿,这个问题我之前也碰到过!你报错的核心原因很清晰:你在FirebaseModelOptions里同时指定了远程模型和本地模型的名称,但代码里只完成了远程模型的注册,完全没处理本地模型的注册步骤,所以ML Kit找不到对应的本地模型实例,就抛出了Local model is not registered: places-recommend这个异常。

下面是具体的修复步骤:

1. 确认本地模型文件的位置

首先要确保你的tflite模型文件已经正确放置在Android项目的assets目录下(如果没有assets目录,就在main文件夹下新建一个)。比如你的模型文件名叫places-recommend.tflite,直接放在assets根目录即可;如果放在子目录(比如assets/models/),后面注册时要对应写对路径。

2. 添加本地模型的注册代码

在注册远程模型的代码后面,添加本地模型的注册逻辑:

// 创建本地模型实例,注意名称要和你在ModelOptions里设置的完全一致
FirebaseLocalModel localSource = new FirebaseLocalModel.Builder("places-recommend")
    // 填写assets里模型文件的路径,直接放在根目录就写文件名,子目录要加上路径
    .setAssetFilePath("places-recommend.tflite")
    .build();

// 注册本地模型到ModelManager
FirebaseModelManager.getInstance().registerLocalModel(localSource);

3. 整合后的完整代码片段

把这段代码插入到你原有代码中,确保在创建FirebaseModelInterpreter之前完成本地模型的注册:

// 构建下载条件
FirebaseModelDownloadConditions.Builder conditionsBuilder = new FirebaseModelDownloadConditions.Builder().requireWifi();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.N) {
    conditionsBuilder = conditionsBuilder
        .requireCharging()
        .requireDeviceIdle();
}
FirebaseModelDownloadConditions conditions = conditionsBuilder.build();

// 注册远程模型
FirebaseRemoteModel cloudSource = new FirebaseRemoteModel.Builder("places-recommend")
    .enableModelUpdates(true)
    .setInitialDownloadConditions(conditions)
    .setUpdatesDownloadConditions(conditions)
    .build();
FirebaseModelManager.getInstance().registerRemoteModel(cloudSource);

// 新增:注册本地模型
FirebaseLocalModel localSource = new FirebaseLocalModel.Builder("places-recommend")
    .setAssetFilePath("places-recommend.tflite")
    .build();
FirebaseModelManager.getInstance().registerLocalModel(localSource);

// 构建ModelOptions并创建Interpreter
FirebaseModelOptions options = new FirebaseModelOptions.Builder()
    .setRemoteModelName("places-recommend")
    .setLocalModelName("places-recommend")
    .build();
FirebaseModelInterpreter firebaseInterpreter = FirebaseModelInterpreter.getInstance(options);

// 构建输入输出配置
FirebaseModelInputOutputOptions inputOutputOptions = new FirebaseModelInputOutputOptions.Builder()
    .setInputFormat(0, FirebaseModelDataType.FLOAT32, new int[]{1, 3})
    .setOutputFormat(0, FirebaseModelDataType.FLOAT32, new int[]{1, 34})
    .build();

额外注意事项

  • 模型名称大小写敏感,确保FirebaseLocalModel.Builder里的名称和setLocalModelName的名称完全一致;
  • 如果你的模型文件在assets的子目录下(比如assets/models/places-recommend.tflite),setAssetFilePath要写成"models/places-recommend.tflite"
  • 如果你只是想优先使用远程模型,本地模型作为 fallback,也必须完成本地模型的注册,否则ML Kit会认为你配置了本地模型但未提供实例,依然会报错。

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

火山引擎 最新活动