基于OpenCV和深度学习的自动驾驶遥控小车

阅读原文

项目中使用的技术

Python + OpenCV Neural Network + Haar-Cascade Classifiers

项目目标

改装后遥控小车完成三个任务:自动驾驶,识别信号(停止和交通灯)和遇到障碍停车。

系统设计

该系统有三个子系统组成:信号输入子系统(相机,超声波传感器),计算机处理子系统,遥控小车子系统

在这里插入图片描述

信号输入子系统

连接有摄像机模块和超声波传感器模块(HC-SR04)有树莓派开发板(型号B+)一块。树莓派上有两个客户端程序,分别将视频流和超声波数据通过本地WiFi传递给连接到统一局域网中的计算机程序。视频流分辨率标准是QVGA(320x240).

计算机处理子系统

计算机处理子系统是个多任务程序:接收树莓派发送数据,神经网络训练和预测,目标检测(停止信号和交通信号灯),距离测量(单眼视觉),通过USB发送方向指令给arduino

TCP 服务器程序

多线程TCP 服务器程序 接收树莓派发送的视频帧数据,超声波数据。图像帧被转换为灰度图像然后编码进入numpy 数组

神经网络

用神经网络的优势是,一旦神经网络训练完成,后面调用神经网络的训练的结果,预测结果将会非常快速。只需要少于半张的图片就能完成训练和预测目的。在输入层我们有38400(320*120)个节点,隐藏层有32个节点,隐藏层的节点数量选择相对随意。在输出层有四个节点,对应四个方向:左右前后(后不会在本项目中使用)
在这里插入图片描述
下面展示手机训练数据的过程,第一步裁剪每帧后转换为numpy数组。被训练的图片需要和训练标签配对。最后全部的已配对图片和标签保存的npz文件中。神经网络在OpenCV中使用反向传播法。一旦训练完成,权重参数将被保存为xml文件,为了产生预测,相同的神经网络会构建并加载已经训练的xml文件
在这里插入图片描述

目标检测

目标检测使用 基于形状的方法和记忆特征的Haar 层级分类器,本项目只关注停止信号和交通信号检测,由于每个目标需要自己的分类器,在训练和检测中遵循相同的过程
也提供一个训练者,使用手机获取阳型样本(包含目标对象),只有在需要的目标可见采取裁剪,阴型样本(不包含目标对象)随机获取。具体来说,交通灯是阳型要本包含 相同数量的红灯和绿灯,同样的阴型样本数据用来表示停止标志和在训练的交通灯。下面展示了在本项目中一些阳和阴的样本参数
!在这里插入图片描述在这里插入图片描述

为了识别不同状态的交通灯(红色,绿色),需要已额外的图像处理过程,下面的流程图总结了识别交通信号灯处理过程

首先,用已训练的层级分类器检测交通信号灯,框选处理感兴趣的区域(ROI),然后,使用高斯滤波减少ROI噪声,第三,找出ROI中最亮的点,最后基于ROI最亮点检测出是红色或者绿色

距离测量

树莓派 只支持一个树莓派摄像头模块。如果使用两个USB摄像头将增加遥控车负担。因而我们使用单目视觉算法(monocular vision)
本个项目修改了测量目标距离单目方法的几何模型
在这里插入图片描述
P是目标上的一点;d是点P到光学中心的距离。基于以上的几何关系,公式(1)展示如何计算距离d,在表示(1),f表示摄像头的焦距;∂表相机的倾斜角度;h是光学中心高度;(x0,y0)是平面和光轴组成的立体中的一点;(x,y)是P点在图像平面上的投射点。假设O1(u0,v0)是光轴与像平面交点的摄像机坐标,也假设与图像平面上的x轴和y轴对应的像素的物理尺寸为dx和dy。然后在这里插入图片描述

v是在y轴相机坐标可以通过对象检测线程获取。所有的参数相机的内在参数可从相机矩阵中获取.
OpenCV提供相机校准函数。5Mp 树莓派摄像头校准后返回相机矩阵。理想情况a_x,a_y返回相同的值。这两个者方差
这两个值的方差将导致图像中的非方形像素。 下面的矩阵表明pi相机上的固定焦距镜头在处理失真方面提供了相当好的结果。 这是一篇有趣的文章,讨论了带有镜头镜头的pi相机的焦距以及相当于35mm相机的焦距。矩阵以像素为单位返回值,h以厘米为单位进行测量。 通过应用公式(3),物理距离d以厘米计算。

遥控车子系统

遥控小车在项目中是一个开发类型控制器。当按钮按下电阻两边相关芯片引脚电平为0。Arduino板被用来模拟按钮按压的动作。选择四个Arduino引脚链接四个芯片引脚,对应前后左右。Arduino引脚发出低电平表示控制器引脚接地,Arduino发出高电平表示电阻两端没有改变。Arduino同坐USB和电脑相连,通过串口协议通信。电脑发送命令给Arduino命令,Arduino把命令转换为高低电平模拟按钮来控制遥控小车。

项目成果

测试样本预测准确率在85%,在实际的行驶情况下,每1秒产生10次检测(视频流大概10帧每秒)
Haar特征方法本质是旋转敏感的。但在这个项目中旋转不是问题,本项目中停止标志和交通信号灯固定对象,在真实世界这是一般情况。

对于距离测量,超声波传感器只用来测试遥控小车和障碍物之间的距离,准确读取决于传感器角度和物体表面条件,树莓派提供更好的测试量结果,事实上,只是用知道实际的距离。我们就知道何时该停车,通过树莓派摄像头得到的距离的实验数据如下:
距离测量
通过单目视觉方法测量距离的影响因素如下1实际值策略误差2侦测过程物体边框变化3相机校准误差4距离与摄像机之间是非线性关系,距离越远,速度越快,误差越大。
总之,遥控小车可以成功在设定的轨迹中行驶,可以避障,识别提示信号和交通信号,并作出相应的操作。

  • 14
    点赞
  • 121
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值