当前位置: 首页 > 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错误

相关文章:

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

单目相机减速带检测以及测距项目是一个计算机视觉领域的应用,旨在使用一个摄像头(单目相机)来识别道路上的减速带,并进一步估计车辆与减速带之间的距离。这样的系统对于智能驾驶辅助系统(ADAS)特别有用&…...

Xilinx FPGA:vivado实现乒乓缓存

一、项目要求 1、用两个伪双端口的RAM实现缓存 2、先写buffer1,再写buffer2 ,在读buffer1的同时写buffer2,在读buffer2的同时写buffer1。 3、写端口50M时钟,写入16个8bit 的数据,读出时钟25M,读出8个16…...

解决 VM 虚拟机网络连接异常导致的 Finalshell 无法连接及 ifconfig 中 ens33 丢失问题

在使用 VM 虚拟机的过程中,遇到了一个颇为棘手的网络连接问题。平时虚拟机都能够正常启动并使用,但昨天在启用虚拟机时更换了一下网络节点,结果今天打开虚拟机后。Finalshell 无法连接上虚拟机,并且输入 ifconfig 命令后也没有 en…...

深入Django(三)

Django视图(Views)详解 引言 在前两天的博客中,我们介绍了Django的基本概念和模型系统。今天,我们将深入探讨Django的视图(Views),它们是处理用户请求和返回响应的地方。 什么是Django视图&a…...

观测云赋能「阿里云飞天企业版」,打造全方位监控观测解决方案

近日,观测云成功通过了「阿里云飞天企业版」的生态集成认证测试,并荣获阿里云颁发的产品生态集成认证证书。作为监控观测领域的领军者,观测云一直专注于提供统一的数据视角,助力用户构建起全球范围内的端到端全链路可观测服务。此…...

51单片机第27步_单片机工作在睡眠模式

重点学习51单片机工作在睡眠模式。 1、进入“睡眠模式”的方法 通过将PCON寄存器中的PDWN置1,则CPU会进入“睡眠模式”。在“睡眠模式”中,晶振将停止工作,因此,定时器和串口都将停止工作,只有外部中断继续工作。如果单片机电源…...

互联网应用主流框架整合之SpringCloud微服务治理

微服务架构理念 关于微服务的概念、理念及设计相关内容,并没有特别严格的边界和定义,某种意义上说,适合的就是最好的,在之前的文章中有过详细的阐述,微服务[v1.0.0][Spring生态概述]、微服务[设计与运行]、微服务[v1.…...

超快的 Python 包管理工具「GitHub 热点速览」

天下武功,无坚不破,唯快不破! 要想赢得程序员的欢心,工具的速度至关重要。仅需这一优势,即可使其在众多竞争对手中脱颖而出,迅速赢得开发者的偏爱。以这款号称下一代极速 Python 包管理工具——uv 为例&…...

网络基础:OSPF 协议

OSPF(Open Shortest Path First)是一种广泛使用的链路状态路由协议,用于IP网络中的内部网关协议(IGP)。OSPF通过在网络中的所有路由器之间交换路由信息,选择从源到目的地的最优路径。OSPF工作在OSI模型的第…...

1456.定长子串中元音的最大数目

思路: 首次是滑动窗口, 然后遍历子字符串,这样复杂度太高,没过测试 改进,滑动窗口先求出第一个窗口中元音数量, 然后利用滑动式,一进一出方式判断首尾是否是原因即可 给你字符串 s 和整数 k 。 …...

基于xilinx FPGA的GTX/GTH/GTY位置信息查看方式(如X0Y0在bank几)

目录 1 概述2 参考文档3 查看方式4查询总结: 1 概述 本文用于介绍如何查看xilinx fpga GTX得位置信息(如X0Y0在哪个BANK/Quad)。 2 参考文档 《ug476_7Series_Transceivers》 《pg156-ultrascale-pcie-gen3-en-us-4.4》 3 查看方式 通过…...

JAVA小知识30:JAVA多线程篇1,认识多线程与线程安全问题以及解决方案。(万字解析)

来 多线程,一个学起来挺难但是实际应用不难的一个知识点,甚至在很多情况下都不需要考虑,最多就是写测试类的时候模拟一下并发,现在我们就来讲讲基础的多线程知识。 一、线程和进程、并发与并行 1.1、线程和进程 线程&am…...

Python数据分析案例47——笔记本电脑价格影响因素分析

案例背景 博主对电脑的价格和配置一直略有研究,正好最近也有笔记本电脑相关的数据,想着来做点分析吧,写成一个案例。基本上描述性统计,画图,分组聚合,机器学习,交叉验证,搜索超参数…...

【加密与解密】【09】GPG Client签名流程

什么是GPG客户端 GPG客户端是实现PGP加密协议的一套客户端程序,可用于加密或签名 下载GPG客户端 建议安装命令行工具,图形工具一般不具备完整功能 https://gnupg.org/download/index.html生成私钥 此时会要求你输入名称,邮箱&#xff0c…...

“2024软博会” 为软件企业提供集展示、交流、合作一站式平台

随着全球科技浪潮的涌动,软件行业正迎来前所未有的发展机遇,成为了全球新一轮竞争的“制高点”,以及未来经济发展的“增长点”。在当前互联网、大数据、云计算、人工智能、区块链等技术加速创新的背景下,数字经济已经渗透到经济社…...

【Zoom安全解析】深入Zoom的端到端加密机制

标题:【Zoom安全解析】深入Zoom的端到端加密机制 在远程工作和在线会议变得越来越普及的今天,视频会议平台的安全性成为了用户关注的焦点。Zoom作为全球领先的视频会议软件,其端到端加密(E2EE)功能保证了通话的安全性…...

7 动态规划

下面的例子不错: 对于动态规划,能学到不少东西; 你要清楚每一步都在做什么,划分细致就能够拆解清楚! xk​​​​​​​. - 力扣(LeetCode) labuladong的算法笔记-动态规划-CSDN博客 动态规划是…...

.net 快速开发框架开源

DF.OpenAPI开源系统 前后端分离,开箱即用,java经典功能.net也具备 系统介绍 DF.OpenAPI是基于Admin.NET二开的,是一个开源的多租户后台管理系统。采用前后端分离技术(前端使用vue.js,后端使用.net 3~.net6&#xff…...

《昇思25天学习打卡营第06天|网络构建》

网络构建 神经网络模型由神经网络层和Tensor操作构成 #实验环境已经预装了mindspore2.2.14,如需更换mindspore版本,可更改下面mindspore的版本号 !pip uninstall mindspore -y !pip install -i https://pypi.mirrors.ustc.edu.cn/simple mindspore2.2.…...

【链表】- 两两交换链表中的节点

1. 对应力扣题目连接 两两交换链表中的节点 2. 实现案例代码 public class ExchangeLinkedListsPairwise {public static void main(String[] args) {// 示例链表:[1, 2, 3, 4]ListNode head new ListNode(1);head.next new ListNode(2);head.next.next new L…...

装饰模式(Decorator Pattern)重构java邮件发奖系统实战

前言 现在我们有个如下的需求,设计一个邮件发奖的小系统, 需求 1.数据验证 → 2. 敏感信息加密 → 3. 日志记录 → 4. 实际发送邮件 装饰器模式(Decorator Pattern)允许向一个现有的对象添加新的功能,同时又不改变其…...

C++实现分布式网络通信框架RPC(3)--rpc调用端

目录 一、前言 二、UserServiceRpc_Stub 三、 CallMethod方法的重写 头文件 实现 四、rpc调用端的调用 实现 五、 google::protobuf::RpcController *controller 头文件 实现 六、总结 一、前言 在前边的文章中,我们已经大致实现了rpc服务端的各项功能代…...

K8S认证|CKS题库+答案| 11. AppArmor

目录 11. AppArmor 免费获取并激活 CKA_v1.31_模拟系统 题目 开始操作: 1)、切换集群 2)、切换节点 3)、切换到 apparmor 的目录 4)、执行 apparmor 策略模块 5)、修改 pod 文件 6)、…...

