视频演示
【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茶水间,下期见~