项目总结

基于HOG和颜色识别算法的智能小车

项目的场景:

两辆智能小车模拟警察和小偷的追逐的一个过程,在这个过程中涉及到的技术难点包括车的轮廓识别(HOG+SVM)、超声波避障、近处颜色识别、警察和小偷追逐的策略设计。

整体的架构如下:

项目总结_第1张图片

电机驱动:用于控制轮胎的转动

    移动电源:用于供电

    Arduino:底层控制,和电机驱动和舵机、超声波传感器相连。传出电信号指令和传入参数,和树莓派通过usb相连,进行数据的传输

    树莓派:是一款基于Linux的单板机电脑,里面适合做一些比较复杂的运算,比如这里集成了几个模块的功能:与摄像头相连,处理图像;网络通信模块,用于我们通过局域网登录到树莓派的系统,进行指令控制;与Arduino通过USB的形式相连,Arduino相当于是以通用设备的形式接入的

    摄像头:放置于小车前方,通过数据总线和树莓派相连,用于采集图像

    超声波传感器:用来测距

    舵机:用来控制小车的夹子,做夹取的动作

关于HOG+SVM算法
方向梯度直方图(Histogram of Oriented Gradient,HOG)特征是通过计算和统计图像局部区域的方向梯度直方图来构成的特征,是用于检测识别特定的物体的特征描述子。其本质是方向梯度统计信息,图像中的梯度主要存在于物体边缘处,因此图像中的局部目标能被梯度很好的描述。在实际操作中,先将图像分割成小的连通区域(细胞单元),然后计算每个区域中像素点的方向梯度直方图,最后将所有直方图组合起来即可得到特征描述器(descriptor)。之后,通过检测图像中符合HOG特征描述子的区域即可识别出图像中特定的物体。
具体步骤:

  1. 对整个图像进行归一化(归一化gamma空间和颜色空间可以减少光照和阴影带来的影响)
  2. 计算图像横坐标和纵坐标方向的梯度,并据此计算每个像素位置的梯度方向值。
  3. 划分细胞单元并为每个细胞单元构建梯度方向直方图。(减少物体外观的影响)
  4. 把细胞单元组合成大的块(block),块内归一化梯度直方图(进一步地对光照、阴影和边缘进行压缩)
  5. 收集HOG特征并组成特征向量(供分类使用)

支持向量机( Support Vector Machine, SVM)是根据分离超平面来定义的判别分类器。换言之,给定一组带标签的训练样本,算法将会输出一个最优超平面(离他最近的训练样本的距离最大,这样就不容易受到噪声的干扰)对新样本(测试样本)进行分类。

通过给出的正样本(含有小车的局部图像)和负样本(不含有小车的局部图像)进行训练,求出最优超平面,这样就可以区分出含有小车的局部图像,进而在图像中划分出小车所在的区域。所给的样本越多,所得的超平面对样本的划分越准确,但是会出现漏检的状况。
具体步骤:

  1. 先对给定的样本图片采样,样本统一为128*64大小的样本图像,样本要在同一环境下收集。

    正样本:在含有小车的图像中截取含有小车的区域。
    负样本:在不含有小车的图像中随机抽样。

  2. 提取正负样本的HOG特征向量。

  3. 训练SVM。

由于在试验中小车的活动场地较小,采样数较小,而且检测的图像大小设置为320*240,检测窗口的步数不多,所以小车识别所花时间为0.35s,能使小车在远处发现目标并较快的做出反应。但是当小车靠近到目标小车占图像一半以上的时候,容易失去目标,所以在近处采用另一种追踪方式。

关于超声波避障:根据从超声波传感器实时采集的参数来进行决策判断小车的前进方向,从而实现避障

出现的问题:反应存在延迟,当收集完数据做出决策时,小车已经超出我们预测的范围,或者撞向墙壁了

优化:不连续发送同一指令给小车Arduino,每次行进均让小车转过任意角度

关于颜色识别算法:是用于近处的小车识别,因为在近处失去了整车的特征识别,所以在近处采取的是颜色识别算法。具体的做法是在其中一辆小车的车尾加上一段不同颜色的彩条,对于颜色设别的颜色选定来说,颜色一定要鲜艳(品红),以区分背景的其他颜色,然后识别环境要求要比较单一,尽量减少其他颜色背景出现,比如说一间空旷的白墙的房间就是比较好的选择。之后就是对于小车采集到的图像进行处理,搜索图像中的红色,如果存在红色面积最大的那个色块,则认为是目标物体。

具体步骤:

  • RGB模式转化为HSV模式(一种非线性的转变,为什么要进行这个转变?HSV模式是一种更加接近人眼对颜色感知的一种颜色空间表示模式,是从色相、饱和度和明度来进行表示的,所以对于我们识别颜色来说更加接近)
  • 保留给定的颜色范围内的颜色(这里是鲜艳的红色)
  • 用腐蚀和膨胀处理去除早点和填补漏洞
  • 检测轮廓并计算面积,取面积最大的色块即为目标物体

关于策略的设计

策略篇:

为了增加随机性,我们选用了触壁之后随机反弹的模式。

警察:

  • 找不到小偷时
    直线走,碰到墙壁之后转动随机的角度后反弹。

  • 找到小偷
    直线冲向小偷,若没有检测到紫色色块,则向小偷前进方向堵路;若检测到紫色色块,则调整好方向进行夹持,并向小偷发送信息“freeze!“,当夹持紫色色块动作保持一秒后,像小偷发出”arrest!”指令。

  • 丢失目标
    丢失目标后,先原地转圈寻找目标,若依旧找不到目标则进入随机搜查模式。

小偷:

  • 找不到警察时
    直线走,碰到墙壁之后转动随机的角度后反弹。

  • 找到警察
    加速逃跑,并保证警察在身后,接收到“freeze!”信息时进入冰冻状态(停顿一秒),接收到“arrest!”时停止动作.

你可能感兴趣的:(项目)