使用 Ultralytics YOLO26 的 TrackZone#
什么是 TrackZone?#
TrackZone 专注于监控画面指定区域内的对象,而不是整个画面。它基于 Ultralytics YOLO26 构建,将对象检测和跟踪专门应用于视频和实时摄像头画面中的区域。YOLO26 的先进算法和深度学习技术使其成为实时使用场景的理想选择,可在人员密集度监控和监控安防等应用中提供精准高效的对象跟踪。
Watch: How to Track Objects in Region using Ultralytics YOLO26 | TrackZone 🚀
区域内对象跟踪的优势(TrackZone)#
- 定向分析: 在特定区域内跟踪对象可以获得更聚焦的洞察,从而对感兴趣的区域(例如入口或限制区域)进行精准监控和分析。
- 减少下游工作负载: 忽略区域外的对象后,TrackZone 会移除无关检测结果,因此你在其上层逻辑中需要计数、记录或触发警报的对象更少。检测仍会在完整尺寸的掩膜画面上运行,而不是在区域的紧致裁剪图上运行,因此它带来的好处是输出更干净、更聚焦,而不是更快的模型推理。
- 增强安全性: 区域跟踪通过监控关键区域来提升安防能力,有助于及早发现异常活动或安全漏洞。
- 可扩展的解决方案: 通过聚焦特定区域,TrackZone 能够适应从零售空间到工业环境等各种场景,确保无缝集成并支持扩展。
实际应用#
| 农业 | 交通运输 |
|---|---|
![]() | ![]() |
| 使用 Ultralytics YOLO26 跟踪田间植物 | 使用 Ultralytics YOLO26 跟踪道路上的车辆 |
# Run a trackzone example
yolo solutions trackzone show=True
# Pass a source video
yolo solutions trackzone source="path/to/video.mp4" show=True
# Pass region coordinates
yolo solutions trackzone show=True region="[(150, 150), (1130, 150), (1130, 570), (150, 570)]"TrackZone 依赖 region 列表来确定要监控画面的哪一部分。定义多边形,使其匹配你关注的实际区域(门、闸门等),并在配置时保持 show=True 启用,以便确认叠加层与视频画面对齐。
region中的每个条目都是视频画面中的一个(x, y)像素坐标。按照应在你要监控区域的周边连接的顺序列出这些点。- 坐标与画面分辨率相关,因此为 1280×720 画面设置的区域无法与 640×480 画面对齐。配置时保留
show=True,以便确认叠加层与画面匹配。 TrackZone会将这些点缩减为其凸包,因此凹形会被简化为包含其所有点的最小凸多边形。对于非凸形状或多个分离区域,请改用 RegionCounter 解决方案。- 如果完全省略
region,则会使用默认区域[(75, 75), (565, 75), (565, 285), (75, 285)]。
TrackZone 参数#
下面是 TrackZone 参数表:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 模型文件的路径。 |
region | list 或 dict | None | 定义感兴趣区域的点,可以是 (x, y) 元组列表,也可以是将区域名称映射到多区域点列表的字典(仅限 RegionCounter)。当 None 时,需要区域的解决方案会回退到预定义的默认区域。 |
line_width | int | 2 | 解决方案绘制的框、关键点和计数的线条粗细。 |
verbose | bool | True | 启用解决方案逐帧记录输入形状、类别计数和处理速度的日志。跟踪调用本身始终保持静默。 |
TrackZone 解决方案支持以下 track 参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
tracker | str | 'botsort.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 | 推理精度:针对 PyTorch 和 TorchScript 模型,使用 16 (FP16) 或 32/不设置 (FP32);其他格式则在其工件和运行时选择的精度下进行计算。它替代了已弃用的 half 标志。 |
此外,还提供以下可视化选项:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
show | bool | False | 如果为 True,则会在窗口中显示带标注的图像或视频。适用于开发或测试期间获取即时视觉反馈。 |
show_conf | bool | True | 在每个检测结果旁显示其置信度分数,让你了解模型对每个检测结果的确定程度。 |
show_labels | bool | True | 在可视化输出中显示每个检测结果的标签,帮助你立即了解检测到的对象。 |
统计区域内的对象数量#
跟踪器的每次调用都会返回一个 SolutionResults 对象,其 total_tracks 属性保存当前区域内跟踪对象的数量。你可以在每一帧读取该属性来监控实时占用情况,例如记录入口或限制区域的繁忙程度:
import cv2
from ultralytics import solutions
cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"
region_points = [(150, 150), (1130, 150), (1130, 570), (150, 570)]
trackzone = solutions.TrackZone(show=False, region=region_points, model="yolo26n.pt")
while cap.isOpened():
success, im0 = cap.read()
if not success:
break
results = trackzone(im0)
print(f"Objects currently in zone: {results.total_tracks}") # live zone occupancy
cap.release()常见问题#
使用 Ultralytics YOLO26 跟踪视频画面中定义区域内的对象非常简单。只需使用下面提供的命令即可启动跟踪。这种方法可确保高效分析和准确结果,非常适合安防监控、人员密集度管理或任何需要区域跟踪的场景。
yolo solutions trackzone source="path/to/video.mp4" show=True只需几行代码,你就可以设置特定区域内的对象跟踪,从而轻松集成到你的项目中。
import cv2 from ultralytics import solutions cap = cv2.VideoCapture("path/to/video.mp4") assert cap.isOpened(), "Error reading video file" w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS)) video_writer = cv2.VideoWriter("trackzone_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h)) trackzone = solutions.TrackZone( show=True, region=[(150, 150), (1130, 150), (1130, 570), (150, 570)], model="yolo26n.pt" ) while cap.isOpened(): success, im0 = cap.read() if not success: break results = trackzone(im0) video_writer.write(results.plot_im) cap.release() video_writer.release() cv2.destroyAllWindows()使用 Ultralytics TrackZone 配置视频处理的区域点简单且灵活。你可以通过 Python 脚本直接定义和调整区域,从而精确控制要监控的范围。
# Define region points region_points = [(150, 150), (1130, 150), (1130, 570), (150, 570)] # Initialize trackzone trackzone = solutions.TrackZone( show=True, # display the output region=region_points, # pass region points )请记住,
TrackZone会将这些点缩减为其凸包,因此请按照要监控区域周边的顺序列出这些点。这三种解决方案都支持区域,但它们要解决的问题不同:
解决方案 用途 典型输出 TrackZone 跟踪对象并监控单个凸区域内的实时占用情况 跟踪 ID 以及该区域的 total_tracksObjectCounter 统计穿过线或进出区域的对象数量 累计进入和离开数量 RegionCounter 统计一个或多个任意区域(包括非凸区域)内的对象数量 每个区域的对象数量 如果你需要在一个区域内进行连续跟踪,请选择 TrackZone;如果需要多个区域或非凸形状,请选择 RegionCounter。

