使用 Ultralytics YOLO26 统计区域内的目标#
Ultralytics YOLO26 中的 RegionCounter 解决方案会跨视频帧跟踪目标,并在每一帧中统计边界框中心落在你所定义区域内的目标。每个区域都会绘制在帧上,并显示其实时计数,因此你只需调用一次 Python 函数或 CLI 命令,就能监控多个区域,例如商店通道、车道或生产区域。
观看: 使用 Ultralytics YOLO 在不同区域进行目标计数 | Ultralytics Solutions
为什么要使用区域计数?#
- 一次处理多个区域: 传入一个包含命名多边形的字典,每个区域都会在帧上显示独立计数,因此一个视频流就能覆盖你关注的所有区域。
- 内置跟踪: 该解决方案会在内部运行 YOLO26 检测和目标跟踪,因此无需单独搭建跟踪流水线。
- 支持通过程序读取计数: 每个处理后的帧都会返回一个结果对象,其中包含区域计数词典,可直接用于仪表板、警报或日志记录。
实际应用#
| 零售 | 集市街道 |
|---|---|
![]() | ![]() |
| Ultralytics YOLO 区域人数统计 | Ultralytics YOLO 区域人群计数 |
如何使用 Ultralytics YOLO 统计区域内的目标#
通过 CLI 或 Python 在视频源上运行 RegionCounter 解决方案。区域可以是点列表(单个区域),也可以是将区域名称映射到点列表的字典。下面的 Python 示例会统计两个命名区域中的目标,并将处理后的帧写入输出视频文件:
# 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 参数表:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 模型文件的路径。 |
region | list 或 dict | None | 定义感兴趣区域的点,可以是 (x, y) 元组列表,也可以是将区域名称映射到点列表的字典(仅支持多个 RegionCounter 区域)。如果为 None,则需要区域的解决方案会退回到预定义的默认区域。 |
line_width | int | 2 | 解决方案绘制的框、关键点和计数的线条粗细。 |
verbose | bool | True | 启用逐帧日志,记录输入形状、类别计数和处理速度。跟踪调用本身始终不会输出日志。 |
RegionCounter 解决方案支持使用目标跟踪参数:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
tracker | str | 'tracktrack.yaml' | 指定要使用的跟踪算法。内置选项:botsort.yaml、bytetrack.yaml、ocsort.yaml、deepocsort.yaml、fasttrack.yaml、tracktrack.yaml。 |
conf | float | 0.25 | 设置检测的置信度阈值;较低的值允许跟踪更多物体,但可能会包含误检。 |
iou | float | 0.7 | 设置用于筛除重叠检测结果的交并比 (IoU) 阈值。 |
classes | list | None | 按类别索引筛选结果。例如,classes=[0, 2, 3] 只跟踪指定类别。 |
device | str | None | 指定推理设备(例如 cpu、cuda:0 或 0)。用户可以选择 CPU、特定 GPU 或其他计算设备来运行模型。 |
imgsz | int or tuple | 640 | 目标推理图像尺寸:正方形图像使用整数,或使用 (height, width) 对。图像尺寸会调整为模型步幅的整数倍。 |
max_det | int | 300 | 跟踪前每帧保留的最大检测数量,用于限制解决方案在密集场景中处理的物体数量。 |
quantize | int or str | None | 推理精度:对于非 CPU 上运行的 PyTorch 和 TorchScript 模型,使用 16 (FP16) 或 32/unset (FP32) 进行选择;其他格式使用其模型文件和运行时所选的精度。此参数替代已弃用的 half 参数。 |
此外,还支持以下可视化设置:
| 参数 | 类型 | 默认值 | 说明 |
|---|---|---|---|
show | bool | False | 如果 True,则在窗口中显示带标注的图像或视频。适用于在开发或测试期间即时查看结果。 |
show_conf | bool | True | 在每个检测结果的标签旁显示置信度分数,帮助了解模型对该检测结果的确信程度。 |
show_labels | bool | True | 在可视化输出中显示每个检测结果的标签,便于立即了解检测到的对象。 |
区域计数的工作原理#
RegionCounter 解决方案会将你传入的每个区域转换为一个多边形,每个区域至少包含三个点。普通点列表会变成一个名为 Region#01 的单一区域,而字典则会保留你指定的区域名称;每个区域都会使用 Ultralytics 调色板中的独立颜色绘制。随后,每一帧都会经过以下三个步骤处理:
- YOLO26 跟踪会检测并追踪帧中的每个对象
- 对于每个跟踪到的目标,解决方案都会计算其边界框中心,并检查该中心位于哪些区域多边形内
- 每个区域的计数会显示在该区域中心,并在处理下一帧之前重置
由于计数会在每一帧重新开始,区域上显示的数字表示当前占用量,也就是此刻区域内的目标数量,而不是累计总数。若要累计统计穿过边界的目标数量,请改用 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]仅统计 person。所有与跟踪相关的参数都列在RegionCounter()参数部分。RegionCounter会显示当前帧中每个多边形区域内有多少个目标,而 ObjectCounter 会在目标穿过线段或区域边界时累计计数,并跟踪进入和离开的总数。使用RegionCounter查看一个或多个区域的实时占用情况,使用ObjectCounter统计进入和离开的数量;只有ObjectCounter支持线形区域。

