跳至内容

使用对象计数Ultralytics YOLO11

什么是对象计数?

Colab 中的开放对象计数

使用 Ultralytics YOLO11YOLO11 在实时应用中表现出色,凭借其先进的算法和深度学习能力,可为人群分析和监控等各种场景提供高效、精确的物体计数。



观看: 按类对象计数Ultralytics YOLOv8

物体计数的优势

  • 资源优化:物体计数通过提供精确的计数,优化库存管理等应用中的资源分配,从而促进有效的资源管理。
  • 增强安全性:物体计数可准确跟踪和计数实体,有助于主动探测威胁,从而增强安全性和监控能力。
  • 知情决策:物体计数为决策、优化零售、交通管理和其他各种领域的流程提供了宝贵的见解。

真实世界的应用

物流 水产养殖
使用传送带包装计数Ultralytics YOLO11 利用海洋数鱼Ultralytics YOLO11
使用传送带包装计数Ultralytics YOLO11 利用海洋数鱼Ultralytics YOLO11

使用Ultralytics YOLO进行对象计数

# Run a counting example
yolo solutions count show=True

# Pass a source video
yolo solutions count source="path/to/video.mp4"

# Pass region coordinates
yolo solutions count region="[(20, 400), (1080, 400), (1080, 360), (20, 360)]"
import cv2

from ultralytics import solutions

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

# region_points = [(20, 400), (1080, 400)]                                      # line counting
region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]  # rectangle region
# region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360), (20, 400)]   # polygon region

# 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("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

# Initialize object counter object
counter = solutions.ObjectCounter(
    show=True,  # display the output
    region=region_points,  # pass region points
    model="yolo11n.pt",  # model="yolo11n-obb.pt" for object counting with OBB model.
    # classes=[0, 2],  # count specific classes i.e. person and car with COCO pretrained model.
    # tracker="botsort.yaml",  # choose trackers i.e "bytetrack.yaml"
)

# Process video
while cap.isOpened():
    success, im0 = cap.read()

    if not success:
        print("Video frame is empty or processing is complete.")
        break

    results = counter(im0)

    # print(results)  # access the output

    video_writer.write(results.plot_im)  # write the processed frame.

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

ObjectCounter 论据

下面的表格显示了 ObjectCounter 争论:

论据 类型 默认值 说明
model str None Ultralytics YOLO 模型文件的路径。
show_in bool True 用于控制是否在视频流中显示输入计数的标志。
show_out bool True 用于控制是否在视频流中显示输出计数的标志。
region list [(20, 400), (1260, 400)] 定义计数区域的点列表。

"(《世界人权宣言》) ObjectCounter 该解决方案允许使用多个 track 争论:

