YOLO Vision 2026:

使用 Ultralytics YOLO26 进行区域对象计数#

Ultralytics YOLO26 中的 RegionCounter 方案可在视频帧之间追踪对象,并在每一帧中统计边界框中心落入你定义的各个区域内的对象。每个区域都会连同其实时计数直接绘制在帧上,因此你可以通过一个 Python 调用或 CLI 命令同时监控商店过道、车道或生产区等多个区域。



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

为什么要使用区域计数?#

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

现实世界应用#

零售集市街道
Ultralytics YOLO counting people inside drawn polygon regions in a retail storeUltralytics YOLO region counts overlaid on a crowded market street
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 时,需要区域的解决方案将回退到预定义的默认值。

RegionCounter 解决方案支持使用对象跟踪参数:

参数类型默认值描述
trackerstr'tracktrack.yaml'指定要使用的跟踪算法。内置选项:botsort.yamlbytetrack.yamlocsort.yamldeepocsort.yamlfasttrack.yamltracktrack.yaml
conffloat0.1设置检测的置信度阈值;较低的值允许跟踪更多的对象,但也可能包含误报。
ioufloat0.7设置用于过滤重叠检测结果的交并比 (IoU) 阈值。
classeslistNone按类别索引过滤结果。例如,classes=[0, 2, 3] 仅跟踪指定的类别。
verboseboolTrue控制跟踪结果的显示,提供被跟踪对象的视觉输出。
devicestrNone指定用于推理的设备(例如 cpucuda:00)。允许用户在 CPU、特定的 GPU 或用于模型执行的其他计算设备之间进行选择。

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

参数类型默认值描述
showboolFalse如果为 True,则在窗口中显示带注释的图像或视频。对于开发或测试期间的即时视觉反馈非常有用。
line_widthint or NoneNone指定边界框的线条宽度。如果为 None,则线条宽度会根据图像大小自动调整。提供视觉定制以提高清晰度。
show_confboolTrue在标签旁显示每次检测的置信度得分。让你深入了解模型对每次检测的确定性。
show_labelsboolTrue在视觉输出中显示每次检测的标签。提供对检测到对象的即时理解。

区域计数的工作原理#

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

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

由于计数在每一帧都会重新开始,因此区域上显示的数字是其当前的占用数(即此刻有多少对象在其中),而不是累计总数。若要累计计算穿过边界的对象,请改用 ObjectCounter 解决方案

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

结论#

Ultralytics YOLO26 RegionCounter 解决方案只需几行代码即可监控任意数量命名区域中的实时对象计数。如需进一步操作,可以通过对象计数来计算边界交叉数,通过 TrackZone 在单个区域内跟踪对象,或者探索其他Ultralytics 解决方案

常见问题解答#

Ultralytics YOLO26 中的区域对象计数是如何工作的?#

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 参数,例如使用 classes=[0] 来仅对带有 COCO 预训练模型的人员进行计数。跟踪相关的完整参数列表位于 RegionCounter() 参数一节中。

RegionCounter 和 ObjectCounter 之间有什么区别?#

RegionCounter 显示当前帧上每个多边形区域内有多少对象,而 ObjectCounter 在对象穿过线条或区域边界时进行累计计数,并追踪进出总量。请使用 RegionCounter 来获取一个或多个区域的实时占用情况,使用 ObjectCounter 进行出入口计数;线状区域仅受 ObjectCounter 支持。

评论