跳转至内容

使用 Ultralytics YOLO11 的 TrackZone

在 Colab 中打开 TrackZone

什么是 TrackZone?

TrackZone 专门用于监视帧的指定区域内的对象,而不是整个帧。它基于 Ultralytics YOLO11 构建,集成了视频和实时摄像机馈送中特定区域内的对象检测和跟踪。YOLO11 的先进算法和 深度学习 技术使其成为实时用例的完美选择,可在人群监控和监视等应用中提供精确高效的对象跟踪。



观看: 如何使用 Ultralytics YOLO11 在区域中跟踪对象 | TrackZone 🚀

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

  • 目标分析: 跟踪特定区域内的对象可以实现更有针对性的洞察,从而能够对感兴趣区域(如入口点或限制区域)进行精确的监控和分析。
  • 更高的效率: 通过将跟踪范围缩小到定义的区域,TrackZone 减少了计算开销,从而确保更快的处理速度和最佳性能。
  • 增强安全性: 区域跟踪通过监控关键区域来改进监控,有助于及早发现异常活动或安全漏洞。
  • 可扩展的解决方案: 专注于特定区域的能力使 TrackZone 能够适应各种场景,从零售空间到工业环境,确保无缝集成和可扩展性。

实际应用

农业 运输
使用 Ultralytics YOLO11 在田野中进行植物追踪 使用 Ultralytics YOLO11 在道路上进行车辆跟踪
使用 Ultralytics YOLO11 在田野中进行植物追踪 使用 Ultralytics YOLO11 在道路上进行车辆跟踪

使用 Ultralytics YOLO 的 TrackZone

# Run a trackzone example
yolo solutions trackzone show=True

# Pass a source video
yolo solutions trackzone show=True source="path/to/video.mp4"

# Pass region coordinates
yolo solutions trackzone show=True region="[(150, 150), (1130, 150), (1130, 570), (150, 570)]"
import cv2

from ultralytics import solutions

cap = cv2.VideoCapture("path/to/video.mp4")
assert cap.isOpened(), "Error reading video file"

# Define region points
region_points = [(150, 150), (1130, 150), (1130, 570), (150, 570)]

# Video writer
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))

# Init trackzone (object tracking in zones, not complete frame)
trackzone = solutions.TrackZone(
    show=True,  # display the output
    region=region_points,  # pass region points
    model="yolo11n.pt",  # use any model that Ultralytics support, i.e. YOLOv9, YOLOv10
    # line_width=2,  # adjust the line width for bounding boxes and text display
)

# Process video
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or processing is complete.")
        break

    results = trackzone(im0)

    # print(results)  # access the output

    video_writer.write(results.plot_im)  # write the video file

cap.release()
video_writer.release()
cv2.destroyAllWindows()  # destroy all opened windows

TrackZone 参数

这是一个包含以下内容的表格 TrackZone 参数:

参数 类型 默认值 描述
model str None Ultralytics YOLO 模型文件的路径。
region list '[(20, 400), (1260, 400)]' 定义计数区域的点列表。

TrackZone 解决方案包括对以下内容的支持 track 参数:

参数 类型 默认值 描述
tracker str 'botsort.yaml' 指定要使用的跟踪算法,例如: bytetrack.yamlbotsort.yaml.
conf float 0.3 设置检测的置信度阈值;较低的值允许跟踪更多对象,但可能包含误报。
iou float 0.5 设置用于过滤重叠检测的 Intersection over Union (IoU) 阈值。
classes list None 按类别索引过滤结果。例如, classes=[0, 2, 3] 仅跟踪指定的类别。
verbose bool True 控制跟踪结果的显示,提供被跟踪对象的可视化输出。
device str None 指定用于推理的设备(例如, cpu, cuda:00)。允许用户在 CPU、特定 GPU 或其他计算设备之间进行选择,以执行模型。

此外,以下可视化选项可用:

参数 类型 默认值 描述
show bool False 可视化参数: True,则在窗口中显示带注释的图像或视频。这对于开发或测试期间的即时视觉反馈非常有用。
line_width None or int None 指定边界框的线条宽度。 如果 None,则线条宽度会根据图像大小自动调整。 提供视觉自定义以提高清晰度。
show_conf bool True 在标签旁边显示每个检测的置信度分数。 可以深入了解模型对每次检测的确定性。
show_labels bool True 在可视化输出中显示每个检测的标签。 能够立即理解检测到的对象。

常见问题

如何使用 Ultralytics YOLO11 跟踪视频帧中特定区域或地带中的对象?

使用 Ultralytics YOLO11 可以直接在视频帧的定义区域或区域内跟踪对象。只需使用下面提供的命令来启动跟踪。这种方法确保了高效的分析和准确的结果,使其成为监控、人群管理或任何需要区域跟踪的场景的理想选择。

yolo solutions trackzone source="path/to/video.mp4" show=True

如何在 Python 中将 TrackZone 与 Ultralytics YOLO11 结合使用?

只需几行代码,您就可以在特定区域设置目标跟踪,从而轻松集成到您的项目中。

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))

# Define region points
region_points = [(150, 150), (1130, 150), (1130, 570), (150, 570)]

# Video writer
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Init trackzone (object tracking in zones, not complete frame)
trackzone = solutions.TrackZone(
    show=True,  # display the output
    region=region_points,  # pass region points
    model="yolo11n.pt",
)

# Process video
while cap.isOpened():
    success, im0 = cap.read()
    if not success:
        print("Video frame is empty or video processing has been successfully completed.")
        break
    results = trackzone(im0)
    video_writer.write(results.plot_im)

cap.release()
video_writer.release()
cv2.destroyAllWindows()

如何使用 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
)


📅 9 个月前创建 ✏️ 4 个月前更新

评论