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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.24 23:15:05