首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

基于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相机的焦距以及相当于35mm相机的焦距。矩阵以像素为单位返回值,h以厘米为单位进行测量。 通过应用公式(3),物理距离d以厘米计算。

遥控车子系统

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

项目成果

测试样本预测准确率在85%,在实际的行驶情况下,每1秒产生10次检测(视频流大概10帧每秒)

Haar特征方法本质是旋转敏感的。但在这个项目中旋转不是问题,本项目中停止标志和交通信号灯固定对象,在真实世界这是一般情况。

对于距离测量,超声波传感器只用来测试遥控小车和障碍物之间的距离,准确读取决于传感器角度和物体表面条件,树莓派提供更好的测试量结果,事实上,只是用知道实际的距离。我们就知道何时该停车,通过树莓派摄像头得到的距离的实验数据如下:

通过单目视觉方法测量距离的影响因素如下1实际值策略误差2侦测过程物体边框变化3相机校准误差4距离与摄像机之间是非线性关系,距离越远,速度越快,误差越大 。

总之,遥控小车可以成功在设定的轨迹中行驶,可以避障,识别提示信号和交通信号,并作出相应的操作。

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20181113G1NT3Y00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券