目录
一、演示效果
二、基础理论和核心概念
三、安装环境和依赖
四、工作流程和步骤
五、核心部分源码:
六、总结
一、演示效果
二、基础理论和核心概念
YOLOv11 是 YOLO 系列的最新版本,它不仅在目标检测方面表现出色,还引入了对象分割和多目标跟踪的功能。本文将介绍如何使用 YOLOv11 进行人流统计、车流统计以及跟踪的实际应用。
在实际应用场景中,如智能交通系统、安防监控、商业分析等,人流统计和车流统计是非常重要的任务。通过实时监测和统计人群和车辆的数量,可以提供关键的数据支持,帮助决策者进行有效的管理和规划。YOLOv11 结合了高效的目标检测和强大的多目标跟踪能力,非常适合这类应用。
三、安装环境和依赖
在开始之前,请确保你的开发环境已经安装了以下依赖:
Python 3.7+
PyTorch 1.8+(建议使用 CUDA 支持)
OpenCV 4.x
其他依赖库(如 NumPy, Pillow 等)
四、工作流程和步骤
4.1 人流统计
人流统计涉及检测图像或视频帧中的行人,并计算其数量。使用 YOLOv11 进行人流统计的基本步骤如下:
- 加载预训练模型:加载预先训练好的 YOLOv11 模型。
- 读取视频或图像:读取需要进行人流统计的视频或图像。
- 执行目标检测:对每一帧执行目标检测,获取所有行人的边界框。
- 统计人数:根据检测结果统计每帧中的人数。
- 输出结果:将统计结果保存到文件或显示在屏幕上。
4.2 车流统计
车流统计与人流统计类似,但检测的对象是车辆。基本步骤如下:
- 加载预训练模型:加载预先训练好的 YOLOv11 模型。
- 读取视频或图像:读取需要进行车流统计的视频或图像。
- 执行目标检测:对每一帧执行目标检测,获取所有车辆的边界框。
- 统计车辆数:根据检测结果统计每帧中的车辆数。
- 输出结果:将统计结果保存到文件或显示在屏幕上。
五、核心部分源码:
import cv2
from ultralytics import YOLO, solutions
# Load the pre-trained YOLOv8 model
model = YOLO("../checkpoints/yolo11n.pt")
# Open the video file
cap = cv2.VideoCapture("../inputs/007.mp4")
assert cap.isOpened(), "Error reading video file"
# Get video properties: width, height, and frames per second (fps)
w, h, fps = (int(cap.get(x)) for x in (cv2.CAP_PROP_FRAME_WIDTH, cv2.CAP_PROP_FRAME_HEIGHT, cv2.CAP_PROP_FPS))
# Define points for a line or region of interest in the video frame
line_points = [(20, 600), (1080, 600)] # Line coordinates
# Specify classes to count, for example: person (0) and car (2)
classes_to_count = [0, 2] # Class IDs for person and car
# Initialize the video writer to save the output video
video_writer = cv2.VideoWriter("object_counting_output.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
# Initialize the Object Counter with visualization options and other parameters
counter = solutions.ObjectCounter(
view_img=True, # Display the image during processing
reg_pts=line_points, # Region of interest points
names=model.names, # Class names from the YOLO model
draw_tracks=True, # Draw tracking lines for objects
line_thickness=2, # Thickness of the lines drawn
)
# Process video frames in a loop
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
# Perform object tracking on the current frame, filtering by specified classes
tracks = model.track(im0, persist=True, show=False, classes=classes_to_count)
# Use the Object Counter to count objects in the frame and get the annotated image
im0 = counter.start_counting(im0, tracks)
# Write the annotated frame to the output video
video_writer.write(im0)
# Release the video capture and writer objects
cap.release()
video_writer.release()
# Close all OpenCV windows
cv2.destroyAllWindows()
六、总结
通过上述步骤,我们已经介绍了如何使用 YOLOv11 进行人流统计、车流统计和多目标跟踪。YOLOv11 的高效性和准确性使其成为这些任务的理想选择。希望这篇博客能够帮助读者更好地理解和应用 YOLOv11 在实际项目中的强大功能。如果你有任何问题或建议,欢迎留言交流!