当前位置: 首页 > news >正文

YOLOv8——测量高速公路上汽车的速度

引言

在人工神经网络和计算机视觉领域,目标识别和跟踪是非常重要的技术,它们可以应用于无数的项目中,其中许多可能不是很明显,比如使用这些算法来测量距离或对象的速度。
测量汽车速度基本步骤如下:

  1. 视频采集:使用摄像头或其他图像采集设备获取高速公路上汽车行驶的视频图像。
  2. 目标检测:运用计算机视觉算法,如YOLOv8,对视频中的汽车进行目标检测,确定汽车的位置和边界框。
  3. 跟踪算法:采用跟踪算法对检测到的汽车进行跟踪,在连续的帧中保持对同一辆汽车的识别。
  4. 距离测量:通过已知的参照物或标志物,如道路标线、标志牌等,测量汽车在图像中移动的距离。
  5. 时间计算:记录汽车在两个位置之间移动的时间间隔,可以通过帧间时间差来计算。
  6. 速度计算:根据测量得到的距离和时间,使用速度公式(速度 = 距离 ÷ 时间)计算汽车的速度。
    在这里插入图片描述

YOLOv8

为了方便管理,还是在conda里面安装:

conda create -n yolov8 python=3.8
activate ylolv8
conda install pytorch==2.0.0 torchvision==0.15.0 torchaudio==2.0.0 pytorch-cuda=11.7 -c pytorch -c nvidia
pip install ultralytics

代码

from ultralytics import YOLO
from ultralytics.solutions import speed_estimation
import cv2model = YOLO("yolov8s.pt")
names = model.model.namescap = cv2.VideoCapture("/pathFreeway_night.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))video_writer = cv2.VideoWriter("/path/speed_estimation.avi",cv2.VideoWriter_fourcc(*'mp4v'),fps,(w, h))line_pts = [(0, 400), (1280, 400)]speed_obj = speed_estimation.SpeedEstimator()
speed_obj.set_args(reg_pts=line_pts,names=names,view_img=True)while cap.isOpened():cap.release()
video_writer.release()
cv2.destroyAllWindows()

代码解释

视频源

视频显示一个静止的相机,即一个不在其轴上移动并且总是显示街道或道路的相同部分的相机,这很重要,以避免准确性错误。另一个重要的点是选择一个能够处理视频的库,提供逐帧的图像供 YOLO 模型进行推理,这是下一步,这里要涉及 Opencv 库。

识别汽车

为了识别对象,使用了预训练的 YOLO 算法,该算法可以从 ultralytics 库中获得。这个算法允许实时识别感兴趣的对象,并且具有很好的准确性。

model = YOLO("yolov8s.pt")

在这种情况下,‘小型’模型(字母 s)证明是绰绰有余的。

应用跟踪

仍然在 YOLO 模型中,包含了一个跟踪算法,该算法旨在通过连续的帧持续监控和跟踪特定对象的移动。它的实现很简单,如下所示:

tracks = model.track(im0, persist=True, show=False)

在这里我们将一个函数直接整合到对象识别模型中。

定义区域

项目的一个重要步骤是定义对象必须穿过的区域,以便可以测量通过这个点的时间,从这个参考点我们可以计算速度。

为此,我们定义了坐标(x 和 y 点),这个区域应该开始和结束,如下:

line_pts = [(0, 400), (1280, 400)] # 绘制一条线,从屏幕的一侧穿过到另一侧

这个区域作为参数传递给负责计算速度的函数:

speed_obj.set_args(reg_pts=line_pts, names=names, view_img=True)

如何计算速度?

该函数通过存储随时间跟踪的位置来处理帧,因此通过比较定义区域内当前位置与先前位置的关系来计算每个检测到的对象的速度,允许通过它在该区域内移动所需的时间来估算对象的速度,遵循物理学中一个非常知名的术语:

v = Δ t Δ s v= \frac{Δt}{Δs} v=ΔsΔt

其中,v 是速度,Δs 是位移(距离),Δt 是时间间隔。

结果

在这里插入图片描述

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 【IDEA】将光标移动到您上一次编辑的地方
  • 物联网迎来下半场,国产 IoTOS 打造企业级智能硬件云服务平台
  • vue 引入 esri-loader 并加载地图
  • Ubuntu磁盘不足扩容
  • NPM如何切换淘宝镜像进行加速
  • Linux入门学习:进程概念
  • ret2dl_resolve
  • gitlab默认克隆地址的修改
  • C# 第一章习题
  • HTTP 教程
  • 9.24 C++ 常成员,运算符重载
  • python爬虫初体验(三)——将网页数据导出csv和excel文件
  • Zero-shot、One-shot、Few-shot 这三种学习分别是什么?
  • 8.11Zero Crossing Detection (零交叉检测)
  • python全栈学习记录(十七)logging、json与pickle、time与datatime、random
  • Google 是如何开发 Web 框架的
  • 《Javascript高级程序设计 (第三版)》第五章 引用类型
  • 「前端」从UglifyJSPlugin强制开启css压缩探究webpack插件运行机制
  • 【Leetcode】104. 二叉树的最大深度
  • 【从零开始安装kubernetes-1.7.3】2.flannel、docker以及Harbor的配置以及作用
  • javascript数组去重/查找/插入/删除
  • mysql 数据库四种事务隔离级别
  • ng6--错误信息小结(持续更新)
  • python 装饰器(一)
  • python大佬养成计划----difflib模块
  • 表单中readonly的input等标签,禁止光标进入(focus)的几种方式
  • 二维平面内的碰撞检测【一】
  • 基于Javascript, Springboot的管理系统报表查询页面代码设计
  • 基于阿里云移动推送的移动应用推送模式最佳实践
  • 漫谈开发设计中的一些“原则”及“设计哲学”
  • 深度学习入门:10门免费线上课程推荐
  • 一些css基础学习笔记
  • 译有关态射的一切
  • Java数据解析之JSON
  • ### Error querying database. Cause: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
  • #Linux(Source Insight安装及工程建立)
  • #QT(一种朴素的计算器实现方法)
  • #Spring-boot高级
  • (20050108)又读《平凡的世界》
  • (PyTorch)TCN和RNN/LSTM/GRU结合实现时间序列预测
  • (react踩过的坑)Antd Select(设置了labelInValue)在FormItem中initialValue的问题
  • (二)PySpark3:SparkSQL编程
  • (分布式缓存)Redis哨兵
  • (附源码)ssm基于微信小程序的疫苗管理系统 毕业设计 092354
  • (论文阅读26/100)Weakly-supervised learning with convolutional neural networks
  • (论文阅读32/100)Flowing convnets for human pose estimation in videos
  • (十八)用JAVA编写MP3解码器——迷你播放器
  • (四) Graphivz 颜色选择
  • (新)网络工程师考点串讲与真题详解
  • (已解决)Bootstrap精美弹出框模态框modal,实现js向modal传递数据
  • (转)C#调用WebService 基础
  • * CIL library *(* CIL module *) : error LNK2005: _DllMain@12 already defined in mfcs120u.lib(dllmodu
  • ****** 二 ******、软设笔记【数据结构】-KMP算法、树、二叉树
  • *Django中的Ajax 纯js的书写样式1
  • .NET CLR基本术语