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

单目相机减速带检测以及测距

单目相机减速带检测以及测距项目是一个计算机视觉领域的应用,旨在使用一个摄像头(单目相机)来识别道路上的减速带,并进一步估计车辆与减速带之间的距离。这样的系统对于智能驾驶辅助系统(ADAS)特别有用,因为它可以帮助驾驶员提前减速,避免碰撞或剧烈颠簸。

下面是一个典型的单目相机减速带检测和测距项目的组成部分:

1. 数据集准备

  • 收集包含减速带的大量图像或视频片段,这些数据用于训练机器学习模型。
  • 数据集应该多样化,包括不同天气条件、光照水平、减速带类型和视角的图像。

2. 目标检测模型训练

  • 使用深度学习框架,如YOLOv5、SSD或Faster R-CNN,训练一个目标检测模型以识别减速带。
  • 训练模型需要标注的数据,即在每张图像中标注减速带的位置。

3. 相机标定

  • 为了准确地测量距离,必须先标定相机,以获取其内参数(如焦距、主点位置)和任何畸变参数。
  • 标定通常使用带有已知几何图案(如棋盘格)的标定板完成。

4. 测距算法开发

  • 开发算法来根据减速带在图像中的大小和相机的参数计算其距离。
  • 可以采用三角法或透视投影法,其中已知减速带的实际尺寸是一个关键参数。

5. 系统集成与测试

  • 将检测和测距模块整合到一个系统中,确保它们协同工作。
  • 在各种条件下测试系统,包括不同的光线、角度和减速带类型,以评估其鲁棒性和准确性。

6. 实时处理

  • 优化系统以实现实时处理,这对于车载应用至关重要。
  • 可能需要硬件加速,如GPU或专用的计算机视觉处理器,以达到所需的帧率。

7. 用户界面与警报系统

  • 设计用户界面,显示减速带的位置和距离信息。
  • 如果减速带距离过近,可能需要触发警报系统,提醒驾驶员采取行动。

在实际应用中,单目相机减速带检测和测距项目可能还会涉及到一些挑战,例如减速带的多样性(形状、颜色、材质)、环境因素的影响(如阴影、雨雪等)以及相机运动的补偿等。因此,持续的改进和适应性是此类项目成功的关键。

 

一、相机标定(拍照+标定+去畸变)

​ 相机标定在calibration.py里实现。目前不足:鱼眼相机去畸变有点问题,其他均正常。

​ 使用方法:运行calibration.py,按照提示运行即可。请注意,本程序capture时会自动清空标定板图片文件夹(已修改为可选择是否清空)。先capture拍照,拍照数目可以在程序里预设;然后calibrate标定,不同类型相机的结果会自动写入不同config里。然后可以undistort去畸变。

​ 标定板相关请参考我的博客:本程序使用的标定板是x方向奇数11个、y方向偶数8个、角点间距1cm的标定板,在程序里为calibration.py的:

board = Board(11,8,10) #col row width(mm)

把部分函数放入到了utils/calibrate下,供其他程序使用。新增了鸟瞰图,运行birdeye.py即可。

​ PS:鸟瞰图转换中,标定板平面坐标系的原点以左上角为基础,向左上平移了200mm。

二、单应矩阵标定

​ 本着有啥用啥的原则,我直接用宿舍的瓷砖标定了哈哈哈(其实之前用外面的瓷砖标定过,但是相机太烂了拍不清,在宿舍放了几个标志物再标定的)。

​ 单应矩阵至少需要四个点,用findHomography函数,这里有个坑了我一下午的坑:这个函数找到的H满足 $$ c[x,y,1]^T = H[u,v,1]^T $$​ 其中,u,v是成像坐标系的点,x,y是地面坐标系的点。一定注意还有个c,因为H是八自由度的,最后得到转换后的坐标不是标准齐次坐标,还要手动转化为标准齐次坐标。

​ 程序运行方法:运行getHomography.py以拍照、鼠标点击获得像素以及标定(大体是这样,我最后把像素坐标写死了),然后求解H;运行getDistance以实现运用获得的H点击像素之后测距(可能以后会删除,因为这个.py是用来测试测距的)。

三、目标检测

​ 初步试了下用自己的数据集训练。建立了datasets文件夹,标注工具为labelimg。数据处理过程为:

1.将要标注的图片放到data/images里。

2.用labelimg标注,标注结果放到data/labels里。

3.进入yolo文件夹(否则路径不对),运行yolo文件夹下的data_process.py来划分数据,生成训练集等路径。

踩了以下坑,作个汇总以作为注意事项。

1.train.py的config我更改过。之前当使用预训练时,会报keyerror:"assets"的错误。(据我观察,这基本就是.pt文件路径不对的问题,请检查自己参数里的路径是否写对了)。

2.train.txt等等里面的路径最好还是写绝对路径,用os.getcwd和join拼接即可。

3.如果要用cpu训练,把utils/loss.py里面的780多行那几个device gpu:0务必改成cpu:0.

4.如果要使用预训练,请修改cfg/training/yolov7.yaml里的nc为对应数量。

5.训练前记得删除dataset文件夹里的cache!

6.yaml不要写汉语!!!会gbk错误

http://www.lryc.cn/news/390765.html

相关文章:

  • Xilinx FPGA:vivado实现乒乓缓存
  • 解决 VM 虚拟机网络连接异常导致的 Finalshell 无法连接及 ifconfig 中 ens33 丢失问题
  • 深入Django(三)
  • 观测云赋能「阿里云飞天企业版」,打造全方位监控观测解决方案
  • 51单片机第27步_单片机工作在睡眠模式
  • 互联网应用主流框架整合之SpringCloud微服务治理
  • 超快的 Python 包管理工具「GitHub 热点速览」
  • 网络基础:OSPF 协议
  • 1456.定长子串中元音的最大数目
  • 基于xilinx FPGA的GTX/GTH/GTY位置信息查看方式(如X0Y0在bank几)
  • JAVA小知识30:JAVA多线程篇1,认识多线程与线程安全问题以及解决方案。(万字解析)
  • Python数据分析案例47——笔记本电脑价格影响因素分析
  • 【加密与解密】【09】GPG Client签名流程
  • “2024软博会” 为软件企业提供集展示、交流、合作一站式平台
  • 【Zoom安全解析】深入Zoom的端到端加密机制
  • 7 动态规划
  • .net 快速开发框架开源
  • 《昇思25天学习打卡营第06天|网络构建》
  • 【链表】- 两两交换链表中的节点
  • java设计模式(四)——抽象工厂模式
  • 动物检测yolo格式数据集(水牛 、大象 、犀牛 、斑马四类)
  • 昇思25天学习打卡营第05天 | 数据变换 Transforms
  • Springboot+MySQL 公寓报修管理系统源码
  • jenkins 发布服务到linux服务器
  • Appium+python自动化(三十九)-Appium自动化测试框架综合实践 - 代码实现(超详解)
  • 防止跨站脚本攻击XSS之Antisamy
  • Python爬虫实战案例——王者荣耀皮肤抓取
  • PyTorch计算机视觉实战:目标检测、图像处理与深度学习
  • 4D 生物打印:将时间维度融入,打造个性化动态组织
  • 银行清算业务功能测试解析