Flutter集成Tflite与Teachable Machine非花卉对象识别提示方案咨询
可行实现方案
- 置信度阈值过滤(无需修改模型,实现成本最低)
你当前训练的花卉品类识别模型,在识别非花卉对象时,输出的最高置信度会远低于匹配到已知花卉品类时的置信度。你可以设置一个合理的置信度阈值(建议初始设为65%~75%,可根据实际识别效果调整),如果推理返回的最高置信度低于阈值,直接判定为非花卉对象,触发对应弹窗即可。 - 双层分类器架构
额外训练一个轻量的二分类TFLite模型,仅负责判断输入内容是否属于花卉范畴,只有当二分类模型判定为花卉的输入,才送入你现有的花卉品类识别模型做细分品类判断。这个方案准确率高于单纯的阈值过滤,也不需要改动你已经训练好的花卉品类识别模型。 - 标签白名单+阈值组合校验
维护一份合法花卉标签的白名单,推理结果返回后,先校验返回的标签是否在白名单内,同时搭配置信度阈值做双重校验,任意一项不满足就判定为非花卉。这个方案适合后续你新增识别品类时同步更新白名单即可,容错率更高。
适配现有代码的修改示例
你可以在图像分类的结果处理逻辑中新增如下判断,这里给出核心修改代码:
// 补全你的classifyImage方法逻辑,新增非花卉判断 classifyImage(File image) async { setState(() { detecting = true; }); // 运行模型推理,设置基础阈值为0,后续自行做逻辑判断 var inferenceOutput = await Tflite.runModelOnImage( path: image.path, numResults: 1, threshold: 0, ); setState(() { detecting = false; output = inferenceOutput; }); // 非花卉判定逻辑 if (inferenceOutput != null && inferenceOutput.isNotEmpty) { double maxConfidence = inferenceOutput[0]['confidence']; // 可根据实际测试调整阈值 const double judgeThreshold = 0.7; if (maxConfidence < judgeThreshold) { // 弹出非花卉提示 showDialog( context: context, builder: (BuildContext context) => AlertDialog( title: const Text("提示"), content: const Text("这不是花卉"), actions: <Widget>[ TextButton( onPressed: () => Navigator.of(context).pop(), child: const Text("知道了"), ), ], ), ); } } }
内容的提问来源于stack exchange,提问作者Flt
相关产品推荐
相关产品推荐

