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




