了解 Ultralytics YOLOv8 模型如何用于计算机视觉项目中的速度估计。通过一个简单的编码示例亲自尝试一下。

了解 Ultralytics YOLOv8 模型如何用于计算机视觉项目中的速度估计。通过一个简单的编码示例亲自尝试一下。

我们可能都见过限速路标。我们中的一些人甚至可能收到过邮寄或电子邮件发送的自动超速违章通知。得益于计算机视觉,人工智能 (AI) 交通管理系统可以自动标记超速违章行为。安装在路灯和高速公路上的摄像头捕获的实时画面用于速度估计,以加强道路安全。
速度估计不仅仅局限于高速公路安全。它还可以用于体育、自动驾驶汽车和各种其他应用。在本文中,我们将讨论如何使用 Ultralytics YOLOv8 模型在计算机视觉项目中进行速度估计。我们还将逐步介绍一个编码示例,以便您可以亲自尝试。让我们开始吧!
根据世界卫生组织 (WHO) 的数据,每年约有 119 万 人因超速导致道路交通事故死亡。此外,还有 2000 万至 5000 万人遭受非致命性伤害,其中许多人因此致残。交通安全的重要性不容低估,特别是速度估计有助于预防事故、挽救生命并确保我们的道路安全高效。
使用计算机视觉进行速度估计涉及检测和跟踪视频帧中的物体,以计算它们移动的速度。YOLOv8等算法可以识别和跟踪连续帧中的车辆等物体。该系统使用校准的摄像头或参考点测量这些物体移动的距离,以衡量真实世界的距离。通过计算物体在两点之间移动所需的时间,系统使用距离-时间比率计算它们的速度。

除了抓拍超速者,集成人工智能的测速系统还可以收集数据来预测交通状况。这些预测可以支持交通管理任务,如优化信号配时和资源分配。深入了解交通模式和拥堵原因可用于规划新道路,以减少交通拥堵。
速度估计的应用不仅限于道路监控。它还可以用于监控运动员的表现,帮助自动驾驶汽车了解周围物体的速度,检测可疑行为等。任何可以使用摄像头测量物体速度的场景,都可以使用计算机视觉进行速度估计。
以下是一些使用速度估计的例子:

基于视觉的速度估计系统正取代传统的基于传感器的方法,因为它们具有更高的准确性、成本效益和灵活性。与依赖 LiDAR 等昂贵传感器的系统不同,计算机视觉使用标准摄像头来实时监控和分析速度。用于速度估计的计算机视觉解决方案可以与现有的交通基础设施无缝集成。此外,这些系统可以构建为执行许多复杂的任务,例如车辆类型识别和交通模式分析,以提高整体交通流量和安全性。
既然我们对速度估计及其应用有了清晰的了解,那么让我们仔细看看如何通过代码将速度估计集成到您的计算机视觉项目中。我们将使用 YOLOv8 模型来检测移动的车辆并估计其速度。
此示例使用从互联网下载的道路车辆视频。您可以使用相同的视频或任何相关的视频。YOLOv8 模型识别每辆车的中心点,并根据该中心点在视频帧中穿过水平线的速度来计算其速度。
在我们深入探讨之前,重要的是要注意,在这种情况下,距离计算是近似的,并且基于欧几里得距离。相机校准未考虑在内,因此速度估计可能不完全准确。此外,估计速度可能会因您的 GPU 速度而异。
步骤 1: 我们将首先安装 Ultralytics 包。打开命令提示符或终端,然后运行如下所示的命令。
pip install ultralytics 请查看我们的 Ultralytics 安装指南,获取有关安装过程的分步说明和最佳实践。如果您在为 YOLOv8 安装所需软件包时遇到任何问题,我们的 常见问题指南 提供了解决方案和有用的提示。
步骤 2: 接下来,我们将导入所需的库。OpenCV 库将帮助我们处理视频。
import cv2
from ultralytics import YOLO, solutions步骤 3: 然后,我们可以加载 YOLOv8 模型并检索模型可以检测的类别的名称。
model = YOLO("yolov8n.pt")
names = model.model.names查看我们支持的所有模型,了解哪个模型最适合您的项目。
步骤 4: 在此步骤中,我们将使用 OpenCV 的 VideoCapture 模块打开输入视频文件。我们还将提取视频的宽度、高度和帧率 (fps)。
cap = cv2.VideoCapture("path/to/video/file.mp4")
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))步骤 5: 在这里,我们将初始化视频写入器以保存速度估计的最终结果。输出视频文件将保存为“speed_estimation.avi”。
video_writer = cv2.VideoWriter("speed_estimation.avi", cv2.VideoWriter_fourcc(*"mp4v"), fps, (w, h))
第 6 步: 接下来,我们可以定义用于速度估计的线段端点。对于我们的输入视频,这条线将水平放置在画面的中间。您可以随意调整这些值,以便根据您的输入视频将线段放置在最合适的位置。
line_pts = [(0, 360), (1280, 360)]步骤 7: 现在,我们可以使用定义的线点和类别名称来初始化速度估计对象。
speed_obj = solutions.SpeedEstimator(
reg_pts=line_pts,
names=names,
view_img=True,
)步骤 8: 脚本的核心是逐帧处理视频。我们读取每一帧,并检测和跟踪对象。估计跟踪对象的速度,并将带注释的帧写入输出视频。
while cap.isOpened():
success, im0 = cap.read()
if not success:
print("Video frame is empty or video processing has been successfully completed.")
break
tracks = model.track(im0, persist=True, show=False)
im0 = speed_obj.estimate_speed(im0, tracks)
video_writer.write(im0)
步骤 9: 最后,我们释放视频捕获和写入器对象,并关闭所有 OpenCV 窗口。
cap.release()
video_writer.release()
cv2.destroyAllWindows()步骤 10: 保存您的脚本。如果您从终端或命令提示符工作,请使用以下命令运行脚本:
python your_script_name.py同样重要的是要了解使用计算机视觉实施速度估计所涉及的挑战。不利的天气条件,如雨、雾或雪,可能会对系统造成问题,因为它们会阻碍道路的能见度。同样,由其他车辆或物体引起的遮挡会使这些系统难以准确跟踪和估计目标车辆的速度。导致阴影或阳光眩光的恶劣照明条件也会进一步使速度估计任务复杂化。
另一个挑战涉及计算能力。为了实时估算速度,我们必须处理来自高质量交通摄像头的大量视觉数据。您的解决方案可能需要昂贵的硬件来处理所有这些数据,并确保一切快速运行且没有延迟。
然后,存在隐私问题。这些系统收集的数据可能包括个人的车辆详细信息,如品牌、型号和车牌信息,这些信息是在未经他们同意的情况下收集的。一些现代高清摄像头甚至可以拍摄到车内乘客的图像。这种数据收集可能会引发严重的伦理和法律问题,需要谨慎处理。
使用 Ultralytics YOLOv8 模型 进行速度估计,为许多应用提供了一种灵活高效的解决方案。虽然存在一些挑战,例如在恶劣条件下的准确性和解决隐私问题,但优势是多方面的。与旧方法相比,支持计算机视觉的速度估计更具成本效益、适应性和精确性。它在交通运输、体育、监控和自动驾驶汽车等各个领域都非常有用。凭借所有的优势和应用,它注定将成为未来智能系统的关键组成部分。
对人工智能感兴趣吗?与我们的社区联系!浏览我们的GitHub 存储库,详细了解我们如何利用人工智能在医疗保健和农业等各个行业创建创新解决方案。与我们协作、创新和学习!🚀


.webp)