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

我们大概都见过限速交通标志。有些人可能甚至通过信件或电子邮件收到过自动限速违规通知。人工智能(AI)交通管理系统可以利用计算机视觉自动标记超速违规行为。街道红绿灯和高速公路上摄像头捕获的实时画面被用于速度估计并加强道路安全。
Speed estimation 不仅限于高速公路安全。它还可以用于体育、自动驾驶汽车以及各种其他应用。在本文中,我们将讨论如何在你的计算机视觉项目中使用 Ultralytics YOLOv8 model 进行速度估计。我们还将逐步引导你完成一个编码示例,以便你可以亲自尝试。让我们开始吧!
速度估计使交通管理更加轻松#
根据世界卫生组织(WHO)的数据,每年约有 1.19 million 人因超速引起的道路交通事故而死亡。此外,还有 2000 万至 5000 万人遭受非致命伤,其中许多会导致残疾。交通安全的重要性怎么强调都不为过,特别是当速度估计有助于预防事故、挽救生命并保持道路安全高效时。
使用计算机视觉进行速度估计包括在视频帧中检测和追踪物体,以计算它们的移动速度。像 Ultralytics YOLOv8 这样的算法可以识别并追踪连续帧中的车辆等物体。系统使用标定相机或参考点来测量这些物体行进的距离,从而估算真实世界的距离。通过计算物体在两点之间移动所需的时间,系统利用距离与时间的比率来计算它们的速度。

Fig 1. 使用 Ultralytics YOLOv8 model 进行速度估计。
除了抓拍超速者之外,集成 AI 的速度估计系统还可以收集数据,对交通情况进行预测。这些预测可以支持交通管理任务,例如优化信号灯时序和资源分配。有关交通模式和拥堵原因的洞察可用于规划新道路,以减少交通拥堵。
速度估计在其他行业中的应用#
速度估计应用不仅仅局限于监控道路。它对于监控运动员表现、帮助autonomous vehicles了解周围移动对象的速度、检测可疑行为等也非常有用。在任何可以使用相机测量对象速度的地方,都可以使用基于计算机视觉的速度估计。
以下是速度估计被应用的一些示例:
- Tesla's autonomous cars 使用基于视觉的速度估计来避免碰撞。
- 计算机视觉和速度估计将在 2024 Olympic Games 上用于改进田径赛事的表现分析。
- 智能城市正在研究行人步态分析,以监测行走速度并提高城市出行效率和安全性。这些系统可以提醒驾驶员注意行人,从而预防事故。
- 动物行为监测系统使用速度估计来追踪动物的运动并检测痛苦或疾病的迹象。

Fig 2. 速度估计可以测量人的步行速度。
利用计算机视觉估算速度的好处#
基于视觉的速度估计系统由于其更高的准确性、成本效益和灵活性,正在取代传统的基于传感器的方法。与依赖 LiDAR 等昂贵传感器的系统不同,计算机视觉使用标准摄像头来实时监控和分析速度。用于速度估计的计算机视觉解决方案可以与现有的交通基础设施无缝集成。此外,这些系统还可以被构建执行许多复杂的任务,例如车辆类型识别和交通模式分析,以改善整体交通流和安全性。
亲自试一试:使用 Ultralytics YOLOv8 进行速度估计#
既然我们已经清楚了解了速度估计及其应用,接下来让我们仔细看看如何通过代码将速度估计集成到你的计算机视觉项目中。我们将使用 Ultralytics YOLOv8 模型检测移动车辆并估计它们的速度。
这个示例使用了从互联网下载的一段路上汽车的视频。你可以使用相同的视频或任何相关的视频。Ultralytics YOLOv8 模型识别每辆车的中心,并根据该中心穿过视频帧中水平线的速度来计算其速度。
在深入研究之前,需要注意的是,在这种情况下,距离计算是近似的,基于欧几里得距离。没有考虑摄像头校准,因此速度估计可能并不完全准确。此外,估计的速度可能会根据你 GPU 的速度而有所波动。
第 1 步: 我们将首先安装 Ultralytics 软件包。打开你的命令行提示符或终端并运行下方显示的命令。
pip install ultralytics查看我们的 Ultralytics Installation guide,了解有关安装过程的分步说明和最佳实践。如果在安装 YOLOv8 所需的软件包时遇到任何问题,我们的 Common Issues guide 提供了解决方案和有用的提示。
第 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 model 进行速度估计为许多用途提供了灵活高效的解决方案。尽管存在挑战,例如在恶劣条件下的准确性和解决隐私问题,但优势是多方面的。与旧方法相比,启用计算机视觉的速度估计更具成本效益、适应性更强且更精确。它在交通、体育、监控和自动驾驶汽车等各个领域都很有用。凭借所有这些优势和应用,它注定会成为未来智能系统的关键部分。
对 AI 感兴趣?加入我们的社群!探索我们的 GitHub repository,详细了解我们如何使用 AI 在医疗保健和农业等各个行业创造创新解决方案。与我们一起合作、创新和学习!🚀