2025年能源电力系统与流体力学国际会议 (EPSFD 2025)

2025年能源电力系统与流体力学国际会议(EPSFD 2025)将于本年度在美丽的杭州盛大召开。作为全球能源、电力系统以及流体力学领域的顶级盛会,EPSFD 2025旨在为来自世界各地的科学家、工程师和研究人员提供一个展示最新研究成果、分享实践经验及…...

质量体系的重要

质量体系是为确保产品、服务或过程质量满足规定要求,由相互关联的要素构成的有机整体。其核心内容可归纳为以下五个方面: 🏛️ 一、组织架构与职责 质量体系明确组织内各部门、岗位的职责与权限,形成层级清晰的管理网络&#xf…...

Axios请求超时重发机制

Axios 超时重新请求实现方案 在 Axios 中实现超时重新请求可以通过以下几种方式: 1. 使用拦截器实现自动重试 import axios from axios;// 创建axios实例 const instance axios.create();// 设置超时时间 instance.defaults.timeout 5000;// 最大重试次数 cons…...

Vue3 PC端 UI组件库我更推荐Naive UI

一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...

【阅读笔记】MemOS: 大语言模型内存增强生成操作系统

核心速览 研究背景 ​​研究问题​​:这篇文章要解决的问题是当前大型语言模型(LLMs)在处理内存方面的局限性。LLMs虽然在语言感知和生成方面表现出色,但缺乏统一的、结构化的内存架构。现有的方法如检索增强生成(RA…...

基于django+vue的健身房管理系统-vue

开发语言:Python框架:djangoPython版本:python3.8数据库:mysql 5.7数据库工具:Navicat12开发软件:PyCharm 系统展示 会员信息管理 员工信息管理 会员卡类型管理 健身项目管理 会员卡管理 摘要 健身房管理…...

Modbus转Ethernet IP深度解析:磨粉设备效率跃升的底层技术密码

在建材矿粉磨系统中,开疆智能Modbus转Ethernet IP网关KJ-EIP-101的应用案例是一个重要的技术革新。这个转换过程涉及到两种主要的通信协议:Modbus和Ethernet IP。Modbus是一种串行通信协议,广泛应用于工业控制系统中。它简单、易于部署和维护…...