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

Flutter中flutter_tflite包获取目标检测宽高的方法咨询

如何用flutter_tflite获取目标检测的宽高信息?

你当前使用的是图像分类模型,这类模型仅输出类别和置信度,不会返回目标的位置/尺寸信息。要获取目标的宽高,必须切换到目标检测任务,使用对应的目标检测模型和flutter_tflite的目标检测API,具体步骤如下:

1. 替换为目标检测模型文件

准备目标检测专用的.tflite模型及对应的标签文件(例如常用的ssd_mobilenet_v1.tflite和ssd_mobilenet_v1.txt),将文件放入项目的assets目录,并在pubspec.yaml中配置资源:

flutter:
  assets:
    - assets/ssd_mobilenet_v1.tflite
    - assets/ssd_mobilenet_v1.txt

2. 初始化目标检测模型

替换原有的分类模型初始化代码,加载目标检测模型:

import 'package:flutter_tflite/flutter_tflite.dart';

// 初始化模型
Future<void> loadDetectionModel() async {
  await Tflite.loadModel(
    model: "assets/ssd_mobilenet_v1.tflite",
    labels: "assets/ssd_mobilenet_v1.txt",
  );
}

3. 调用目标检测推理API

使用detectObjectOnImage方法替代分类用的runModelOnImage,该方法会返回包含目标位置和尺寸的结果:

Future<void> detectObjects(String imagePath) async {
  var detectionResults = await Tflite.detectObjectOnImage(
    path: imagePath, // 待检测图像的本地路径
    threshold: 0.3, // 过滤置信度低于0.3的结果
    imageMean: 127.5, // 模型要求的图像均值,需匹配模型训练参数
    imageStd: 127.5, // 模型要求的图像标准差,需匹配模型训练参数
    model: "SSDMobileNet", // 对应加载的模型类型
  );
}

4. 解析结果中的宽高信息

detectionResults中的每个元素包含rect字段,其中w和h就是目标的宽高,示例解析代码:

if (detectionResults != null) {
  for (var result in detectionResults) {
    Map rect = result['rect'];
    double targetWidth = rect['w'];
    double targetHeight = rect['h'];
    String label = result['detectedClass'];
    double confidence = result['confidenceInClass'];
    
    // 在这里使用目标宽高信息进行后续处理
    print("检测到${label},宽:${targetWidth},高:${targetHeight}");
  }
}

注意事项

  • 不同目标检测模型的imageMean、imageStd等参数可能不同,需参考模型的官方说明调整;
  • 确保pubspec.yaml中已正确声明assets资源,且路径与代码中的一致;
  • 推理完成后记得调用Tflite.close()释放资源。

内容的提问来源于stack exchange,提问作者Banu prasath S

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.16 19:42:40