论据 类型 默认值 说明
tracker str 'botsort.yaml' 指定要使用的跟踪算法,例如 bytetrack.yamlbotsort.yaml.
conf float 0.3 设置检测的置信度阈值;数值越低,跟踪的物体越多,但可能会出现误报。
iou float 0.5 设置交叉重叠 (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根据图像大小自动调整线宽。提供可视化定制,使图像更加清晰。

常见问题

如何使用Ultralytics YOLO11 计数视频中的物体?

要使用Ultralytics YOLO11 计数视频中的物体,可以按照以下步骤进行:

  1. 导入必要的程序库 (cv2, ultralytics).
  2. 定义计算区域(如多边形、直线等)。
  3. 设置视频捕捉并初始化对象计数器。
  4. 处理每个帧,以跟踪定义区域内的对象并对其进行计数。

下面是一个简单的区域计数示例:

import cv2

from ultralytics import solutions


def count_objects_in_region(video_path, output_video_path, model_path):
    """Count objects in a specific region within a video."""
    cap = cv2.VideoCapture(video_path)
    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(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

    region_points = [(20, 400), (1080, 400), (1080, 360), (20, 360)]
    counter = solutions.ObjectCounter(show=True, region=region_points, model=model_path)

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or processing is complete.")
            break
        results = counter(im0)
        video_writer.write(results.plot_im)

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


count_objects_in_region("path/to/video.mp4", "output_video.avi", "yolo11n.pt")

如需更高级的配置和选项,请查看RegionCounter 解决方案,以同时对多个区域中的对象进行计数。

使用Ultralytics YOLO11 进行物体计数有哪些优势?

使用Ultralytics YOLO11 进行物体计数有几个优点:

  1. 资源优化:它通过提供精确的计数来促进有效的资源管理,帮助优化库存管理等行业的资源分配。
  2. 增强安全性:它能准确跟踪和计算实体,协助主动式威胁检测和安全系统,从而加强安全和监控。
  3. 知情决策:它为零售、交通管理等领域的决策和流程优化提供了宝贵的见解。
  4. 实时处理: YOLO11 的架构可实现实时推理,因此适用于实时视频流和时间敏感型应用。

有关实施示例和实际应用,请探索用于在特定区域跟踪物体的TrackZone 解决方案

如何使用Ultralytics YOLO11 对特定类别的对象进行计数?

要使用Ultralytics YOLO11 统计特定类别的对象,您需要在跟踪阶段指定您感兴趣的类别。下面是Python 示例:

import cv2

from ultralytics import solutions


def count_specific_classes(video_path, output_video_path, model_path, classes_to_count):
    """Count specific classes of objects in a video."""
    cap = cv2.VideoCapture(video_path)
    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(output_video_path, cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))

    line_points = [(20, 400), (1080, 400)]
    counter = solutions.ObjectCounter(show=True, region=line_points, model=model_path, classes=classes_to_count)

    while cap.isOpened():
        success, im0 = cap.read()
        if not success:
            print("Video frame is empty or processing is complete.")
            break
        results = counter(im0)
        video_writer.write(results.plot_im)

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


count_specific_classes("path/to/video.mp4", "output_specific_classes.avi", "yolo11n.pt", [0, 2])

在这个例子中 classes_to_count=[0, 2] 的对象。 02 (例如 COCO 数据集中的人和车)。有关类索引的更多信息,请参阅 COCO 数据集文档.

在实时应用中,为什么要使用YOLO11 而不是其他物体检测模型?

Ultralytics YOLO11 与其他物体检测模型(如Faster R-CNN、SSD 和以前的YOLO 版本)相比,具有多项优势:

  1. 速度和效率: YOLO11 具有实时处理能力,非常适合需要高速推理的应用,如监控和自动驾驶
  2. 准确性它为物体检测和跟踪任务提供了最先进的准确性,减少了误报的数量,提高了整个系统的可靠性。
  3. 易于集成: YOLO11 提供与各种平台和设备(包括移动设备和边缘设备)的无缝集成,这对现代人工智能应用至关重要。
  4. 灵活性:支持对象检测、分割和跟踪等各种任务,可配置模型以满足特定用例的要求。

请查阅Ultralytics YOLO11 文档,深入了解其功能和性能比较。

我能否将YOLO11 用于人群分析和交通管理等高级应用?

Ultralytics YOLO11 具有实时检测能力、可扩展性和集成灵活性,非常适合人群分析和交通管理等高级应用。其先进的功能可在动态环境中实现高精度的目标跟踪、计数和分类。使用实例包括

  • 人群分析:监控和管理大型集会,确保安全,并通过基于区域的计数优化人流。
  • 交通管理:跟踪和统计车辆,分析交通模式,并利用速度估算功能实时管理拥堵状况。
  • 零售分析:分析顾客流动模式和产品互动,优化店铺布局,改善顾客体验。
  • 工业自动化:清点传送带上的产品,监控生产线以控制质量和提高效率。

如需了解更多专业应用,请访问Ultralytics 解决方案,了解专为应对真实世界计算机视觉挑战而设计的一整套工具。

📅创建于 1 年前 ✏️已更新 5 天前

评论