Flutter开发的目标检测App无法正确显示物体名称如何修复
Flutter目标检测App识别结果错误修复方案
问题根因排查及修复步骤
- 第一步:修正标签文件格式
Google Teachable Machine默认导出的labels.txt文件每条标签前会自带数字序号、空格,还会保留平台默认的未被你删除的类别(比如你没删掉默认的「树」类别),这是最常见的识别结果完全错误的原因。
操作方法:- 打开
assets/labels.txt,删除每条标签前的序号和空格,仅保留你自定义的类别名称 - 删除所有你训练时没有用到的默认类别(比如你只训练了笔记本、手机两类,就删掉其余所有行)
- 确认
pubspec.yaml中已经正确声明了该标签文件的assets路径
- 打开
- 第二步:调整推理配置参数
你当前的参数配置存在两处不合理:- 置信度阈值设置过低:你当前
threshold: 0.1,会把置信度仅10%以上的错误结果也输出,修改为threshold: 0.5,过滤低置信度的错误结果 - 图像旋转参数固定:你当前
rotation: 90是硬编码,不同设备的摄像头传感器方向不同,输入图像方向错误会导致模型完全无法正确识别,可以依次尝试0/90/180/270四个值,找到适配你设备的旋转角度
修改后的推理参数示例:
var recognitions = await Tflite.runModelOnFrame( bytesList: imgCamera!.planes.map((plane) { return plane.bytes; }).toList(), imageHeight: imgCamera!.height, imageWidth: imgCamera!.width, imageMean: 127.5, imageStd: 127.5, rotation: 90, // 替换为适配你设备的数值 numResults: 2, threshold: 0.5, // 调整阈值 asynch:true, ); - 置信度阈值设置过低:你当前
- 第三步:修复状态更新代码
你当前的状态更新写法不规范,可能导致结果不刷新:
原代码:
修改为:setState(() { result; });setState(() { this.result = result; }); - 第四步:核对训练数据集质量
如果以上操作都完成后还是识别错误,检查训练数据集:- 每类样本量是否不低于100张,覆盖不同光线、角度、背景的拍摄场景
- 训练时是否完成了足够的迭代轮次,没有出现欠拟合
- 导出模型时选择的是TensorFlow Lite的浮点数模型,和你代码里的预处理参数匹配
内容的提问来源于stack exchange,提问作者vj_15
相关产品推荐
相关产品推荐

