YOLO Vision 2026:

使用 Ultralytics YOLO26 进行 TrackZone#

什么是 TrackZone?#

Open TrackZone In Colab

TrackZone 专注于监控画面中指定区域内的对象,而不是整个画面。它基于 Ultralytics YOLO26 构建,专门在视频和实时摄像机流的区域内集成对象检测和跟踪。YOLO26 的先进算法和深度学习技术使其成为实时用例的理想选择,在人群监控和安防等应用中提供精确高效的对象跟踪。



Watch: How to Track Objects in Region using Ultralytics YOLO26 | TrackZone 🚀

区域对象跟踪 (TrackZone) 的优势#

  • 目标分析: 在特定区域内跟踪对象可以获得更聚焦的见解,实现对感兴趣区域(如入口点或限制区域)的精确监控和分析。
  • 减少下游工作负载: 通过忽略区域外的对象,TrackZone 消除了不相关的检测结果,因此在你基于此构建的逻辑中,需要计数、记录或触发警报的对象会更少。检测仍然在全尺寸遮罩帧上运行,而不是区域的紧密裁剪,因此这样做的好处是输出更简洁、更专注,而不是提高模型推理速度。
  • 增强安全性: 区域跟踪通过监控关键区域来加强安防,有助于及早发现异常活动或安全漏洞。
  • 可扩展的解决方案: 聚焦特定区域的能力使得 TrackZone 能够适应从零售空间到工业环境等各种场景,确保无缝集成和可扩展性。

现实世界应用#

农业交通运输
Plants Tracking in Field Using Ultralytics YOLO26Vehicles Tracking on Road using Ultralytics YOLO26
使用 Ultralytics YOLO26 进行田间植物跟踪使用 Ultralytics YOLO26 进行道路车辆跟踪
使用 Ultralytics YOLO 进行 TrackZone
# 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 参数的表格:

参数类型默认值描述
modelstrNoneUltralytics YOLO 模型文件的路径。
regionlistdictNone定义感兴趣区域的点,可以是 (x, y) 元组的列表,也可以是将区域名称映射到多个区域的点列表的字典(仅限 RegionCounter)。当为 None 时,需要区域的解决方案将回退到预定义的默认值。
line_widthint2解决方案绘制的框、关键点和计数的线条粗细。
verboseboolTrue启用解决方案针对每帧的输入形状、类别计数和处理速度的日志记录。跟踪调用本身始终是静默的。

TrackZone 解决方案包含对 track 参数的支持:

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

此外,还提供了以下可视化选项:

参数类型默认值描述
showboolFalse如果为 True,则在窗口中显示带注释的图像或视频。对于开发或测试期间的即时视觉反馈非常有用。
show_confboolTrue在标签旁显示每次检测的置信度得分。让你深入了解模型对每次检测的确定性。
show_labelsboolTrue在视觉输出中显示每次检测的标签。提供对检测到对象的即时理解。

统计区域内的对象#

对跟踪器的每次调用都会返回一个 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_tracks
    ObjectCounter统计穿过线条或进入并离开某个区域的对象累计进入和离开的计数
    RegionCounter统计一个或多个任意区域(包括非凸区域)内的对象每个区域的对象计数

    当你想要在单个区域内进行持续跟踪时选择 TrackZone,当你需要多个区域或非凸形状时选择 RegionCounter

评论