Ultralytics YOLO27:
Get Started

使用 Ultralytics YOLO26 进行 TrackZone#

什么是 TrackZone?#

Open TrackZone In Colab

TrackZone 专注于监控帧中指定区域内的物体,而不是整个画面。它基于 Ultralytics YOLO26 构建,将目标检测和跟踪专门应用于视频和实时摄像头画面中的区域。YOLO26 的先进算法和深度学习技术使其成为实时应用场景的理想选择,能够在群体监控和安防等应用中精准、高效地跟踪物体。



观看: 如何使用 Ultralytics YOLO26 跟踪区域内的目标 | TrackZone 🚀

区域内目标跟踪(TrackZone)的优势#

  • 针对性分析:在特定区域内跟踪物体,可以获得更有针对性的洞察,从而精准监控和分析感兴趣的区域,例如入口或限制区域。
  • 减少下游工作量:TrackZone 会忽略区域外的物体并移除无关检测结果,因此你在其上构建的逻辑需要计数、记录或发出警报的物体更少。检测仍会在完整尺寸的掩码帧上运行,而不是对区域进行紧密裁剪,因此它带来的好处是输出更整洁、更聚焦,而不是模型推理速度更快。
  • 提升安全性:区域跟踪通过监控关键区域改善安防监控,有助于及早发现异常活动或安全漏洞。
  • 可扩展的解决方案:TrackZone 能够聚焦特定区域,因此可适用于各种场景,从零售空间到工业环境,确保无缝集成和扩展。

实际应用#

农业交通运输
使用 Ultralytics YOLO26 跟踪田间植物使用 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 模型文件的路径。
regionlist 或 dictNone定义感兴趣区域的点,可以是 (x, y) 元组列表,也可以是将区域名称映射到点列表的字典(仅支持多个 RegionCounter 区域)。如果为 None,则需要区域的解决方案会退回到预定义的默认区域。
line_widthint2解决方案绘制的框、关键点和计数的线条粗细。
verboseboolTrue启用逐帧日志,记录输入形状、类别计数和处理速度。跟踪调用本身始终不会输出日志。

TrackZone 解决方案支持 track 参数:

参数类型默认值说明
trackerstr'tracktrack.yaml'指定要使用的跟踪算法。内置选项:botsort.yaml、bytetrack.yaml、ocsort.yaml、deepocsort.yaml、fasttrack.yaml、tracktrack.yaml。
conffloat0.25设置检测的置信度阈值;较低的值允许跟踪更多物体,但可能会包含误检。
ioufloat0.7设置用于筛除重叠检测结果的交并比 (IoU) 阈值。
classeslistNone按类别索引筛选结果。例如,classes=[0, 2, 3] 只跟踪指定类别。
devicestrNone指定推理设备(例如 cpu、cuda:0 或 0)。用户可以选择 CPU、特定 GPU 或其他计算设备来运行模型。
imgszint or tuple640目标推理图像尺寸:正方形图像使用整数,或使用 (height, width) 对。图像尺寸会调整为模型步幅的整数倍。
max_detint300跟踪前每帧保留的最大检测数量,用于限制解决方案在密集场景中处理的物体数量。
quantizeint or strNone推理精度:对于非 CPU 上运行的 PyTorch 和 TorchScript 模型,使用 16 (FP16) 或 32/unset (FP32) 进行选择;其他格式使用其模型文件和运行时所选的精度。此参数替代已弃用的 half 参数。

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

参数类型默认值说明
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 脚本直接定义和调整区域,从而精准控制要监控的范围。

    from ultralytics import solutions
    
    # 定义区域点
    region_points = [(150, 150), (1130, 150), (1130, 570), (150, 570)]
    
    # 初始化 TrackZone
    trackzone = solutions.TrackZone(
        show=True,  # 显示输出
        region=region_points,  # 传入区域点
    )

    请记住,TrackZone 会将这些点简化为凸包,因此凹形轮廓会被简化为包含所有点的最小凸多边形。

  • 这三种解决方案都支持区域,但它们回答的问题各不相同:

    解决方案适用场景典型输出
    TrackZone跟踪单个凸区域内的物体并监控实时占用情况跟踪 ID 和该区域的 total_tracks
    ObjectCounter统计穿过线条或进出某个区域的物体累计进出数量
    RegionCounter统计一个或多个任意形状(包括非凸形状)区域内的物体各区域的物体计数

    如果你想在单个区域内持续跟踪,请选择 TrackZone;如果需要多个区域或非凸形状,请选择 RegionCounter。

评论