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

如何在Flutter中使用ultralytics_yolo库实现目标追踪?

如何在Flutter中使用ultralytics_yolo库实现目标追踪?

嘿,看起来你已经在Flutter里把YOLO的目标检测功能跑通了,这很棒!关于目标追踪(也就是跨帧识别并跟随同一个物体),其实ultralytics_yolo库本身就支持追踪模式,我来给你一步步拆解怎么修改你的现有代码:

1. 切换任务模式为追踪

首先要把YOLO的任务类型从检测(detection)切换为追踪(tracking)。你代码里的_currentTask变量应该目前是'detection',把它改成'tracking'即可——不管是初始化赋值,还是通过UI控件切换任务时设置。

比如初始化时:

String _currentTask = 'tracking'; // 替换原来的'detection'

如果你的下拉菜单或者其他控件有任务切换逻辑,也要对应把目标任务改成'tracking'。

2. 确保控制器与模型适配追踪模式

在你切换模型的代码里,要把任务参数指定为'tracking',让控制器加载对应模式的模型配置:

onChanged: (model) {
  if (model != null) {
    setState(() => _currentModel = model);
    // 这里把任务改成tracking
    controller.switchModel(model, 'tracking');
  }
},

3. 处理追踪结果(获取唯一目标ID)

开启追踪模式后,onResult回调返回的每个检测结果都会包含一个id字段——这个就是跨帧识别同一个物体的唯一标识。你可以在回调里打印或处理这个ID:

onResult: (results) {
  print('追踪到 ${results.length} 个物体');
  // 遍历结果,打印每个物体的ID、类别和置信度
  for (var obj in results) {
    print('追踪ID: ${obj.id} | 类别: ${obj.className} | 置信度: ${obj.confidence.toStringAsFixed(2)}');
  }
},

4. 更新YOLOView的配置

确保你的YOLOView组件的task参数指向已经设置为'tracking'的_currentTask,让视图启用追踪渲染:

Expanded(
  child: YOLOView(
    controller: controller,
    task: _currentTask, // 现在是'tracking'模式
    modelPath: _currentModel,
    onResult: (results) {
      print('追踪到 ${results.length} 个物体');
      results.forEach((obj) {
        print('追踪ID: ${obj.id} | 类别: ${obj.className}');
      });
    },
    onZoomChanged: (zoom) {
      setState(() => _currentZoom = zoom);
    },
    onPerformanceMetrics: (metrics) {
      print('FPS: ${metrics.fps}');
    },
  ),
),

一些额外注意事项

  • 确认你使用的ultralytics_yolo插件是最新稳定版,旧版本可能没有完整的追踪支持;
  • 追踪模式下帧率会略低于纯检测,你可以通过切换轻量模型(比如yolo11n)或者调整置信度阈值来平衡速度和精度;
  • 如果需要在UI上显示追踪ID,你可能需要自定义检测框的绘制逻辑——有些版本的插件会自动在检测框旁标注ID,你可以测试看看效果。

这样修改之后,跨帧时同一个物体的id会保持一致,你就能实现目标追踪的需求啦!如果遇到ID不连贯或者性能问题,可以再调整模型参数或者插件版本试试。

内容来源于stack exchange

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.08 08:29:29