使用 Ultralytics YOLO26 进行目标计数#
什么是目标计数?#
使用 Ultralytics YOLO26 进行目标计数,涉及对视频和摄像头流中的特定目标进行准确识别和计数。得益于先进的算法和 深度学习 能力,YOLO26 在实时应用中表现出色,可为人群分析、监控等各种场景提供高效且精准的目标计数。
Watch: How to Perform Real-Time Object Counting with Ultralytics YOLO26 🚀
目标计数的优势#
- **资源优化:**目标计数可提供准确的计数结果,从而实现高效的资源管理,优化 库存管理 等应用中的资源分配。
- **增强安全性:**目标计数可准确跟踪和计数实体,从而增强安全与监控能力,帮助主动进行 威胁检测。
- **助力决策:**目标计数可为决策提供有价值的洞察,优化零售、交通管理 及其他领域中的流程。
实际应用#
| 物流 | 水产养殖 |
|---|---|
![]() | ![]() |
| 使用 Ultralytics YOLO26 对传送带上的包裹进行计数 | 使用 Ultralytics YOLO26 对海中鱼类进行计数 |
使用 YOLO26 计数目标#
定义一个计数 region——直线需要两个点,多边形需要三个或更多点——并将其传递给 ObjectCounter 解决方案。计数器会跨帧跟踪每个目标,并在被跟踪目标穿过直线或通过区域时统计 IN/OUT 数量,返回一个带标注的帧,你可以将其写入输出视频。
# 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 参数表:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
model | str | None | Ultralytics YOLO 模型文件的路径。 |
show_in | bool | True | 控制是否在视频流中显示进入计数的标志。 |
show_out | bool | True | 控制是否在视频流中显示离开计数的标志。 |
region | list 或 dict | None | 定义感兴趣区域的点,可以是 (x, y) 元组列表,也可以是将区域名称映射到多区域点列表的字典(仅限 RegionCounter)。当 None 时,需要区域的解决方案会回退到预定义的默认区域。 |
line_width | int | 2 | 解决方案绘制的框、关键点和计数的线条粗细。 |
verbose | bool | True | 启用解决方案逐帧记录输入形状、类别计数和处理速度的日志。跟踪调用本身始终保持静默。 |
ObjectCounter 解决方案支持使用多个 track 参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
tracker | str | 'botsort.yaml' | 指定要使用的跟踪算法。内置选项:botsort.yaml、bytetrack.yaml、ocsort.yaml、deepocsort.yaml、fasttrack.yaml、tracktrack.yaml。 |
conf | float | 0.25 | 设置检测的置信度阈值;较低的值允许跟踪更多对象,但可能包含误报。 |
iou | float | 0.7 | 设置用于过滤重叠检测结果的交并比(IoU)阈值。 |
classes | list | None | 按类别索引过滤结果。例如,classes=[0, 2, 3] 仅跟踪指定类别。 |
device | str | None | 指定推理设备(例如 cpu、cuda:0 或 0)。允许用户在 CPU、特定 GPU 或其他计算设备之间进行选择,以执行模型。 |
imgsz | int or tuple | 640 | 目标推理图像大小:用于正方形的整数或 (height, width) 对。形状会根据模型步长进行调整。 |
max_det | int | 300 | 在跟踪前每帧保留的最大检测数,用于限制解决方案在密集场景中处理的对象数量。 |
quantize | int or str | None | 推理精度:针对 PyTorch 和 TorchScript 模型,使用 16 (FP16) 或 32/不设置 (FP32);其他格式则在其工件和运行时选择的精度下进行计算。它替代了已弃用的 half 标志。 |
此外,还支持以下列出的可视化参数:
| 参数 | 类型 | 默认值 | 描述 |
|---|---|---|---|
show | bool | False | 如果为 True,则会在窗口中显示带标注的图像或视频。适用于开发或测试期间获取即时视觉反馈。 |
show_conf | bool | True | 在每个检测结果旁显示其置信度分数,让你了解模型对每个检测结果的确定程度。 |
show_labels | bool | True | 在可视化输出中显示每个检测结果的标签,帮助你立即了解检测到的对象。 |
常见问题#
要使用 Ultralytics YOLO26 对视频中的目标进行计数,你可以按照以下步骤操作:
- 导入必要的库(
cv2、ultralytics)。 - 定义计数区域(例如多边形、直线等)。
- 设置视频捕获并初始化目标计数器。
- 处理每一帧,以跟踪目标并统计定义区域内的目标数量。
下面是一个在区域内进行计数的简单示例:
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 solution,以同时统计多个区域中的目标。
- 导入必要的库(
使用 Ultralytics YOLO26 进行目标计数具有以下多项优势:
- **资源优化:**它通过提供准确的计数结果,促进高效的资源管理,帮助优化 库存管理 等行业中的资源分配。
- **增强安全性:**它通过准确跟踪和计数实体来增强安全与监控能力,帮助主动进行威胁检测和 安全系统 防护。
- **助力决策:**它可为决策提供有价值的洞察,优化零售、交通管理等领域中的流程。
- **实时处理:**YOLO26 的架构支持 实时推理,因此适用于实时视频流和对时间敏感的应用。
如需查看实现示例和实际应用,请探索 TrackZone solution,了解如何跟踪特定区域中的目标。
要使用 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 数据集中的人和汽车)。你可以在 COCO 数据集文档中找到有关类别索引的更多信息。与 Faster R-CNN、SSD 和之前的 YOLO 版本等其他目标检测模型相比,Ultralytics YOLO26 具有以下多项优势:
- **速度和效率:**YOLO26 支持实时处理,非常适合需要高速推理的应用,例如监控和自动驾驶。
- **准确性:**它提供先进的检测和跟踪准确性,可减少误报并提升整体系统可靠性。
- **易于集成:**YOLO26 可与各种平台和设备无缝集成,包括移动设备和边缘设备,这对现代 AI 应用至关重要。
- **灵活性:**支持检测和分割任务,并可叠加使用跟踪模式,同时支持可配置模型以满足特定用例的需求。
查看 Ultralytics YOLO26 文档,深入了解其功能和性能对比。
可以,凭借实时检测能力、可扩展性和灵活的集成能力,Ultralytics YOLO26 非常适合人群分析和交通管理等高级应用。其高级功能支持在动态环境中高精度地跟踪、计数和分类目标。示例用例包括:
- **人群分析:**监控和管理大型聚集活动,借助基于区域的计数确保安全并优化人群流动。
- **交通管理:**利用速度估计能力跟踪和计数车辆、分析交通模式,并实时管理拥堵。
- **零售分析:**分析客户移动模式和产品互动,以优化店铺布局并改善客户体验。
- **工业自动化:**统计传送带上的产品数量,并监控生产线,以改善质量控制和生产效率。
如需了解更多专业应用,请探索 Ultralytics Solutions,其中提供了一套全面的工具,用于应对现实世界中的计算机视觉挑战。

