Ultralytics YOLO27:
Get Started

使用 Ultralytics YOLO26 进行目标计数#

什么是目标计数?#

Open Object Counting In Colab

使用 Ultralytics YOLO26 进行目标计数,涉及在视频和摄像头流中准确识别并统计特定目标。YOLO26 擅长实时应用,凭借先进的算法和 深度学习 能力,可在客流分析和监控等各种场景中高效、精准地统计目标。



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

目标计数的优势#

  • 资源优化: 目标计数可提供准确的数量,帮助高效管理资源并优化资源分配,例如用于库存管理的应用。
  • 增强安全性: 目标计数可准确跟踪和统计实体,提升安全防护与监控能力,助力主动进行威胁检测。
  • 辅助决策: 目标计数可为决策提供有价值的见解,优化零售、交通管理及其他领域的流程。

实际应用#

物流水产养殖
使用 Ultralytics YOLO26 统计传送带上的包裹使用 Ultralytics YOLO26 统计海洋中的鱼类
使用 Ultralytics YOLO26 统计传送带上的包裹使用 Ultralytics YOLO26 统计海洋中的鱼类

使用 YOLO26 统计目标#

定义一个计数 region——线段使用两个点,多边形使用三个或更多点——并将其传递给 ObjectCounter 解决方案。计数器会跨帧跟踪每个目标,并在跟踪到的目标穿过线段或经过区域时统计进入/离开数量,返回一个已标注的帧,你可以将其写入输出视频。

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

ObjectCounter 解决方案支持使用多个 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在可视化输出中显示每个检测结果的标签,便于立即了解检测到的对象。

常见问题#

  • 使用 Ultralytics YOLO26 统计视频中的目标,可以按以下步骤操作:

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

    如需更高级的配置和选项,请查看 RegionCounter 解决方案,了解如何同时统计多个区域中的目标。

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

    1. 资源优化: 它能提供准确的数量,帮助高效管理资源并优化资源分配,例如用于库存管理的行业应用。
    2. 增强安全性: 它能准确跟踪和统计实体,提升安全防护与监控能力,助力主动进行威胁检测和构建安全系统。
    3. 辅助决策: 它能为决策提供有价值的见解,优化零售、交通管理等领域的流程。
    4. 实时处理: YOLO26 的架构支持实时推理,适用于实时视频流和对时效性要求较高的应用。

    如需了解实现示例和实际应用,请探索 TrackZone 解决方案,了解如何跟踪特定区域内的目标。

  • 要使用 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] 表示统计类别为 0 和 2 的目标(例如 COCO 数据集中的 person 和 car)。有关类别索引的更多信息,请参阅 COCO 数据集文档。

  • 与 Faster R-CNN、SSD 和早期 YOLO 版本等其他目标检测模型相比,Ultralytics YOLO26 具有以下优势:

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

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

  • 可以。凭借实时检测能力、可扩展性和灵活的集成方式,Ultralytics YOLO26 非常适合客流分析和交通管理等高级应用。它的高级功能可在动态环境中实现高精度目标跟踪、计数和分类。应用示例包括:

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

    如需了解更专业的应用,请探索 Ultralytics Solutions,其中包含一套全面的工具,专为解决现实世界中的计算机视觉挑战而设计。

评论