【YOLOv12实战】寥寥数行代码实现目标跟踪与速度估计,新手也能轻松搞定!

视频演示

【YOLOv12实战】寥寥数行代码实现目标跟踪与速度估计,新手也能轻松搞定!

大家好,这里是Coding茶水间。今天分享一个超简单的教程:如何使用YOLO算法,只需几行代码,就能实现目标跟踪和速度估计。

新手小白也能轻松上手!这个方法基于Ultralytics的YOLO框架,结合OpenCV处理视频,效果超级实用。

废话不多说,我们直接从头开始敲代码。整个过程简单明了,只需要导入两个包,就能完成视频中的车辆和行人速度估计演示。

环境准备

本次演示基于YOLOv12的最新算法运行环境。大家可以去Ultralytics官网下载最新版本,这里不再赘述。环境包括我这里用到的Python 3.10、Ultralytics包和OpenCV。确保你已经提前下载YOLOv12的预训练权重文件(yolo12n.pt)。

步骤详解

第一步:创建Python文件

新建一个Python文件,命名为speed_estimator.py(或者随便你喜欢的名字)。

第二步:导入必要的包

我们只需要导入Ultralytics的solutions模块中的speed_estimation,以及OpenCV用于视频处理。

复制代码
from ultralytics.solutions import speed_estimation
import cv2
  • ultralytics.solutions.speed_estimation:这是YOLO框架提供的速度估计模块,超级方便。
  • cv2:OpenCV库,用于读取和处理视频。

第三步:读取视频

使用OpenCV的VideoCapture方法加载视频文件。这里假设你的视频文件名为speed_hd.mp4,路径可以根据实际情况调整。

复制代码
# 读取视频
cap = cv2.VideoCapture("speed_hd.mp4")

这个cap变量就是视频捕获对象,我们后续会用它逐帧读取图像。

第四步:创建速度估计对象

初始化一个SpeedEstimator对象,这是核心部分。传递几个关键参数:

复制代码
speed_obj = speed_estimation.SpeedEstimator(

model = "yolo12n.pt", # 指定模型(YOLOv12预训练权重)

show = True, # 是否展示中间处理效果

meter_per_pixel = 0.3 # 每像素对应的实际距离(米)

)
  • model:指定YOLO模型的权重文件。这里用yolo12n.pt,这是YOLOv12的nano版本,轻量高效。你可以替换成其他版本如yolo12s.pt等。
  • show:设置为True,表示在处理过程中实时显示速度估计效果。如果设置为False,你可以自己处理结果。
  • meter_per_pixel:这是一个关键参数!它定义了视频中一个像素对应实际世界的多少米(类似于地图比例尺)。这里设为0.3米/像素,根据你的视频拍摄距离和相机参数调整这个值,能让速度估计更准确。视频中的速度是基于像素移动距离模拟的,所以这个转换关系直接影响结果。

第五步:处理视频帧

使用while循环逐帧读取视频,进行速度估计。

复制代码
# 处理视频
while cap.isOpened():
    success, im0 = cap.read()

    if not success:
        break

    results = speed_obj(im0)
  • cap.isOpened():检查视频是否还能读取。
  • cap.read():读取一帧图像,返回成功标志success和图像im0。
  • 如果读取失败,就跳出循环。
  • speed_obj(im0):直接把图像传入速度估计对象,它会自动进行目标检测、跟踪和速度计算。因为show=True,它会实时显示结果,包括车辆或行人的速度(单位:km/h 或类似)。

第六步:释放资源

处理完视频后,释放视频对象并关闭窗口。

复制代码
cap.release()
cv2.waitKey(0)
cv2.destroyAllWindows()
  • cap.release():释放视频捕获资源。
  • cv2.waitKey(0):等待用户按键,防止程序立即退出,便于查看最终状态。
  • cv2.destroyAllWindows():关闭所有OpenCV窗口。

完整代码

把以上部分组合起来,就是完整的脚本:

复制代码
from ultralytics.solutions import speed_estimation
import cv2

#读取视频
cap = cv2.VideoCapture("speed_hd.mp4")

speed_obj = speed_estimation.SpeedEstimator(
    model = "yolo12n.pt", #指定模型
    show = True,
    meter_per_pixel = 0.3 #每像素对应的米数
)

#处理视频
while cap.isOpened():
    success, im0 = cap.read()

    if not success:
        break

    results = speed_obj(im0)


cap.release()
cv2.waitKey(0)
cv2.destroyAllWindows()

运行效果

运行这个脚本后,它会打开视频窗口,实时显示检测到的目标(车辆、行人等),并在每个目标上标注速度估计值。效果如视频演示:对路边车辆和行人进行跟踪,计算模拟速度。

注意事项:

  • 速度估计基于像素移动,不是真实速度数据,所以有一定误差。调整meter_per_pixel可以优化精度。
  • 如果视频中物体移动太快或太慢,模型可能需要微调。
  • 环境问题:如果报错(如模型路径不对),检查权重文件是否下载正确。YOLOv12是最新版,性能比之前的YOLOv8更强。

结语

通过这个简单教程,你可以看到YOLO框架的强大------只需寥寥数行代码,就能实现目标跟踪和速度估计!适合入门AI视觉项目。

有问题欢迎留言讨论,一起交流学习!Coding茶水间,下期见~