项目中使用的技术
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距离与摄像机之间是非线性关系,距离越远,速度越快,误差越大。
总之,遥控小车可以成功在设定的轨迹中行驶,可以避障,识别提示信号和交通信号,并作出相应的操作。