Flutter中如何使用多个TFLite模型?动态切换模型路径实现方法
动态加载TFLite模型实现方案
你可以给现有的loadModel方法新增入参接收用户选择的模型标识,在方法内部做路径判断即可,无需重复编写加载逻辑。
基础实现(if-else版本)
先提前定义好所有模型和标签的路径常量,在loadModel内部根据入参匹配对应路径:
// 提前定义所有模型、标签路径常量,方便后续统一维护 const String model1Path = "assets/models/model1.tflite"; const String label1Path = "assets/labels/label1.txt"; const String model2Path = "assets/models/model2.tflite"; const String label2Path = "assets/labels/label2.txt"; loadModel(String selectedModel) async { String modelPath; String labelPath; // 条件判断直接写在loadModel方法内部即可 if (selectedModel == "model1") { modelPath = model1Path; labelPath = label1Path; } else if (selectedModel == "model2") { modelPath = model2Path; labelPath = label2Path; } else { // 可按需添加异常处理或默认模型加载逻辑 throw ArgumentError("未匹配到对应模型,请检查入参"); } await Tflite.loadModel( model: modelPath, labels: labelPath, numThreads: 1, ); }
调用方式:
- 用户选择model1时执行:
loadModel("model1") - 用户选择model2时执行:
loadModel("model2")
优化实现(枚举版本)
建议优先用枚举的方式实现,避免手动传字符串出现拼写错误导致路径匹配失败
// 先定义模型类型枚举 enum ModelType { model1, model2 } loadModel(ModelType selectedModel) async { late String modelPath; late String labelPath; switch (selectedModel) { case ModelType.model1: modelPath = "assets/models/model1.tflite"; labelPath = "assets/labels/label1.txt"; break; case ModelType.model2: modelPath = "assets/models/model2.tflite"; labelPath = "assets/labels/label2.txt"; break; } await Tflite.loadModel( model: modelPath, labels: labelPath, numThreads: 1, ); }
调用方式:
- 用户选择model1时执行:
loadModel(ModelType.model1) - 用户选择model2时执行:
loadModel(ModelType.model2)
内容的提问来源于stack exchange,提问作者Wasi Ur Rehman Qamar
相关产品推荐
相关产品推荐

