使用 Ultralytics YOLO11 进行目标计数
什么是目标计数?
使用 Ultralytics YOLO11 进行目标计数包括准确识别和计数视频及摄像头流中的特定目标。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.yaml 或 botsort.yaml . |
conf |
float |
0.3 |
设置检测的置信度阈值;较低的值允许跟踪更多对象,但可能包含误报。 |
iou |
float |
0.5 |
设置用于过滤重叠检测的 Intersection over Union (IoU) 阈值。 |
classes |
list |
None |
按类别索引过滤结果。例如, classes=[0, 2, 3] 仅跟踪指定的类别。 |
verbose |
bool |
True |
控制跟踪结果的显示,提供被跟踪对象的可视化输出。 |
device |
str |
None |
指定用于推理的设备(例如, cpu , cuda:0 或 0 )。允许用户在 CPU、特定 GPU 或其他计算设备之间进行选择,以执行模型。 |
此外,还支持下面列出的可视化参数:
参数 | 类型 | 默认值 | 描述 |
---|---|---|---|
show |
bool |
False |
可视化参数: True ,则在窗口中显示带注释的图像或视频。这对于开发或测试期间的即时视觉反馈非常有用。 |
line_width |
None or int |
None |
指定边界框的线条宽度。 如果 None ,则线条宽度会根据图像大小自动调整。 提供视觉自定义以提高清晰度。 |
show_conf |
bool |
True |
在标签旁边显示每个检测的置信度分数。 可以深入了解模型对每次检测的确定性。 |
show_labels |
bool |
True |
在可视化输出中显示每个检测的标签。 能够立即理解检测到的对象。 |
常见问题
如何使用 Ultralytics YOLO11 在视频中计数目标?
要使用 Ultralytics YOLO11 计数视频中的对象,您可以按照以下步骤操作:
- 导入必要的库(
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", "yolo11n.pt")
如需更高级的配置和选项,请查看 RegionCounter 解决方案,以同时计算多个区域中的对象。
使用 Ultralytics YOLO11 进行目标计数有哪些优势?
使用 Ultralytics YOLO11 进行对象计数具有以下优势:
- 资源优化: 它通过提供准确的计数来促进高效的资源管理,从而帮助优化库存管理等行业的资源分配。
- 增强的安全性: 通过准确地跟踪和计数实体,增强了安全性和监视,有助于主动威胁检测和安全系统。
- 明智的决策: 它为决策提供了有价值的见解,优化了零售、交通管理等领域的流程。
- 实时处理: 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]
表示它计算类别的对象 0
和 2
(例如,COCO 数据集中的人和汽车)。您可以在以下位置找到有关类索引的更多信息 COCO 数据集文档.
对于实时应用,为什么我应该选择 YOLO11 而不是其他对象检测模型?
与其他对象检测模型(如 Faster R-CNN、SSD 和以前的 YOLO 版本)相比,Ultralytics YOLO11 具有以下几个独特的优势:
- 速度和效率: YOLO11 提供实时处理能力,使其成为需要高速推理的应用的理想选择,例如监控和自动驾驶。
- 准确性: 它为对象检测和跟踪任务提供最先进的准确性,减少误报的数量并提高整体系统可靠性。
- 易于集成: YOLO11 提供了与各种平台和设备的无缝集成,包括移动设备和 边缘设备,这对于现代 AI 应用至关重要。
- 灵活性: 支持各种任务,如对象检测、分割和跟踪,并提供可配置的模型以满足特定的用例需求。
查看 Ultralytics YOLO11 文档,以更深入地了解其功能和性能比较。
我可以使用 YOLO11 进行高级应用,如人群分析和交通管理吗?
是的,由于 Ultralytics YOLO11 具有实时检测能力、可扩展性和集成灵活性,因此非常适合用于人群分析和交通管理等高级应用。其高级功能允许在动态环境中进行高精度对象跟踪、计数和分类。用例包括:
- 人群分析: 监控和管理大型聚会,通过基于区域的计数确保安全并优化人群流动。
- 交通管理: 通过速度估计功能,实时跟踪和计数车辆,分析交通模式并管理拥堵。
- 零售分析: 分析客户移动模式和产品互动,以优化商店布局并改善客户体验。
- 工业自动化: 统计传送带上的产品数量,并监控生产线以进行质量控制和提高效率。
对于更专业的应用,请浏览 Ultralytics 解决方案,获取一套为应对现实世界计算机视觉挑战而设计的综合工具。