阅读原文

项目中使用的技术

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

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

  1. 地平线机器人_地平线机器人CEO余凯:基于深度学习的自动驾驶之路

    请关注公众号"汽车创新港",获取后续更多论坛实录! 加工作人员微信号:tinydanio,备注"我要入群"直接进入直播群! 今天都是大牛,下面的也是技术大牛,是 ...

  2. 目标检测YOLO实战应用案例100讲-基于深度学习的自动驾驶目标检测算法研究

    目录 基于深度学习的自动驾驶目标检测算法研究 相关理论基础 2.1  卷积神经网络基本原理

  3. 语义分割:基于openCV和深度学习(二)

    语义分割:基于openCV和深度学习(二) Semantic segmentation in images with OpenCV 开始吧-打开segment.py归档并插入以下代码: Semanti ...

  4. 语义分割:基于openCV和深度学习(一)

    语义分割:基于openCV和深度学习(一) Semantic segmentation with OpenCV and deep learning 介绍如何使用OpenCV.深度学习和ENet架构执行 ...

  5. 极市分享|第34期 袁源Jerry:机器学习及深度学习在自动驾驶中的应用

    | 极市线上分享 第34期 | ➤活动信息 主题:机器学习及深度学习在自动驾驶中的应用 时间:本周四(10月18日)晚20:00~21:30 ➤嘉宾信息 Jerry 贪心科技讲师,美国微软总部和美国亚 ...

  6. 深度学习在自动驾驶领域的应用

    1.什么是深度学习 1.1  基本概念 深度学习即深度神经网络学习,其概念源于人工神经网络的研究,是一种特殊的机器学习形式:其目的在于建立和模拟人脑进行分析学习的神经网络,通过模仿人脑的接受和反馈机制 ...

  7. 麻省理工学院-2017年-深度学习与自动驾驶视频课程分享

    MIT最近放出了一套关于深度学习与自动驾驶应用的课程,主讲人Lex Fridman,MIT的一名博士后,主要半自动驾驶.场景感知.运动控制和规划等方向. 这门课程介绍了深度学习相关知识,以自动驾驶为载 ...

  8. python实现人脸口罩检测(基于opencv和深度学习两种方法)

    人脸口罩检测GUI系统(基于opencv和深度学习两种方法对比) 由于疫情的影响,人脸口罩检测系统的开发成为很多人争相开发的一种算法.很多公司或者个人都开源了他们很多的代码或者SDK.大家在GitHu ...

  9. 毕业设计-深度学习在自动驾驶领域应用

    目录 前言 课题背景和意义 实现技术思路 一.深度学习算法 二. 深度学习在自动驾驶中的应用 实现效果图样例 最后 前言

最新文章

  1. /etc/fstab文件损坏怎么办
  2. 软件测试2019:第二次作业
  3. JSON 之 SuperObject(16): 实例 - 解析 Google 关键字搜索排名
  4. c语言编程功率谱,有谁会用C编写求功率谱(答案越多越好)
  5. gg参数:dblogreader
  6. linux命令chmod如果当前用户属于多个组,那这个命令中的g指的是哪个组?按什么规则?
  7. linux 线程管理、同步机制等
  8. 矩形波傅里叶变换对以及三角波傅里叶变换
  9. Python实现各种进制转换问题,so easy
  10. JAVA中inputstring_java IO流 之 字节输入流 InputString()
  11. IS-IS详解(十六)——IS-IS 分片扩展
  12. 建立U盘免疫病毒文件_七夕小子_新浪博客
  13. 计算机教室 设备负荷,设备建设标准和规范教室线缆布线.ppt
  14. python标准图形库——turtle
  15. 【北亚数据恢复】raid损坏导致硬盘灯报警离线,存储无法使用的数据恢复
  16. Python地理数据处理 十一:空间参照系统(SRS)
  17. 解决windows下无法创建以“.”开头的文件夹或者文件
  18. 如何查看目前所有会话的状态oracle,Oracle一些常用查看数据库状态SQL
  19. Oracle数据库配置二
  20. 11.13Z周报-HRNet

热门文章

  1. ZZNU 1989 (求线段上的整数点个数)
  2. 电商推荐系统-数据加载
  3. 计算机考试准考证可以过塑吗
  4. CMP指令、标志位、JCC指令总结
  5. 高等数学_导数与微分_可导与连续可导
  6. 弯道超车成为行业龙头,什么是粉笔科技的关键驱动力?
  7. Javasript实现照片墙
  8. OpenCV视频篇——视频文件格式--视频封装格式--视频编码格式区分
  9. 27岁做技术的女人感悟
  10. 记录一次曲折的开发经历