使用 Ultralytics YOLO26 进行对象计数

什么是对象计数?

在 Colab 中打开对象计数

使用 Ultralytics YOLO26 进行对象计数,涉及对视频和摄像机流中的特定对象进行精确识别与计数。得益于其最先进的算法和 深度学习 功能,YOLO26 在实时应用中表现出色,能够为人群分析和监控等多种场景提供高效且精确的对象计数。



Watch: How to Perform Real-Time Object Counting with 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 参数接受两点(用于线)或三个及以上点的多边形。请按连接顺序定义坐标,以便计数器准确知晓进入和离开的位置。

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设置过滤重叠检测的 Intersection over Union (IoU) 阈值。
classeslistNone按类别索引过滤结果。例如,classes=[0, 2, 3] 将仅跟踪指定的类别。
verboseboolTrue控制跟踪结果的显示,提供跟踪对象的视觉输出。
devicestrNone指定推理设备(例如 cpucuda:00)。允许用户选择 CPU、特定的 GPU 或其他计算设备来执行模型。

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

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

常见问题 (FAQ)

如何使用 Ultralytics YOLO26 对视频中的对象进行计数?

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

  1. 导入必要的库(cv2ultralytics)。
  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", "yolo26n.pt")

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

使用 Ultralytics YOLO26 进行对象计数有什么优势?

使用 Ultralytics YOLO26 进行对象计数具有以下优势:

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

如需实施示例和实际应用,请探索 TrackZone 解决方案,以在特定区域内跟踪对象。

如何使用 Ultralytics YOLO26 统计特定类别的对象?

要使用 Ultralytics YOLO26 统计特定类别的对象,你需要在跟踪阶段指定感兴趣的类别。以下是一个 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 而不是其他 对象检测 模型?

相比于 Faster R-CNN、SSD 和之前的 YOLO 版本,Ultralytics YOLO26 具有以下优势:

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

查看 Ultralytics YOLO26 文档 以深入了解其功能和性能对比。

我可以将 YOLO26 用于人群分析和交通管理等高级应用吗?

是的,由于其实时检测能力、可扩展性和集成灵活性,Ultralytics YOLO26 非常适合用于人群分析和交通管理等高级应用。其先进的功能允许在动态环境中进行高精度的对象跟踪、计数和分类。示例用例包括:

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

对于更专业的应用,请探索 Ultralytics 解决方案,其中包含一套专为现实世界计算机视觉挑战而设计的综合工具。

评论