当前位置: 首页 > 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…...

【实战指南】SVN SSL协议不兼容问题:从TLS版本冲突到降级解决方案

1. 当SVN遇上SSL:TLS协议冲突的典型症状 最近在帮团队排查SVN代码拉取问题时,遇到了一个经典的错误提示:"error running context: an error occurred during ssl communication"。这个看似简单的报错背后,其实是现代加密…...

零基础入门:用eNSP搭建USG5500防火墙IPsec虚拟专用网实验环境

从零构建企业级安全隧道:eNSP模拟USG5500防火墙IPsec实战指南 当你第一次听说"IPsec"这个词时,可能会联想到那些科技电影中黑客们建立的加密通道。实际上,IPsec技术离我们并不遥远——它正默默保护着每天数以亿计的企业数据传输。本…...

ai辅助开发comfyui:让快马ai成为你构建复杂工作流的智能编程伙伴

最近在折腾ComfyUI时,发现构建复杂工作流特别容易卡在细节问题上。比如想同时用Canny边缘检测和Openpose控制生成效果,光是调试节点连接和参数就花了大半天。后来尝试用InsCode(快马)平台的AI辅助功能,发现能省下不少重复劳动。这里分享下用A…...

财务效率革命:printPDF免费电子发票批量打印工具深度解析

在当今数字化办公的时代背景下,财务、报销、税务等岗位的日常工作中,电子发票处理已成为不可忽视的重要环节。每月数百甚至上千张的电子发票,一张张手动打开、设置、打印的传统操作模式,不仅耗时耗力,效率低下&#xf…...

如何突破Windows权限壁垒?系统管理专家的秘密武器

如何突破Windows权限壁垒?系统管理专家的秘密武器 【免费下载链接】NSudo [Deprecated, work in progress alternative: https://github.com/M2Team/NanaRun] Series of System Administration Tools 项目地址: https://gitcode.com/gh_mirrors/ns/NSudo 在W…...

2024年App上架全攻略:从软著申请到应用市场发布

1. 2024年App上架必备条件全解析 想在2024年把App成功上架到各大应用市场,开发者需要跨过几道硬性门槛。最近帮几个创业团队走完上架流程,发现很多新手容易在这些基础环节卡壳。先说最重要的三件套:软件著作权证书、App备案号、应用市场要求的…...

PyFluent:重新定义CFD仿真自动化的技术革命

PyFluent:重新定义CFD仿真自动化的技术革命 【免费下载链接】pyfluent 项目地址: https://gitcode.com/gh_mirrors/pyf/pyfluent 行业痛点分析:CFD工程师的效率困境 在现代工程设计流程中,计算流体动力学(CFD&#xff09…...

从零开始:如何为你的深度学习项目选择最合适的开源数据集

从零开始:如何为你的深度学习项目选择最合适的开源数据集 当你站在深度学习项目的起点,面对琳琅满目的开源数据集时,如何做出明智的选择往往决定了项目的成败。数据集不仅是模型训练的"原材料",更是影响最终性能的关键变…...

HuTool代理请求遇阻:深入解析HTTP/1.1 407 Proxy Authentication Required的成因与实战解决方案

1. 当HuTool遇上407:代理认证失败的典型场景 最近在项目中使用HuTool发送HTTPS请求时,突然遇到一个让人头疼的错误——HTTP/1.1 407 Proxy Authentication Required。这个错误就像高速公路上的收费站,明明已经交了通行费(设置了代…...

VeighNa量化框架实战:如何免费获取TuShare金融数据(附完整接入代码)

VeighNa量化框架实战:零成本高效获取TuShare金融数据的完整指南 在量化交易领域,数据获取往往是第一个需要跨越的门槛。对于个人开发者和小型团队而言,如何在预算有限的情况下获取高质量的金融数据,成为决定项目成败的关键因素之一…...