跳转至内容

使用 Ultralytics YOLO26 进行物体计数

什么是目标计数?

在 Colab 中打开物体计数

使用 Ultralytics YOLO26 进行目标计数涉及在视频和摄像头流中准确识别和计数特定目标。YOLO26 凭借其最先进的算法和 深度学习 能力,在实时应用中表现出色,为人群分析和监控等各种场景提供高效、精确的目标计数。



观看: 如何使用 Ultralytics YOLO26 进行实时目标计数 🍏

对象计数的优势

  • 资源优化: 对象计数通过提供准确的计数来促进高效的资源管理,从而优化库存管理等应用中的资源分配。
  • 增强的安全性: 对象计数通过准确地跟踪和计数实体来增强安全性和监视,有助于主动威胁检测
  • 知情决策: 对象计数为决策提供了有价值的见解,优化了零售、交通管理和各种其他领域的流程。

实际应用

物流水产养殖
使用 Ultralytics YOLO26 进行传送带包裹计数使用 Ultralytics YOLO26 进行海洋鱼类计数
使用 Ultralytics YOLO26 进行传送带包裹计数使用 Ultralytics YOLO26 进行海洋鱼类计数

使用 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)]"

字段 region 参数接受两个点(用于一条线)或一个包含三个或更多点的多边形。按照它们应该连接的顺序定义坐标,以便计数器准确知道入口和出口发生的位置。

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)]  # rectangular 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="yolo26n.pt",  # model="yolo26n-obb.pt" for object counting with OBB model.
    # classes=[0, 2],  # count specific classes, e.g., person and car with the COCO pretrained model.
    # tracker="botsort.yaml",  # choose trackers, e.g., "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 参数:

参数类型默认值描述
modelstrNoneUltralytics YOLO 模型文件的路径。
show_inboolTrue控制是否在视频流上显示进入计数的标志。
show_outboolTrue控制是否在视频流上显示离开计数的标志。
regionlist'[(20, 400), (1260, 400)]'定义计数区域的点列表。

字段 ObjectCounter 解决方案允许使用多个 track 参数:

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

此外,还支持下面列出的可视化参数:

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

常见问题

如何在视频中计数物体,使用 Ultralytics YOLO26?

要使用 Ultralytics YOLO26 对视频中的目标进行计数,您可以按照以下步骤操作:

  1. 导入必要的库(cv2, ultralytics)。
  2. 定义计数区域(例如,多边形、线等)。
  3. 设置视频捕获并初始化对象计数器。
  4. 处理每一帧以track对象并在定义的区域内进行计数。

这是一个在区域中进行计数的简单示例:

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", "yolo26n.pt")

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

使用 Ultralytics YOLO26 进行目标计数有哪些优势?

使用 Ultralytics YOLO26 进行目标计数具有以下几个优势:

  1. 资源优化: 它通过提供准确的计数来促进高效的资源管理,从而帮助优化库存管理等行业的资源分配。
  2. 增强的安全性: 通过准确地跟踪和计数实体,增强了安全性和监视,有助于主动威胁检测和安全系统
  3. 明智的决策: 它为决策提供了有价值的见解,优化了零售、交通管理等领域的流程。
  4. 实时处理: YOLO26 的架构支持 实时推理,使其适用于实时视频流和时间敏感型应用。

有关实施示例和实际应用,请浏览 TrackZone 解决方案,了解如何在特定区域中跟踪对象。

如何使用 Ultralytics YOLO26 对特定类别的目标进行计数?

要使用 Ultralytics YOLO26 对特定类别的目标进行计数,您需要在 track 阶段指定您感兴趣的类别。下面是一个 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", "yolo26n.pt", [0, 2])

在这个例子中, classes_to_count=[0, 2] 表示它计算类别的对象 02 (例如,COCO 数据集中的人和汽车)。您可以在以下位置找到有关类索引的更多信息 COCO 数据集文档.

为什么在实时应用中应优先选择 YOLO26 而非其他 目标检测 模型?

Ultralytics YOLO26 相较于 Faster R-CNN、SSD 和之前的 YOLO 版本等其他目标检测模型,具有以下几个优势:

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

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

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

是的,Ultralytics YOLO26 凭借其实时 detect 能力、可扩展性和集成灵活性,非常适合人群分析和交通管理等高级应用。其先进功能可在动态环境中实现高精度目标 track、计数和分类。示例用例包括:

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

对于更专业的应用,请浏览 Ultralytics 解决方案,获取一套为应对现实世界计算机视觉挑战而设计的综合工具。



📅 创建于 2 年前 ✏️ 更新于 7 天前
glenn-jocherRizwanMunawarRizwanMunawarMatthewNoycepderrengerleonnilBurhan-QUltralyticsAssistantIvorZhu331AyushExel

评论