Meet YOLO26: next-gen vision AI.

Link to this section使用 Ultralytics YOLO26 进行区域对象计数#

The RegionCounter solution in Ultralytics YOLO26 tracks objects across video frames and, on every frame, counts the objects whose bounding-box center falls inside each region you define. Each region is drawn on the frame with its own live count, so you can monitor several zones, such as store aisles, road lanes, or production areas, with a single Python call or CLI command.



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

Link to this section为什么要使用区域计数?#

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

Link to this section现实世界应用#

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

Link to this section如何使用 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)]"

Link to this sectionRegionCounter() 参数#

这是一个包含 RegionCounter 参数的表格:

参数类型默认值描述
modelstrNoneUltralytics YOLO 模型文件的路径。
regionlistdictNone定义感兴趣区域的点,可以是 (x, y) 元组列表,也可以是将区域名称映射到点列表的字典(仅适用于 RegionCounter)。当为 None 时,需要区域的解决方案将回退到预定义的默认值。

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

参数类型默认值描述
trackerstr'botsort.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在视觉输出中显示每次检测的标签。提供对检测到对象的即时理解。

Link to this section区域计数的工作原理#

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

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

由于计数在每一帧都会重新开始,区域上显示的数字代表其当前的占用情况,即当前有多少对象在里面,而不是累计总数。如需累计计算跨越边界的对象,请改用 ObjectCounter 解决方案

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

Link to this section结论#

Ultralytics YOLO26 RegionCounter 解决方案只需几行代码,即可监控任意数量命名区域内的实时对象计数。如需进一步了解,请使用 对象计数 来计算跨越边界的数量,使用 TrackZone 在单个区域内跟踪对象,或探索其他 Ultralytics 解决方案

Link to this section常见问题解答#

Link to this sectionUltralytics YOLO26 中的区域对象计数是如何工作的?#

Ultralytics YOLO26 通过跟踪帧中的每个对象,并测试其边界框中心是否位于用户定义的多边形内,来计算区域内的对象。区域上显示的计数是该帧的当前占用率,而非累计总数。配置选项列在 RegionCounter() 参数 部分。

Link to this section如何同时计算多个区域的对象?#

Pass the region argument as a dictionary that maps zone names to point lists, as in the main example:

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)

每个命名区域都会以各自的颜色绘制并显示独立的计数。

Link to this section如何以程序化方式获取区域计数?#

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

Link to this section我能在区域内仅计算特定的对象类别吗?#

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

Link to this sectionRegionCounter 和 ObjectCounter 之间有什么区别?#

RegionCounter 显示当前帧中每个多边形区域内的对象数量,而 ObjectCounter 则在对象跨越线或区域边界时进行累计计数,跟踪进出总数。使用 RegionCounter 来获取一个或多个区域的实时占用情况,使用 ObjectCounter 来进行进出计数;线形区域仅由 ObjectCounter 支持。

评论