电子信息工程基于树莓派平台的对特定物体识别系统的设计与实现.docx
- 文档编号:15851201
- 上传时间:2023-07-08
- 格式:DOCX
- 页数:25
- 大小:1.36MB
电子信息工程基于树莓派平台的对特定物体识别系统的设计与实现.docx
《电子信息工程基于树莓派平台的对特定物体识别系统的设计与实现.docx》由会员分享,可在线阅读,更多相关《电子信息工程基于树莓派平台的对特定物体识别系统的设计与实现.docx(25页珍藏版)》请在冰点文库上搜索。
电子信息工程基于树莓派平台的对特定物体识别系统的设计与实现
基于树莓派平台的对特定物体识别系统的设计与实现
DesignandimplementationofobjectrecognitionsystembasedonraspberryPIplatform
内容摘要
机器视觉是让计算机能够对图形数据产生智能化感知的一门学科,物体识别是机器视觉的基础,对一般物体识别的研究,不仅是理论还是实际都有着极其重要的意义。
在理论中,物体识别是机器视觉的基础,在实际中,对于一般物体的识别对人们的生活会有很大的影响,物体识别能够应用到国防、智能交通、智能制造等邻域,它甚至能改变当前人们的生活。
本文的物体识别是基于树莓派平台,通过使用usb摄像头来捕获外界信息,在树莓派上利用第三方库opencv对视频进行灰度以及高斯滤波处理,之后通过机器学习原理在opencv下训练出的分类器来对处理过后的视频信息进行分类识别,识别出我们选定的物体并计算出物体位于摄像头的大概方位,最后操作舵机,使舵机转动到摄像头正对着识别到的物体的位置。
实验结果表明本系统基本能做到对物体的正确识别并使摄像头基本上始终正对着识别到的物体。
关键词:
机器学习分类器舵机
Abstract
Machinevisionisasubjectthatenablescomputerstogenerateintelligentperceptionofgraphicdata.Objectrecognitionisthebasisofmachinevision.Thestudyofgeneralobjectrecognitionisofgreatsignificancenotonlyintheorybutalsoinpractice.Intheory,objectrecognitionisthebasisofmachinevision.Inpractice,therecognitionofgeneralobjectshasagreatimpactonpeople'slife.Objectrecognitioncanbeappliedtodefense,intelligenttransportation,intelligentmanufacturingandotherneighboringareas,anditcanevenchangepeople'slives.
ItisoneoftheresearchhotspotsofcomputervisionandhasbeenwidelyusedinandindustrialObjectrecognitionofthisarticleisbasedontreeblackberryplatform,throughtheuseofusbcameratocapturetheoutsideinformation,usingthird-partylibrariesinraspberrypieopencvtograyscalevideo,throughtheprincipleofmachinelearningunderopencvtrainedclassifiertoclassifythevideoaftertheprocessinginformationidentification,identifyweselectedobjectandcalculateinaboutpositionofthecamera,finallyoperationtorotatetheservomotortothecameraisontherecognitiontothepositionoftheobject.
Keyword:
machinelearningclassifierservomotor
第一章.绪论
1.1对一般物体识别的概念和意义
在当今社会,人们的生活因为科技的发展而过得越来越智能化,出现了工厂自动化生产,高铁站入口的人脸识别等等。
这些智能化的产品给予人们生活,工作中很大的便利。
而在这些智能化产品中,绝大多数的核心是对物体的识别。
物体的识别顾名思义是对一个特定的物体进行识别,使计算机能够判断出该物体是什么。
物体识别是机器视觉的基础,机器视觉是让计算机能够对图形数据产生智能化感知的一门学科,要让计算机能够对物体产生智能化感知,首先要能识别出该物体是什么,物体识别是机器视觉的基础也是机器视觉的核心,对一般物体识别的研究,不仅是理论还是实际都有着极其重要的意义。
在理论中,物体识别是机器视觉的基础,在实际中,对于一般物体的识别对人们的生活会有很大的影响,物体识别能够应用到国防、智能交通、智能制造等邻域,它甚至能改变当前人们的生活。
1.2物体识别的研究的发展历程
从上世纪至今,人们一直在努力让计算机可以拥有智慧,自主对物体进行判断。
对物体识别的研究正是为了实现计算机拥有对物体的自主判断的一个研究,是人工智能的一个重要部分。
人工智能的研究从上世纪50年代开始,从让机器可以验证一些著名的数学公理的“推理期”发展到上世纪70年代拥有人类部分知识的“知识期”。
但无论是“推理期”还是“知识期”,机器始终只会遵循着人类事先设定好的规则和程序来运作,一旦遇到程序以外的情况时,便无法自己判断。
于是,就有人提出了让机器自己学习问题的方法,即机器学习。
换句话说,机器学习是实现人工智能的一种门路。
其中的机器学习的大致含义是对机器输入大量的数据,让其在大量的数据中总结整理出其中的规律,使得以后输入同样的数据时机器能够识别出来,从而达到一个学习的过程。
机器学习的算法有很多,常见的有人工神经网络cnn或rnn,支持向量机svm,决策树以及集成学习Boosting与Bagging算法等。
使用机器学习算法来实现物体识别是当今比较常见的一种方法。
1.3物体识别系统的研究意义以及目的
对特定物体识别的研究是机器视觉的基础,机器视觉是实现现代生活智能化的一个重要的研究。
因此,对特定物体进行识别不仅是推动机器视觉发展的关键,也是实现现在生活智能化的关键。
为此,采用树莓派实现对特定物体识别的系统。
本课题目的在于对特定物体的识别的实现,以此来了解物体识别的一般流程和物体识别有关的知识。
对物体识别系统的设计包括树莓派处理摄像头捕捉的视频信息、opencv对处理后的视频信息,经过机器学习算法对视频信息进行识别以及计算出识别物体的大致方位、经过相关算法计算使舵机转动,来实现摄像头正对识别物体。
第二章.整体设计方案
2.1系统整体方案
基于树莓派平台的对特定物体识别系统的设计包括对特定物体识别部分的设计和舵机控制部分的设计。
在对特定物体识别部分的设计中,使用opencv对摄像头捕捉的视频信息进行逐帧读取、灰度等对捕捉的视频信息进行预处理使其满足级联分类器的输入要求,提取视频逐帧图像的图像特征,利用opencv训练级联分类器来识别目标物体,采用opencv对目标物体的位置计算并对目标物体用矩形框框出,在窗口上显示。
在舵机控制部分的设计中,对计算出来的目标物体的位置采用算法计算将目标物体的位置信息转变成舵机的转动角度。
2.2系统整体框架图
图2.1系统整体框架图
2.3系统平台的硬件架构
2.3.1树莓派
树莓派是一种只有信用卡大小的微型电脑,其操作系统基于Linux,硬件是基于Cortex-A72的芯片的嵌入式开发板,有A,B,B+三种型号,本文用的是4B型号的树莓派,其芯片的主频能到达1.5HZ,内存可达到4GB,是性价比比较高的开发板。
树莓派的操作系统以SD/MicroSD卡为内存硬盘,插入树莓派后会自动安装到主板上,能实现PC的基本功能,选择使用树莓派的原因除了性价比高之外还有一点是树莓派的大小只有信用卡那么大,重量轻便于携带。
2.3.2舵机
本文中所使用的舵机是航模中常用的9g舵机,这种舵机的价格比较便宜,虽然精度有限,但对于本文的设计已经够用。
它有3条线,棕色、红色、以及黄色,这三条线分别接的是地、电源和pwm信号线,如下图所示。
图2.2舵机示意图
2.3.3计算机
由于树莓派的处理速度有限,本文的模型训练是通过计算机来完成的。
让模型在计算机上训练是因为计算机有着树莓派无法比拟的计算能力,在计算机上训练模型可以节省大量训练时间。
本文使用的计算机的基本配置如下
图2.3计算机配置图
2.4系统平台的软件架构
2.4.1opencv库编译安装
opencv库是一种开源的跨平台的机器视觉库。
可以在Linux、Window以及Adnroid平台上使用。
该库由C/C++所编写,并且提供了python,matlab等接口,拥有大量的图像处理算法和机器视觉方面的算法的封装函数,以及本文所使用的opencv的级联分类器。
在树莓派上编译安装opencv库有很多种方法,可以通过在命令行上直接敲打安装命令进行联网安装,通过安装anconda来安装,以及直接使用python的pip命令来安装opencv库。
本文安装的是python2.7版本的opencv库,采用的是最直接的方法,直接敲打安装命令进行联网安装opencv库。
步骤如下:
1.更新软件源
更新软件源可以直接在命令行上使用如下命令完成。
sudoapt-getupdate
sudoapt-getuprade
2.安装opencv的依赖库
sudoapt-getinstalllibopencv-dev
3.安装opencv库
sudoapt-getinstallpython-opencv
第三章.物体识别的实现
对于物体识别的实现,本文事先拍摄了一些纸巾的图片来作为本次物体识别的目标物体,对拍摄的纸巾图片进行灰度化处理得到图片的灰度化图片,并在对图片进行图形增强处理后构建出纸巾的目标物体图形库,对图形库中的图形进行图形切割并提取图形特征,最后通过opencv的级联分类器的训练来实现纸巾的识别。
3.1目标物体图像库的建立
3.1.1采集目标物体图像
本文的物体识别是对纸巾进行识别,因此需要采集纸巾的图片。
本文收集了大概1600张纸巾图片并对这些图片打上要识别物体的标签,打上这个标签的图片集称为正样本集,同时还有收集非识别物体的图片,即不是纸巾的图片,并对这些图片打上非识别物体的标签,打上这个非识别物体的标签的图片集称为负样本集。
3.1.2对目标物体图像进行图形增强处理
对目标物体图形进行像进行图形增强处理,一方面是为了满足训练分类器对图片输入的要求,一方面是为了可以在原图片集上获得更多的图片数据。
在图形增强处理中包括了对采集的目标物体图形进行切割成统一尺寸、对图片集随机进行左右反转和图片旋转等操作。
其中,对采集的目标物体图形进行切割成统一尺寸是为了满足opencv级联分类器对于输入的要求,对图片集随机进行左右反转和图片旋转可以增加图片数据的数量,提高训练效果。
本文收集了一些纸巾的图片和非纸巾的图片,如下图所示
图3.1纸巾图片集图3.2非纸巾图片集
将收集的纸巾图片进行随机旋转,以此来增加图片集的数量,旋转后的图片如下图:
图3.3旋转后的纸巾图片
之后对纸巾图片集进行图形增强处理操作,本文对纸巾图片集进行图片大小尺度的剪切,将图片统一为40*40的大小,并对图片进行灰度化处理。
如下图
图3.3经过处理后的纸巾图片集
将图片统一为40*40是为了提高训练速度和满足opencv级联分类器对输入的要求,对图片进行灰度化是由于彩色图片包含的信息量比较大,在训练时会导致训练时间过长,程序运行慢,所以在开始训练分类器前需先把正样本集的图片进行灰度化。
3.2目标物体图像的图像特征
当我们想通过计算机来识别出我们所给的图片的内容时,计算机往往是通过图片中的特征来判断出图片的内容是什么。
这里所说的特征并没有一个特别准确的定义。
比方说,我们现在给计算机一个苹果的图片,要让计算机判断出图片的内容是苹果时,我们需要先告诉计算机苹果的特征,比如苹果的颜色、轮廓啊、长、宽等这些东西,先让计算机认识什么是苹果。
之后,当把苹果的图片输入给计算机时,它就会先获取图片的轮廓,计算图片内容的长,宽,高,获取图片内容的颜色等这些特征,再将这些特征与苹果的特征相比较,若这些特征相似,则判定图片的内容为苹果,反之,则不是苹果。
其中图片的轮廓、长、宽等,称之为图片的特征,所以说图片的特征并没有一个很准确的定义。
图片的特征有很多,当我们要识别一个物体时,若是能在图片的众多特征中获取一些比较显著的,足以代表图片的特征的话,就能使训练时间减短,并且还会有事半功倍的效果。
3.2.1常用的图像特征
在图像处理、物体识别中,使用得比较普遍的图像特征有Haar特征、LBP特征以及HOG特征。
这三个特征的原理如下:
(1)Haar特征
Haar特征[2][4][5]描述的是在局部范围内像素值之间的变化或者说反映的是图像的灰度变化情况。
Haar特征分为三类:
边缘特征、线性特征、中心特征,组合成特征模板。
如下图所示:
图3.4边缘特征图3.5中心特征图3.6线性特征
特征模板中有白色和黑色两种矩形,并定义该模板的特征值为黑色矩形像素和减去白色矩形像素和。
Haar特征的特征值的计算过程就是黑色矩形像素和减去白色矩阵像素和,但若是要对整张图片直接进行这样的计算的话,就等同于要对图片的每一个矩形区域都做一计算,计算区域内像素之和,这样会使得计算量特别的大。
所以,Haar特征经常通过积分图(一种能够减少Haar特征值计算量的技术)来计算图片的Haar特征值。
积分图是由原图所转变过来的,用来减少Haar特征值的计算量。
在积分图中,每个点的值是其原图位置左上角所有的像素之和。
具体如下图3.7和3.8所示,假设有这么一个原图3.7,那么它对应的积分图为图3.8
10
120
15
15
255
100
4
200
50
10
130
145
25
400
515
29
604
769
图3.7图3.8
比如,在图3.7中,位置(2,2)的点的值为10+120+15+255=400。
原图经过积分图技术变成积分图后,我们在计算图片的的Haar特征本来需要计算多个矩形块中的像素之和,但现在我们只需要将这每个矩形的右下角顶点对应的积分图中的值拿出来,做一个求和操作即可,计算过程如图3.9所示
图3.9
假设图中矩形S1、S2、S3、S4右下角顶点的积分图的值已知,分别为D1,D2,D3,D4,有积分图中的值的计算可知:
D1=S1;
D2=S1+S2;
D3=S1+S3;
D4=S1+S2+S3+S4
假设我们现在要提取S4区域的特征,那么S4=D4-D2-D3+D1。
这样一来,就可以将一个个矩形区域内像素累加求和计算的过程变成只有矩阵右下角定点这几个值的加减运算了,这样就很大程度上提升了算法运算效率,减少了计算。
(2)LBP特征
LBP特征的计算原理是由于图像中的物体本身包含着多个像素,物体中的像素与像素之间又存在着一些空间上的关系,而这些在空间位置上有关联的像素本身又是有一些连续的关系,因此,利用在空间位置上相邻的像素可以来表示其中的某个像素信息,LBP特征就是根据这个特定对像素进行二进制编码以此来表示某个像素的信息。
LBP特征提取是在一个3*3的窗口内,以窗口中心为阈值,大于窗口中心的像素点设为1,小于窗口中心的像素点设为0,然后从左上角顺时针读取,可获得一串二进制数,将这串二进制数换成10进制数来表示窗口中心的像素点的LBP值。
如下图所示。
1
1
1
0
1
1
1
1
90
120
255
50
80
200
150
120
150
图3.10图3.11
这样,我们可以得到(11111110),换成10进制数为254,这个值就是窗口中心的像素点的LBP值,因此LBP值的计算是不会产生浮点数的。
由于上述方法中的LBP是通过这样一个3*3的窗口计算出来的,因此在计算的时只覆盖了一个固定的范围,而不能适应其他尺寸的需求。
因此,为了满足不同尺寸的纹理特征,人们对LBP算子进行了一些改进,用圆形邻域替代之前的3*3正方形邻域,通过调整圆形领域的半径R,可以将3*3大小邻域扩展为任意大小邻域,从而来满足不同尺寸的纹理特征的需求。
这样就解决了LBP不能满足不同尺寸的纹理特征的需求。
但是当图像发生旋转时,旋转的角度不同又会导致计算出来的LBP值不同。
于是,针对无法满足图片旋转的需求,人们又对LBP计算方法进行了改进,提出了具有旋转不变性的LBP算子。
这种LBP算子定义为在不同角度旋转的圆形邻域得到的不同LBP值中取最小值作为该圆形邻域的LBP值。
(3)HOG特征
HOG特征,全称为HistogramofOrientedGridients,翻译成中文为方向梯度直方图。
HOG特征是将图片每个区域中不同方向上的梯度的值积累起来而得到的直方图。
其中梯度是一个向量,有大小和方向,表示某函数在该点处的方向导数沿着该方向取得最大值,即函数在该点的变化最快,或者说函数在该点处的变化率最大。
当我们要简单判断图片中两个像素点的梯度大小时,可以用两个像素点的值相减,得到的差值的绝对值越大就说明这两个像素点之间的梯度越大。
而对于一张图片来说,梯度比较大的地方一般是在图像的边缘、角点地方。
而正因为在边缘和角点的梯度值比其他地方要大的,所以在HOG特征的计算中,一般会优先去计算图片的角点和边缘方向上的梯度。
所以,当我们去提取一张图片的HOG特征时,往往将会这张图片的轮廓边缘等信息。
HOG特征的计算说白了就是从大到小后再从小到大,先把图片分割成一些小区域并计算这些小区域的方向梯度,最后再进行合总计算出整张图片的方向梯度。
HOG特征的计算过程大致可以分为以下几点:
1.提取窗口、2.将窗口进行切割并计算每个小范围的方向梯度、3.将每个小范围的方向梯度进行结合、4.归一化处理、5.进行向量的拼接。
第一步提取窗口的大概操作是对输入的图片裁剪出一个个窗口并对窗口的大小进行调整,一般调整为64*128大小。
第二步将窗口再进行一次分割,分割成一个个小区域,我们称为cell。
打个比方,在上一步中我们得到了一个64*128大小的窗口,然后我们对这个窗口分割成一个个cell,每个cell的大小为8*8,最后计算出每个cell的梯度幅值和梯度方向。
以opencv计算HOG特征为例,使用opencv中的一阶微分算子函数Sobel可以求出每个cell的X方向和Y方向上的梯度Ix和Iy。
算出X和Y方向的梯度后。
这个cell中的每一个像素点的梯度幅值M就可以表示为
每一个像素点的梯度方向θ可以表示θ=arctan(Iy/Ix)。
经过上面公式计算出来梯度方向的角度后会将其范围限制在0到9之间,这样做的目的主要为了减少计算,通过把计算出来的角度先限制在0到180之间,然后将其切割成9个方向,每个方向20度,再将限制后的角度除以20,就可以把梯度方向角度值就变为范围在0到9的值,对每个cell里面的梯度幅值按照这9个方向进行统计,最终每个cell的维度大小将为9。
在进行第三步时,往往将cell以行2个,列2个为一个区域,即16*16大小,将这个区域称为block。
先将block中的4个cell的梯度进行拼接,由于每个cell的维度大小为9,所以一个区域的维度大小就为36。
第4步的归一化是为了增强图像特征对光照以及环境变化时的稳定性,减少图像局部的阴影、局部曝光过多及纹理失真,尽可能的抑制图像的干扰噪声。
第5步进行向量的拼接是以block为单位进行滑动,每次滑动一个步长单位,再将所有block进行拼接就可以得到这个窗口的梯度以及这个窗口的维度大小。
比如说现在设置的步长为8,那么一个16*16的block在64*128的窗口水平可以滑动(64-16+8)/8=7次,在垂直方向可以滑动(128-16+8)/8=15次,即一个窗口的维度大小就为36*7*15=3780。
计算出图片中每一个窗口的方向梯度后就可以得到整张图片的方向梯度了。
3.3基于opencv级联分类器的物体识别
3.3.1opencv级联分类器的原理
Opencv的级联分类器是基于AdaBoost算法训练出来的一种分类器。
AdaBoost算法[1]训练分类器的步骤分为两步,1.训练多个弱分类器、2.将多个弱分类器进行级联。
在训练弱分类器这一步中,当分类器经过第一次训练后,会把第一次训练中误差率高的样本点的权重提高,误差率小的样本点的权重降低,使这些误差率高的样本点在下一次训练中能得到重视。
然后进行下一次分类训练,在第二次训练后也将重复上面的步骤,提高误差率高的样本点的权重,降低误差率低的样本点的权重。
之后就是重复此过程,直到达到预先指定的迭代次数或者误差率小于0.5后结束,之所以当误差率小于0.5后结束是因为弱分类器本身的定义就是每次识别分类时的准确率小于0.5,而这样做还能减少训练弱分类器时所消耗的时间。
训练出多个弱分类器后,AdaBoost会减少误差率比较大的分类器在级联时所占的权重以此来减少其对结果的影响以及增大误差率比较小的分类器的权重,然后将训练出来的多个分类器进行级联。
在级联分类器对物体进行识别时,会先经过多个弱分类器然后对多个弱分类器的输出结果进行统计,最后以多数服从少数的原则输出分类结果。
3.3.2训练opencv的级联分类器
利用opencv,我们能训练出自己的级联分类器[3][5][7][8]。
训练opencv的级联分类器前,我们需要先准备级联分类器所要求的输入,正样本集的.vec文件和包含负样本集所有图片路径的.txt文件。
本文利用opencv自带的opencv_createsamples.exe来生成.vec文件。
具体做法是先在存放正样本集的文件夹中生成记录每个正样本图片存放路径的.txt文件,然后使用opencv_createsamples.exe生成正样本集的.vec文件。
其中需要指定生成的.vec文件的名称、存放路径和记录每个正样本图片存放路径的.txt文件的名称和存放路径。
生成.vec文件和负样本集的.txt文件后,利用opencv_traincascade.exe文件就可以进行分类器模型的训练了。
下图为训练模型的过程
图3.12
执行opencv_traincascade.exe会自动提取图片特征并进行训练,在训练开始前需要指定一些参数,其中包括训练好的模型存放的路径、用于训练的.vec文件和.txt文件的路径、用于训练的图片集数量、级联的层数以及要提取图片的什么特征,opencv都级联分类器支持自动提取的特征有Haar、LBP、HOG三种。
在opencv的级联分类器训练完成后,我们会得到一个名字为cascade.xml文件。
这个文件就是训练出来的模型。
之后在写识别维达纸巾的代码时,使用opencv的CascadeClassifie
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 电子信息工程 基于 树莓派 平台 特定 物体 识别 系统 设计 实现
![提示](https://static.bingdoc.com/images/bang_tan.gif)