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

我们可能都见过限速道路标志。有些人甚至可能通过邮寄或电子邮件收到过自动发送的超速违章通知。借助计算机视觉,人工智能(AI)交通管理系统可以自动标记超速违章。街灯和高速公路上的摄像头捕捉的实时画面可用于速度估计,并加强道路安全。
速度估计并不只局限于高速公路安全。它还可用于体育运动、自动驾驶汽车和各种其他应用。在本文中,我们将讨论如何在计算机视觉项目中使用 Ultralytics YOLOv8 模型进行速度估计。我们还将逐步讲解一个代码示例,让你可以亲自尝试。现在开始吧!
速度估计让交通管理更加轻松#
根据世界卫生组织(WHO)的数据,每年约有119万人因超速导致的道路交通事故死亡。此外,还有 2000 万至 5000 万人遭受非致命伤害,其中许多人因此残疾。交通安全的重要性怎么强调都不为过,尤其是速度估计有助于预防事故、挽救生命,并让道路保持安全高效。
利用计算机视觉进行速度估计,需要在视频帧中检测和跟踪目标,以计算它们的移动速度。Ultralytics YOLOv8 等算法可以识别并跟踪连续帧中的车辆等目标。系统使用经过标定的摄像头或参考点测量这些目标移动的距离,从而估算现实世界中的距离。通过计算目标在两点之间移动所需的时间,系统利用距离与时间的比值计算其速度。

图 1。使用 Ultralytics YOLOv8 模型进行速度估计。
除了捕捉超速行为,集成 AI 的速度估计系统还可以收集数据,用于预测交通状况。这些预测可以支持优化信号灯时序和资源分配等交通管理任务。通过了解交通模式和拥堵成因,可以规划新道路,以减少交通拥堵。
速度估计在其他行业中的应用#
速度估计的应用远不止道路监控。它还可以用于监测运动员表现,帮助自动驾驶汽车了解周围移动物体的速度,检测可疑行为等。只要摄像头能够测量物体的速度,就可以使用基于计算机视觉的速度估计。
以下是一些使用速度估计的示例:
- Tesla 的自动驾驶汽车使用基于视觉的速度估计来避免碰撞。
- 计算机视觉和速度估计将用于2024 年奥运会,以改进田径项目的表现分析。
- 智慧城市正在研究行人步态分析,以监测步行速度并提升城市交通和安全水平。这些系统可以提醒驾驶员注意行人的存在,预防事故。
- 动物行为监测系统使用速度估计来跟踪动物移动,并检测其是否出现痛苦或患病迹象。

图 2。速度估计可以测量人员的步行速度。
使用计算机视觉估计速度的优势#
基于视觉的速度估计系统凭借更高的准确性、更高的性价比和更强的灵活性,正在取代传统的基于传感器的方法。与依赖 LiDAR 等昂贵传感器的系统不同,计算机视觉使用标准摄像头实时监测和分析速度。用于速度估计的计算机视觉解决方案可以无缝集成到现有交通基础设施中。此外,这些系统还可以执行车辆类型识别和交通模式分析等多项复杂任务,从而改善整体交通流量和安全性。
亲自试试:使用 Ultralytics YOLOv8 进行速度估计#
现在我们已经清楚了解了速度估计及其应用,接下来通过代码进一步了解如何将速度估计集成到计算机视觉项目中。我们将检测移动中的车辆,并使用 Ultralytics YOLOv8 模型估计其速度。
此示例使用的是从互联网上下载的道路车辆视频。你可以使用相同的视频,也可以使用任何相关视频。Ultralytics YOLOv8 模型会识别每辆车的中心,并根据该中心在视频帧中穿过水平线的速度计算车辆速度。
在深入介绍之前,需要注意的是,在本例中,距离计算是基于欧氏距离的近似值。计算中未考虑摄像头标定,因此速度估计可能并不完全准确。此外,估计速度还可能因你的 GPU 速度而有所不同。
**步骤 1:**我们将从安装 Ultralytics 软件包开始。打开命令提示符或终端,然后运行下面显示的命令。
pip install ultralytics查看我们的 Ultralytics 安装指南,了解安装过程的分步说明和最佳实践。如果你在安装 YOLOv8 所需软件包时遇到问题,我们的常见问题指南提供了解决方案和实用建议。
**步骤 2:**接下来,我们将导入所需的库。OpenCV 库将帮助我们处理视频。
import cv2
from ultralytics import YOLO, solutions**步骤 3:**然后,我们可以加载 Ultralytics 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 模型进行速度估计,可以为许多应用提供灵活高效的解决方案。尽管在严苛条件下保持准确性以及解决隐私问题等方面存在挑战,但其优势十分显著。与传统方法相比,计算机视觉赋能的速度估计成本更低、更具适应性,也更加精准。它可用于交通运输、体育、监控和自动驾驶汽车等多个领域。凭借这些优势和应用前景,它注定会成为未来智能系统的重要组成部分。
对 AI 感兴趣吗?欢迎加入我们的社区!探索我们的 GitHub 代码仓库,详细了解我们如何利用 AI 为医疗保健、农业等多个行业打造创新解决方案。与我们一起协作、创新和学习吧!🚀









