Link to this section使用 Ultralytics YOLO26 进行 TrackZone#
Link to this section什么是 TrackZone?#
TrackZone 专门用于监测帧中指定区域内的对象,而不是整个帧。它基于 Ultralytics YOLO26 构建,专门集成了视频和实时摄像机流中区域内的对象检测和 tracking 功能。YOLO26 先进的算法和 deep learning 技术使其成为实时用例的理想选择,能在人群监控和安防等应用中提供精确高效的对象跟踪。
Watch: How to Track Objects in Region using Ultralytics YOLO26 | TrackZone 🚀
Link to this section区域对象跟踪 (TrackZone) 的优势#
- 目标分析: 在特定区域内跟踪对象可以获得更聚焦的见解,实现对感兴趣区域(如入口点或限制区域)的精确监控和分析。
- 减少下游工作负载: 通过忽略区域外的对象,TrackZone 消除了不相关的检测结果,因此在你基于此构建的逻辑中,需要计数、记录或触发警报的对象会更少。检测仍然在全尺寸遮罩帧上运行,而不是区域的紧密裁剪,因此这样做的好处是输出更简洁、更专注,而不是提高模型推理速度。
- 增强安全性: 区域跟踪通过监控关键区域来加强安防,有助于及早发现异常活动或安全漏洞。
- 可扩展的解决方案: 聚焦特定区域的能力使得 TrackZone 能够适应从零售空间到工业环境等各种场景,确保无缝集成和可扩展性。
Link to this section现实世界应用#
| 农业 | 交通运输 |
|---|---|
| 使用 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会将这些点简化为它们的 convex hull,因此凹形会被简化为包含其所有点的最小凸多边形。对于非凸形状或多个独立区域,请改用 RegionCounter 解决方案。- 如果你完全省略
region,则会使用默认区域[(75, 75), (565, 75), (565, 285), (75, 285)]。
Link to this sectionTrackZone 参数#
下表列出了 TrackZone 的参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 模型文件的路径。 |
region | list | '[(20, 400), (1260, 400)]' | 定义计数区域的点列表。 |
TrackZone 解决方案包含对 track 参数的支持:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
tracker | str | 'botsort.yaml' | 指定要使用的追踪算法。内置选项包括:botsort.yaml、bytetrack.yaml、ocsort.yaml、deepocsort.yaml、fasttrack.yaml、tracktrack.yaml。 |
conf | float | 0.1 | 设置检测的置信度阈值;较低的值允许跟踪更多的对象,但也可能包含误报。 |
iou | float | 0.7 | 设置用于过滤重叠检测的 交并比 (IoU) 阈值。 |
classes | list | None | 按类别索引过滤结果。例如,classes=[0, 2, 3] 仅跟踪指定的类别。 |
verbose | bool | True | 控制跟踪结果的显示,提供被跟踪对象的视觉输出。 |
device | str | None | 指定推理设备(例如 cpu、cuda:0 或 0)。允许用户在 CPU、特定的 GPU 或其他计算设备之间进行选择以执行模型。 |
此外,还提供了以下可视化选项:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
show | bool | False | 如果为 True,则在窗口中显示标注后的图像或视频。这对于开发或测试过程中的即时视觉反馈非常有用。 |
line_width | int or None | None | 指定边界框的线条宽度。如果为 None,则线条宽度会根据图像尺寸自动调整。提供用于清晰度的视觉自定义功能。 |
show_conf | bool | True | 在标签旁显示每次检测的置信度得分。让你深入了解模型对每次检测的确定性。 |
show_labels | bool | True | 在视觉输出中显示每次检测的标签。提供对检测到对象的即时理解。 |
Link to this section统计区域内的对象#
每次对跟踪器进行调用都会返回一个 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()Link to this section常见问题解答#
Link to this section如何使用 Ultralytics YOLO26 在视频画面的特定区域或区域内跟踪对象?#
使用 Ultralytics YOLO26 在视频画面的定义区域或区域内跟踪对象非常直接。只需使用下面提供的命令启动跟踪即可。这种方法确保了高效的分析和准确的结果,非常适合监控、人群管理或任何需要区域跟踪的场景。
yolo solutions trackzone source="path/to/video.mp4" show=TrueLink to this section如何使用 Python 配合 Ultralytics YOLO26 使用 TrackZone?#
只需几行代码,你就可以设置特定区域的对象跟踪,从而轻松集成到你的项目中。
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()Link to this section如何使用 Ultralytics TrackZone 为视频处理配置区域点?#
使用 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 会将点简化为其凸包,因此请按你想要监测的区域周边顺序排列它们。
Link to this section我应该何时使用 TrackZone 而不是 ObjectCounter 或 RegionCounter?#
这三种解决方案都适用于区域,但它们回答的问题不同:
| 解决方案 | 使用它来实现 | 典型输出 |
|---|---|---|
| TrackZone | 在单个凸区域内跟踪对象并监测实时占用情况 | 跟踪到的 ID 和区域内的 total_tracks |
| ObjectCounter | 统计穿过线条或进入并离开某个区域的对象 | 累计进入和离开的计数 |
| RegionCounter | 统计一个或多个任意区域(包括非凸区域)内的对象 | 每个区域的对象计数 |
当你需要在单个区域内进行连续跟踪时选择 TrackZone,当你需要多个区域或非凸形状时选择 RegionCounter。