Ultralytics YOLO27:

使用 Ultralytics YOLO26 在区域内进行目标计数#

RegionCounter 解决方案(位于 Ultralytics YOLO26 中)会跨视频帧跟踪目标,并在每一帧中统计边界框中心落入你所定义的每个区域内的目标数量。每个区域都会在帧上绘制并显示自己的实时计数,因此你可以通过一条 Python 调用或 CLI 命令监控多个区域,例如商店过道、道路车道或生产区域。



Watch: Object Counting in Different Regions using Ultralytics YOLO | Ultralytics Solutions

为什么使用区域计数?#

  • **一次处理多个区域:**传入一个包含命名多边形的字典,每个区域都会在帧上绘制独立的计数,因此一个视频流即可覆盖你关注的所有区域。
  • **内置跟踪:**该解决方案会在内部运行 YOLO26 检测和目标跟踪,因此无需另外搭建跟踪流程。
  • **可通过程序读取的计数:**每个处理后的帧都会返回一个结果对象,其中包含区域计数字典,可直接用于仪表板、告警或日志记录。

实际应用#

零售集市街道
Ultralytics YOLO 在零售店中绘制的多边形区域内统计人数Ultralytics YOLO 在拥挤的集市街道上叠加区域计数
Ultralytics YOLO 区域内人数统计Ultralytics YOLO 区域内人群计数

如何使用 Ultralytics YOLO 在区域内统计目标#

你可以通过 CLI 或 Python 在视频源上运行 RegionCounter 解决方案。区域可以是点列表(单个区域),也可以是将区域名称映射到点列表的字典。下面的 Python 示例会统计两个命名区域中的目标,并将处理后的帧写入输出视频文件:

使用 Ultralytics YOLO 进行区域计数
# Run a region counting example
yolo solutions region show=True

# Pass a source video
yolo solutions region source="path/to/video.mp4"

# Pass a custom region
yolo solutions region region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"

RegionCounter() 参数#

下面是 RegionCounter 参数表:

参数类型默认值描述
modelstrNoneUltralytics YOLO 模型文件的路径。
regionlistdictNone定义感兴趣区域的点,可以是 (x, y) 元组列表,也可以是将区域名称映射到多区域点列表的字典(仅限 RegionCounter)。当 None 时,需要区域的解决方案会回退到预定义的默认区域。
line_widthint2解决方案绘制的框、关键点和计数的线条粗细。
verboseboolTrue启用解决方案逐帧记录输入形状、类别计数和处理速度的日志。跟踪调用本身始终保持静默。

RegionCounter 解决方案支持使用目标跟踪参数:

参数类型默认值描述
trackerstr'botsort.yaml'指定要使用的跟踪算法。内置选项:botsort.yamlbytetrack.yamlocsort.yamldeepocsort.yamlfasttrack.yamltracktrack.yaml
conffloat0.25设置检测的置信度阈值;较低的值允许跟踪更多对象,但可能包含误报。
ioufloat0.7设置用于过滤重叠检测结果的交并比(IoU)阈值。
classeslistNone按类别索引过滤结果。例如,classes=[0, 2, 3] 仅跟踪指定类别。
devicestrNone指定推理设备(例如 cpucuda:00)。允许用户在 CPU、特定 GPU 或其他计算设备之间进行选择,以执行模型。
imgszint or tuple640目标推理图像大小:用于正方形的整数或 (height, width) 对。形状会根据模型步长进行调整。
max_detint300在跟踪前每帧保留的最大检测数,用于限制解决方案在密集场景中处理的对象数量。
quantizeint or strNone推理精度:针对 PyTorch 和 TorchScript 模型,使用 16 (FP16) 或 32/不设置 (FP32);其他格式则在其工件和运行时选择的精度下进行计算。它替代了已弃用的 half 标志。

此外,还支持以下可视化设置:

参数类型默认值描述
showboolFalse如果为 True,则会在窗口中显示带标注的图像或视频。适用于开发或测试期间获取即时视觉反馈。
show_confboolTrue在每个检测结果旁显示其置信度分数,让你了解模型对每个检测结果的确定程度。
show_labelsboolTrue在可视化输出中显示每个检测结果的标签,帮助你立即了解检测到的对象。

区域计数的工作原理#

RegionCounter 解决方案 会将你传入的每个区域转换为多边形,每个区域至少包含三个点。普通点列表会变成一个名为 Region#01 的单一区域,而字典则会保留你自定义的区域名称;每个区域都会使用 Ultralytics 调色板中的独立颜色进行绘制。随后,每一帧都会经过以下三个步骤处理:

  1. YOLO26 跟踪会检测并跟随帧中的每个目标
  2. 对于每个被跟踪的目标,该解决方案会计算边界框中心,并检查它位于哪些区域多边形内
  3. 每个区域的计数会绘制在其中心位置,并在下一帧处理前重置计数

由于计数会在每一帧重新开始,因此区域上显示的数字表示当前占用量,也就是此刻其中包含多少个目标,而不是累计总数。若要累计统计穿过边界的目标数量,请改用 ObjectCounter 解决方案

每次调用还会返回一个结果对象,其 plot_im 属性包含带标注的帧,而 region_counts 字典则将区域名称映射到对应计数,因此你可以将这些数字接入自己的应用逻辑。

结论#

Ultralytics YOLO26 RegionCounter 解决方案只需几行代码,就能在任意数量的命名区域中监控实时目标计数。若要进一步使用,你可以通过目标计数统计边界穿越情况,通过 TrackZone 跟踪单个区域内的目标,或探索其他 Ultralytics Solutions

常见问题#

  • Ultralytics YOLO26 会跟踪帧中的每个目标,并判断其边界框中心是否位于每个用户定义的多边形内,从而统计区域内的目标数量。区域上显示的计数是该帧的当前占用量,而不是累计总数。配置选项列于 RegionCounter() 参数部分。

  • region 参数作为字典传入,将区域名称映射到点列表,如主示例所示:

    from ultralytics import solutions
    
    region_points = {
        "region-01": [(50, 50), (250, 50), (250, 250), (50, 250)],
        "region-02": [(640, 640), (780, 640), (780, 720), (640, 720)],
    }
    regioncounter = solutions.RegionCounter(region=region_points, model="yolo26n.pt", show=True)

    每个命名区域都会使用独立颜色绘制,并显示独立计数。

  • 每次 regioncounter(im0) 调用返回的对象都包含一个 region_counts 字典,将区域名称映射到对应计数,同时还包含 plot_im(带标注的帧)和 total_tracks(被跟踪目标的数量)。打印结果对象即可查看所有可用字段。

  • 可以。传入带有要保留的类别索引的 classes 参数,例如使用经过 COCO 预训练的模型时,传入 classes=[0] 即可只统计人员。完整的跟踪相关参数列表位于 RegionCounter() 参数部分。

  • RegionCounter 显示当前帧中每个多边形区域内的目标数量,而 ObjectCounter 会在目标穿过线或区域边界时进行累计计数,并跟踪进入和离开的总数。对于一个或多个区域的实时占用量,请使用 RegionCounter;对于进入和离开计数,请使用 ObjectCounter;只有 ObjectCounter 支持线形区域。

评论