版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
本科毕业设计(论文)基于tensorflow的手势识别贪吃蛇游戏GesturerecognitionSnakegamebasedontensorflow院(系)计算机学院成绩评定成绩项论文成绩(百分制)折合比例实得成绩(折合分)指导教师成绩30%评阅教师成绩20%答辩成绩50%总评成绩注:毕业设计(论文)成绩按百分制评定。答辩成绩不及格的(评分低于60分的),则该毕业设计(论文)总评成绩为答辩成绩。摘要图像识别是人工智能技术的一门重要领域之一,现代个个领域有涉及到图像识别功能,例如通信、医疗、军事安全、机器视觉等等都有所应用。到现在为止,图像识别技术是人工智能的一个重要的分支,如Vuforia这个软件平台利用图像识别技术提供了大量的有关AR和VR的相关技术与功能,Facebook通过图像识别功能帮助盲人“看”照片,图像识别是一个非常抽象的一门技术。但是它的应用到具体的情境当中的时候,它的潜力是无可反驳的。本论文作品所用到的是一种基于tensorflow而搭建的卷积神经网络,首先是录入图像信息,调整摄像头捕捉手势的移动方向,分类保存在不同的文件夹之中,用于之后卷积神经网络训练判别方向的图像数据。接下来基于Tensorflow搭建一个卷积神经网络,通过对卷积层、池化层、全连接层、优化器中的学习率等进行参数的调整测试,最终得到一个比较高准确率训练好的模型。接着通过python中的pygame库实现一个贪吃蛇游戏的桌面小游戏,然后使用之前训练好的模型对贪吃蛇的移动方向进行判断操作。关键词:图像识别,tensorflow,卷积神经网络
AbstractImagerecognitionisoneofthemostimportantfieldsofartificialintelligencetechnology.Modernfieldsinvolveimagerecognitionfunctions,suchascommunication,medicaltreatment,militarysecurity,machinevisionandsoon.Uptonow,imagerecognitiontechnologyisanimportantbranchofartificialintelligence.Forexample,vuforiasoftwareplatformusesimagerecognitiontechnologytoprovidealotofrelatedtechnologiesandfunctionsaboutARandVR.Facebookhelpsblindpeople"see"photosthroughimagerecognitionfunction.Imagerecognitionisaveryabstracttechnology.Butwhenitisappliedtospecificsituations,itspotentialisirrefutable.Theworkofthispaperisaconvolutionalneuralnetworkbasedontensorflow.Firstly,theimageinformationisinput,thecameraisadjustedtocapturethemovingdirectionofthegesture,andtheclassificationissavedindifferentfolders,whichisusedtotrainanddistinguishthedirectionoftheconvolutionalneuralnetworkimagedata.Next,aconvolutionneuralnetworkisbuiltbasedontensorflow.Throughadjustingandtestingtheparametersoftheconvolutionlayer,poolinglayer,fullconnectionlayer,learningrateintheoptimizer,amoreaccuratetrainedmodelisfinallyobtained.Then,weimplementadesktopgameofSnakegamethroughpyGameLibraryinPython,andusethetrainedmodeltojudgethemovingdirectionofsnake.Keywords:Imagerecognition,tensorflow,convolutionalneuralnetwork
目录TOC\o"1-4"\h\z\u1. 绪论 绪论1.1研究背景与意义1.1.1研究背景到现在为止,大家都很了解清楚,每个人是通过五感(视觉、听觉、味觉、嗅觉、触觉)来对身边的事物进行了解的。当然,现阶段人与人之间正常的交流使用语言,但是人与机器是怎么进行交流的呢?1984年,人类首次使用上了鼠标以输入的方式引进了个人计算机,然后就是鼠标与键盘连接了人与计算机的纽带,是人与计算机的交互方式的一种。虽然后来有触摸板这种,但是也算的上的鼠标的变异种。再者,出现了触摸屏幕,之后,随着个人电子设备的普遍化、移动化,传统的交互形式更加是与时俱进的。人与机器的交互,简单来说是包括输入方式和输出方式。最新出现的交互方式,与其说是“输入输出”,不如说是人与机器的“沟通”。当然所谓的“沟通”分为语言沟通和肢体语言沟通。就是目前来看,简单来说,这些新的交互方式大致可以分为三类:非穿戴式(手势、体感)、穿戴式(眼镜、头盔等)、人工智能(语音识别、图像识别等)。这三类交互,共通的趋势是不断遵照人类身体最自然的交流形态。图1-1,图1-2手势识别应用领域示意图1.1.2研究意义人工智能是人与计算机的交互方式的其中一种,它是想着了解智能的实质,想让机器像人类一样,对事物进行认知、学习、记忆、储存等等相似与人,做出对于人类相似的反应的智能机器。也就是说人工智能是人们给予机器有“思考”的能力,尝试让计算机可以对新的事物进行独立思考并进行做出相应的动作,计算机通过各种交互形式来得到所需的规律,然后完成如人们一样的。或者某些行为所要求进行的相应的交互。现阶段这个领域的研究包括的是机器人、图像的识别、自然语言的处理、语言的识别和专家的系统等等。所以很清楚,图像识别是人工智能的一个重要的分支,人类对图像识别的能力是很强的,对于一张图像人们可以清楚的答出你所想要的要求,做出你期望的答案。所以人们期望机器也能抓住图像的主要特征,然后给出人们所期待的答案。我所了解到的图像识别的发展历程有着三个阶段:数字图像处理、文字识别、物体识别。文字识别很早就出现了,主要是研究的是识别符号、字母和数字。接着是数字图像处理和识别的研究主要对图像的失真。传输方面有着一定的作用。然后说的是物体的识别,当然本论文研究作品也是物体图像识别,它是属于高级的计算机识别的范围,主要是指三维空间里的认识,环境的认识。所以,手势可以说是很自然而且还直观的人与人之间交流的一种模式,而对于视觉的手势识别是可以成为现代人们与机器进行交互所不可缺少的一种比较特殊的技术。然而,对于手势来说,它本身就是具有多种多样,而且时间和地点的不同都会存在差异性,,因此基于视觉的手势识别是一个极富挑战性的多学科交叉研究课题。对于本人来说,这次的论文作品通过自己的手势然后经过计算机的照相机得到所需要的图像特征的时候,提取图像的主要特征了解自己的要求,做出相应的答案。自己通过学习开发这样经过tensorflow构建的卷积神经网络所得到的模型,然后得出自己想要的结果。1.2研究现状与分析1.2.1国外的研究现状现阶段,跟随有着人机交互技术的不断发展,主流的应该说的是语音识别和手势识别技术,而且机器视觉不断的完善,手势识别的研究也取得了很大的进步,关于手势识别技术的描述来说,尤其对基于神经网络的视觉的手势识别已经被广泛的进行研究,韩国的KoreaPolytechnic大学和Inda大学的YoungJooLee、JongShillLee等人用的是熵分析算法对从背景很复杂的视频中进行分割出手势的区域和进行对手势的区域来手势识别。MeenakshiPanwar是一名印度的研究学者,他提出了一个比较合适的手势识别算法,这个算法包括了结构特征在内的计算机视觉算法,进一步检查方向的动作、消除一些不必要的特征,如背景等和出现多少手指进行检测,进行对手势的最终识别过程。接着就是很多国外比较大型的公司都注重着人工智能方向,并且在这个领域当中都有着明显的收获。三星公司是一个拥有超全产业链的企业,它在人工智能领域当中投入的研究基金和研究力度是非常给力的,当然收获也很多,如2012年,三星公司就推出了一项智能产品电视机ES8000,不仅可以手势识别,还可以语音识别,通过一些简单的手势,用户就可以解决调节音量的大小、开关机等等一些基本操作。三星旗下的研究院院长张代君曾经在AIWorld2017世界人工智能大会上提出了:一定要将AI和行业应用、硬件进行深度结合。从谷歌发布的AIFirst战略之后,那么它在人工智能的道路上走得越来越远,机器学习领域在谷歌的大部分产品都涉及到。如云端相片集,它可以用于照片的选择性分类和人脸识别检测;还有的它在语音识别上有着很大的突破,他推出了AI助手GoogleAssistant,他不仅可以回答你的问题,还可以理解上下文的情境,做出相应的答案。这助手被广泛的应用在手机、电脑、家庭音响当中。2019年,谷歌的研究部门推出了一种新的机器学习模型,完成了一个新成果:AI手势识别追踪技术。谷歌团队曾发布:“我们希望向更广泛的研究和开发团队提供这种手感功能,带来更多创造性案例,刺激新的应用程序和研究途径的产生。”在汽车方面手势识别技术也取得了不错的影响,在CES2012上,奥迪公司在导航系统上运用了手势识别技术;在CES2015上,手势识别的热度不减反增,宝马公司通过车顶的3D感应器,在IDrive系统中进行识别手势,然后可以操作一些简单的指令,如接电话、挂电话、放音乐等等。1.2.2国内的研究现状当然,我国在手势识别的研究发展对于国外来说落后许些,但是我国也并不放弃,随着国内的研究学者的不断努力,实力也逐渐增强,紧追慢赶的追上了的。而国内的手势识别研究主要分布在一些大企业,如华为、百度、阿里等公司,还有各大高校和研究院等等。天津大学的研究人员将语音识别系统与机器人相结合,通过语言对机器人进行操控,并且通过操作者的肢体动作的信息对机器人的状态进行模拟,比较准确的实现操作者的动作形态。2001年,哈尔滨大学的高文、吴江琴等研究出了一种训练手语的识别类型方法,它是将ANN和HMM两种方法混合在一起,这种方法对于模型估计参数的减少和分类特征的增加有着明显的作用。它作用在中国手语的识别系统当中的准确率高达90%。2017年,沈阳中科院自动化所研究员华春生在沈阳科技周上首次展示了手势识别智能无人机系统,该系统通过手势识别对无人机的飞行状态进行改变。它实现了在户外强光干扰下还可以正常的人机交互操作,这样使得无人机能够在高空中正常的作业功能。技术与工具平台2.1卷积神经网络的理论介绍2.1.1人工神经网络人工神经网络(ArtificialNeuralNetwork,ANN)的出现,它研究的先锋者麦皮茨和卡洛克在1943年发表一种说法名字是“似脑机器(mindlikemachine)”的感想,这一种类似“机器”可以对关于于生物神经元一些特征的相连接的模型来模仿,也可以说是神经学网络的基本概念。所以以前一说起神经网络,我们可能是第一印象是大脑皮层的神经网络;现在的话,我们可能会想到电脑,或者说是电脑里面的人工神经网络。他们是对人类大脑中大脑皮层的神经元所构造了一个可以表示大脑基本所组成部分的神经元模型,这样对于逻辑操作系统可以表现出的通用性。图2-1神经网络中神经元模型示意图简单来说,人工神经网络ANN类似图1-1所示的那样,ANN有三种组成模块。分别是输入层、网络层、输出层,输入层是自己所需要的大量数据集,经过自己的初步处理,转化成相应的训练数据;接着是网络层,网络层也可以说是隐含层,隐含层的意思是就是对输入层的数据的特征值,形象的提取到到另一个不同维度空间,来表现它的更加抽象化的特征,这些特征才能对数据进行更好的划分。隐含层可以分为两种,一种是单层隐含层和多层隐含层。隐含层里面有着它的学习规则(LearningRule),它决定了网络模型中的权重会根据训练时间的不断推移进而对权重进行不断的调整。为了提高模型的准确性,对其中的数据所有到了激励函数(activationfunction),这样就可以处理很多数据的复杂性。图2-2神经元网络示意图所以现阶段越来越多的研究学者都纷纷加入对ANN的实验研究中,所以促使了人工智能的研究成果越来越多。现阶段对于ANN所涉及到的产品也流通到不同行业当中,如谷歌的搜索引擎、股票价格预算、智能围棋、家庭助手等等各行各业的领域中有着不错的效果。图2-3,图2-4ANN所设计到的研究领域示意图2.1.2卷积神经网络卷积神经网络(ConvolutionalNeuralNetworks,CNN)是一种具备着卷积计算并且具有深度结构的前馈神经网络,它与普遍的人工神经网络的相似程度很高,它们两个都是对有可以学习训练更新的权重(weight)和偏置常量(biases)的神经元所构成。输入在神经元当中的数据,通过里面的网络层的计算,得到的是数据分类的输出值,RNN与CNN都有类似的计算方式。CNN是近年来逐渐兴起的人工神经网络结构之一,因为可以利用卷积神经网络在图片或者语音识别方面可以给出更优的测试结果,当然由于CNN的不断发展,现在还会应用于视频处理分析、药物发现、自然语言处理等等,还有近期比较火的AlphaGo,让计算机看懂围棋,然后战胜围棋的世界冠军,它也是运用了这种技术。CNN由输入层、卷积层、激活函数、池化层、全连接层这些网络层构成的一个完整的CNN。图2-5CNN的每个层位置示意图卷积层(Convolutionallayer),它是卷积神经网路中对于每一层的卷积层是由多个卷积核单元组成,在卷积层当中具有多多少的滤波器组成,而且每个卷积核单元的各种参数都是通过反向传播算法优化得到的。所以说它在神经网络当中有着不可缺少的部分之一,卷积运算主要是提取输入图片数据的不同特征值,一开始第一层卷积层就可以获得一些比较低级的特征如线条、角、边缘等等比较低级的特征,接下来随着层数的增加,更多的卷积层可以从比较低级特征中重复运算,进一步提取更加复杂的特征数据。池化层(Poolinglayer),在卷积层提取出的大量数据特征之后,其特征的维度就会增大,池化层就可以将特征切分成许多个区域,然后就可以取它的平均值或者最大值,也就是maxpooling或者AveragePooling,得到的是比较新的而且维度较小的特征值。激活函数(ActivationFunction),它的作用是为了增加CNN模型的非线性能力。全连接层(Fully-Connectedlayer),根据卷积层、池化层和激活函数的作用下,将一组数据切分成许多局部的特征值,然后通过全连接层集合变成所需要的全局特征,这样就可以计算每个输出值的得分。2.1.2.1卷积卷积(Convolution)的计算公式为下图所示:图2-6卷积计算公式示意图卷积在很多的领域中都有所定义(例如函数卷积的傅里叶变换是函数傅里叶变换的乘积)。当然我想说的是具体在图像处理这一方面的领域当中,卷积操作是指使用一个卷积核矩阵,然后对图片中的所有跟卷积核大小的相同的区域进行相应的卷积计算,。也就是该矩阵跟所对应的像素点进行相乘,然后求和得到一个数值。如图2-7所示:图2-7单卷积核操作示意图当然一张图片不止几个像素点,所以通过步长(stride)决定卷积核在水平和垂直方向上移动的步数,这样就可以得到一个全新的矩阵,得到所想要的目标像素。图2-8图像数据卷积过程示意图随着卷积操作的次数增加的话,有可能得到的卷积结果比原来图片大小会逐步降低,一些大型的卷积神经网络有着很多层数,随着卷积操作的不断进行,图片的都会减少一点点,最后有可能导致自己的图片比卷积核的尺寸还小,所以为了解决这个问题,大家一般都会对卷积层进行边缘填充(padding),也就是在卷积操作之前都是进行边缘补充,然后在进行相对应的卷积。当然对于扩大的部分操作,一般都是填入0值。图2-9进行padding的示意图那么当图片数据经过卷积操作的时候,输出结果的尺寸也是可以计算的,例如对于一个大小为w*w的正方形图像的时候,,这个数值会根据之前的特征个数feature、边缘padding、卷积核尺寸kernel、步长stride四个超参数的影响下。所以卷积结果尺寸为(w+2*padding-kernel)/stride+1,它的输出结果的通道数等于特征值feature。2.1.2.2池化池化(pooling)的用处在卷积神经网络中也是一个非常重要的部分之一,它主要是降低参数的数量,防止过拟合问题。池化的最主要的目的是为了在尽量不改变图片主要的空间信息的前提之下,可以适当的降低图片的大小,提高卷积层对主要特征的提取的准确率,也是同时减少网络的参数数量,防止过拟合。在CNN当中下,如果特征提取的时候输出的大小会影响到后面输出结果,输出尺寸太大会导致特征值增多,计算量就会很大,再将这些数据输入到全连接层会导致过拟合现象。当然之前卷积操作的时候我们可以通过卷积核降低图像尺寸,如步长stride=2的时候。但是这些仍会保留一些不必要的参数,池化层就不需要保留参数。池化层最常见的池化函数有均值或者最大值,也就是maxpooling或者meanPooling,均值池化的计算方式很简单,也就是对图像的领域内的特征点进行求平均值;然后是最大值池化,它是可以将所输入的图像的特征点切分成若干个矩形区域,接着是得到每个子区域的输出最大值,这样这些池化函数可以不断减小数据特征点的空间大小,从而使得参数的个数还有计算量也随即下降,一定程度上控制了CNN的过拟合现象。图2-10最大值池化示意图2.1.2.3激活函数激活函数(ActivationFunction),它是上层神经元的输出值与下层神经元的输出值的一种函数连接关系,每个卷积层里面的一般都是线性关系的,所以激活函数引进给神经网络中的是一些非线性能力,当然他也可以加快CNN中模型的收敛作用,所以它也是CNN训练中必不可少的一部分。接下来我们讨论一下激活函数一般都有着几个代表性的函数。阈值激活函数:它可以说是线性激活函数,算得上是一个比较简单的函数,它主要是说当神经元的激活值要是小于零的话,那么它将会处于抑制状态,也就是不会被激活,参数不会改变;它的激活值大于零的时候,参数将会发生变化。图2-11阈值激活函数示意图Relu函数:它在现阶段是对于人们来说是经常会使用到它,它保留了上面所述的阈值激活函数中神经元的激活值小于零的时候的输出网络值,但是当输入值大于零的时候发生改变,进而它就可以被允许基于梯度下降的学习能力,它的函数还是求导函数都没有复杂的计算公式,输入值为负值的时候,神经元激活值不会被激活,这就是说在同一时间的条件下只有一部分激活值被激活,造成的是网络的稀疏,这样更好的提高网络的计算能力。这样就可以更好的提取出相关的特征值,从而训练数据准确率大大升高。图2-12Relu函数计算公式示意图图2-13Relu函数图像示意图Sigmoid函数:Sigmoid函数又可以叫做逻辑回归函数(Logistic),它可以说是最早提出并且广为流传的一种函数算法,现阶段Sigmoid函数在分类算法当中也是很少大家的欢迎。它是一种S型饱和函数,当函数的输入值无穷大或者无穷小的时候,会导致输出值的梯度会无限趋于一个值,这样会影响到梯度的弥散现象,而且还会导致收敛速度降低。进而使得神经网络的计算能力。图2-14Sigmoid函数计算公式示意图图2-15Sigmoid函数图像示意图由图2-15可以看出,不管输入参数的数值是多少,Sigmoid函数都将输出的参数控制在[0-1]的区间内。Tanh函数:tanh函数其实跟Sigmoid函数是非常相似的,可以说的是tanh函数就是Sigmoid的变形,但是Sigmoid函数并没有等于零,然而tanh函数是以“零为中心”的。所以在实际的运用当中,或许tanh函数可能比Sigmoid函数好一些,但是同样在输入值无穷大或者无穷小的时候,会造成神经元饱和现象。图2-16tanh函数计算公式示意图图2-17tanh函数图像示意图2.1.2.4全连接全连接层(fullyconnectedlayers,FC)它的作用是在卷积神经网络中对参数的特征进行分类,然后通过全连接层对特征参数进行合并分类。之前所说的卷积层、池化层和激活函数等这些操作实现的是将最开始的时候的一堆杂乱的数据数组,然后对数据里面的特征进行挖掘,重点是挖掘其背后的隐藏特征数据的,而现在所说的全连接层则是将得到的数据进行压缩,得到的参数对隐藏特征的空间进行比较,然后得出所需要的参数值。开发环境的搭建3.1tensorflow的简介现阶段,tensorflow是在人工智能之中,使用比较广泛,是一种使用数据来对数值进行计算的开源框架,它可以实现机器学习,还有对于其它需要大量数字进行运算的算法库之一。自从2017-2-16日,Google公司发布了tensorflow1.0版本之后,它是Google研究开发出来的属于第二代人工智能学习系统,属于GitHub上比较欢迎的机器学习框架之一。自从计算机出现到至今为止,随着时代的不断发展,计算机的性能都越来越出色,我们可以利用它的高超的计算速度和巨大的存储空间,所以现如今计算机可以说可以轻松的帮助人们完成一些对于人来说是非常困难的事情,而计算机却轻而易举的完成,比如数据储存、一些位数高的数学计算、又或者休闲娱乐也行。但是这些都是能够实体化出来的想法,也就是说计算机不能通过自己的想法思考问题,并且解决问题,这些都是目前计算机很难做到的事情。近年来,随着计算机领域的不断发展,一门新兴行业的诞生,人工智能领域的出现,让人们看到了希望,这让计算机类似于人们一样,比如语音识别、图像识别等等。所以在说tensorflow的时候,我们不妨可以了解人工智能、机器学习与深度学习,里面用的是多种复杂的非线性结构构成的神经网络或者是一些复杂结构算法对大量的数据进行提取特征的算法。它们之间的关系如图3-1所示:图3-1人工智能、机器学习与深度学习关系示意图Tensorflow的出现很明显的造就了深度学习门槛的降低,只要你会Python或者C++,并且对机器学习有一定的基础,都能更好的利用tensorflow完成神经网络模型,Tensorflow的框架巧妙灵活,可以进行多平台并发式运行计算,例如云系统、云服务器、台式机等等,而且它还可以发挥多核计算,如GPU和CPU并行运算的能力。CPU的设计出来的目的是为了可以处理不同数据类型的数据,并且同时运算大量的逻辑判断,中断处理或者跳转实现也绝不含糊;GPU则是时时刻刻处理大量的图像数据(游戏之类),这让大量数据的数据类型统一并且还相互依赖,在这同时不会被打断CPU的执行,这让玩游戏的人们更加流畅舒适。然而Tensorflow对于神经网络来说并不严格,但是这并不是说它的不好,Tensorflow对于当前的卷积神经网络来说是最适合之一的,并且它在Google上是开源的框架,这说明tensorflow将会进一步被研究学者完善利用。图3-2Tensorflow数据流示意图3.2Anaconda+tensorflow的安装3.2.1安装Anaconda本次实验项目运用的是python语言,很多学习python语言的人们都知道,我们在使用python语言程序的时候需要下载一个解析器,如果没有一个python解析器即便你的程序写的如何,也是也无法运行出来的,所以你可以安装python运行环境,在里面你可以运行你编写好的代码,当然安装运行环境python.exe中也存在代码的编辑器,当然没那么方便,你可以安装一个pycharm,它可以调试、代码跳转、Project管理、语法高亮、自动完成、智能提示、版本控制、单元测试等等,但是前提你要有个python运行环境,也就是安装python.exe。接下来我所讲的是Anaconda,Anaconda是一个开源的发行的Python的版本,它里面包含了众多的依赖项还有更多的运行所需包,例如conda、python、update等等,所以安装好了Anaconda,可以不用安装python运行环境,因为它自带了运行环境,它可以解决python安装的一些不必要的错误。接下来我安装Anaconda的版本是Anaconda3-2019.03-Windows-x86_64,结果如图3-3所示:图3-3安装Anaconda示意图当然安装好了Anaconda的时候同时会有一些工具配置,AnacondaPrompt:这个可以说的是Anaconda自身的一个命令指示符;然后是AnacondaNavigtor,这是一个关于这个的图形化界面,并且可以管理所安装好的工具包;spyder是一个可以用python语言的使用,是一个简单的集成开发环境,并且可以跨平台开发;qtconsole可以说是一个能够实现代码生成的图形直接显示,这个对于pythonshell界面来说,可以完成多行代码运行实现;JupyterNotebook是一个在浏览器实现的用于编译代码的,可以用于分析数据的运行界面。3.2.2基于Anaconda搭建tensorflow这次实验的基于tensorflow环境下所实现的实验项目,所以接下来是安装tensorflow,由于之前是下载了Anaconda这个软件,然后可以在AnacondaPrompt的界面下,输入pipinstalltensorflow,这样就可以安装tensorflow;又或者可以在开始的菜单中选择运行AnacondaNavigator,点击左侧Environment选项,然后在最左侧进行搜索tensorflow,然后就点击你所想要的tensorflow版本。它同样是分为GPU版本和CPU版本,然后查看我的tensorflow版本是1.14,且是CPU版本。图3-4查看tensorflow版本第一次安装tensorflow的时候会遇到许多的问题出错。例如:(1)安装tensorflow的时候网络有时候特别慢,有时会下载失败;(2)Tensorflow的版本与numpy的版本会造成版本冲突;(3)pip版本太低导致下载失败;这些都是我之前下载安装tensorflow所遭受到的问题。3.3实验所需工具包3.3.1安装OpencvOpencv(OpenSourceComputerVisionLibrary)是一个开源的、跨平台的一种计算机视觉库,它可以在众多的操作系统中运行,如WINDOWS、LINUX、MACOS和ANDROID等等的操作系统,Opencv是在1999年出现的,由Inter公司研究开发出来的,它的基础语言是C语言和C++语言编写的,这个工具包都被实现优化了,所以它的运算能力和效率都会得到很大的提升,而且它还是开源的以及作用到实时运作。它对于计算机视觉能更好的提供非常好的函数的接口,这样造成了越来越多关于计算机视觉的产品的出现,这个工具包有着安全防护、视频锁定、各行业的图像处理功能、空间成像以及人工智能方向等等许许多多领域都有关于它的函数接口。这些年过来,随着计算机行业的快速发展,传统的计算机功能已经不适合当前社会的发展,计算机视觉可以说是一个比较新兴的技术,正是因为它与机器学习关系密切,所以才会让Opencv工具包可以运用一些简单的机器学习算法功能函数。这些年来,Opencv在各行各业所涉及到的都有着它身影,检测入侵、人脸识别、视频追踪等等能力。所以到现在为止,这世界上许多大型公司以及各大高校的科学研究人员都对Opencv的资源开发工具包尽量对它进行优化,更重要的是无论你是怎么使用它,商业开发或者科技发展研究,他都可以成为你比较理想的工具包,并且对于大众来说,它还是完全免费的。接下来说的是关于Opencv对这次实验项目的作用,大家都知道,一张图片都是由很多的数字矩阵构成的,总所周知颜色的基础色彩是红绿蓝三种颜色,然后通过调配才会有更多的不同颜色,所以一张彩色图片在计算机上面所呈现的是三个颜色通道(RGB),每一个染色通道可以说是一个矩阵形式,然后三个矩阵形式结合成一张彩色图片。当然还有个灰度图,也就是人们常说的黑白照片,这个就只有一个颜色通道。因为我需要的是数据是图片数据,利用Opencv对摄像头的视频进行操作,然后进行图像的显示和保存;当然也可以对图片进绘图计算,得到所需要的图片然后进行一些图片的算术运算。那么怎么才能下载Opencv,我们可以更下载安装tensorflow一样,如:pipinstallopencv;或者在AnacondaNavigtor图形化界面上下载安装。我实验项目所用到的Opencv是4.1.0,如图3-5所示:图3-5Opencv的版本号示意图3.3.2安装NumpyNumpy(NumericPython)属于python的一个函数库,它里面存在着很多维度的对象数组和怎么处理对象数组的函数表达式而组合成的一个python包。它是一个python工具包中的功能很强大的包库,它给大众提供了十分便利的数学运算和数据的操作。从Numpy出现到至今为止,它在计算机数值计算上面有着重要的作用,被广泛的运用在程序代码当中,例如机器学习训练模型中、数学的各种计算任务还有就是在图像数据的处理以及计算机图形学当中都有着它的身影。所以在挖掘人工智能当中的学习算法的时候,Numpy能够更好的提供计算函数,因为在这之中矩阵与矩阵之间会有着各种各样的计算公式,只要调用Numpy这个python库就可以很好的并快速的计算,机器学习在训练数据模型的时候存在的大量的数据存储在数组当中,Numpy数组可以更好的管理训练数据集,它对数组中的运算也起着重要的作用;而且它在数学的计算上也提供了许多计算公式的函数,如一些位运算、排序、线性代数、矩阵库、算术函数等等,所以这就可以减少很多代码,并且让你节省时间计算。接下来是安装Numpy的python库,但是Numpy的版本要跟Tensorflow的版本不能冲突,因为之前原因,导致我安装几次Tensorflow不成功。具体它们之间版本兼容的是多少,大家可以上网查找。图3-6Numpy的版本示意图基于tensorflow框架的卷积神经网络的搭建4.1数据集简介数据集的作用是让图像识别中从收集好的图像数据,提取当中你所需要的图像数据的特征,加以训练挖掘,然后得到你所需要的训练模型。其实也可以说训练数据集是神经网络当中训练模型的基础内容,当然,你搜集到的数据集越丰富越多,那么使得你所训练的模型的准确率就越高,所以想要提高手势识别的识别准确能力,肯定是在数据集方面上要下足功夫。4.1.1收集数据集由于是我自己进行的手势识别功能的,当然是对自己的手势进行收集,我是利用摄像头的捕捉功能,将摄像头拍到的视频一帧一帧的将照片储存在image文件夹里面,使用的是cv2库里面的功能,得到的数据集。图4-1数据集类别分布图4.1.2数据预处理通过摄像头所得到的图片数据存放在image文件夹里面,然后通过os模块对image文件夹的图片数据进行读取,将image中的每个文件夹所包含的子文件夹,提取子文件夹中的图像数据,并将图像统一大小为64*64*3,然后将数据存放在数组当中:图4-2读取文件夹数据示意图得到了训练数据集之后,接着是对数据集进行预处理阶段,我们首先是将数据集从文件夹当中提取出来,储存在数组当中。建立好相应的图像数据集。图4-3数据集的提取示意图因为在机器学习当中每个特征不是一个连续的值,当然也有例外,最大多数的分类值,所以我们可以采用独热编码这样解决方法,更好的解决分类器当中一些属性数据的问题,同时也更好的提高特征的作用。图4-4独热编码示意图由于不同数据集当中的特征数据变化范围非常大,这说明我们也可以进行归一化数据集,这样可以将每个特征控制在很小的范围之内。因为之前读入数据的是全部训练数据,所以将全部的训练数据集划分为训练数据集和测试数据集,并且打乱全部数据集。80%为训练数据集,20%为测试数据集。图4-5划分数据集示意图如图4-6所示,通过读取文件夹数据后经过预处理阶段,展示部分数据的图像显示:图4-6预处理之后所得部分数据集示意图4.2卷积神经网络处理好数据集之后就可以得到你所想要的训练数据集与测试数据集,接下来就是搭建卷积神经网络进行训练的了。这次实验我的神经网络结构很明显是通过我所搭建的二层卷积层,并且max_pooling是接着卷积层的,然后是两层全连接层放在后面,当然在卷积核当中我加入的relu激活函数,这样可以增加网络参数的非线性的作用,这样或多或少可以减少过拟合的几率。首先是先定义好一些神经网络的一些参数,如图4-7所示:图4-7网络参数示意图通过定义好学习率的大小,隐含层通道数、滤波器大小等等这些参数,然后是输出特征值为5,初始化x_和y_变量。接着就是初始化Weight值和bias值,如图4-8所示:图4-8Weight和Bias示意图然后是定义好卷积层与池化层,卷积层的步长为[1,1,1,1],因为padding为SAME,这样就对图片像素点进行边缘的补充操作,所以卷积操作之后不会导致图像尺寸的大幅度缩小;ksize是指池化层的窗口大小,我所用到的是最大池化层操作,也就是在滑动窗口内选出一个最大值作为像素值,而我这个窗口为[1,2,2,1],池化层的步长为[1,2,2,1],如图4-9所示:图4-9卷积层与池化层的定义示意图我所定义好的卷积层为通过有Weight值和Bias值所组成线性关系的,然后是得到的一个数值在进行relu激活函数进行一些非线性影响。同时卷积层与池化层的padding值都为“SAME”,这样就不会降低图片的尺寸。现在就是卷积操作阶段,构建卷积神经网络+全连接层操作,如图4-10所示:图4-10卷积操作示意图神经网络是建立2层卷积层和全连接层,通过调用Weight权重值与Bias偏置常量值,通过字典的搜索方式得到你所定义好的Weight值和Bias值,然后调用卷积层方法和池化层方法,进而对图像数据的特征值进行卷积操作,取出所需要的特征值。模型训练与结果显示卷积神经网络大概搭建好了之后,为了可以不断更新卷积神经网络当中所重要的参数,并且提高训练模型的准确率,我们需要一个优化器来帮我们解决问题。当然为了能够看清模型的好坏,我们还需要一个损失函数loss值。优化器(optimizer):这次实验所用到的优化器是AdamOptimizer算法,这个算法是可以寻找一个全局最优的优化算法,在这个时候还需讲一个参数,这是优化器中一个重要的参数:学习率(Learningrate),它的大小会改变优化器中目标函数是否准确,当然还会影响到训练数据的时候时间的长短,所以在初次训练模型的时候可以尽量设置变高些。损失函数(loss):loss在Tensorflow在训练模型当中需要提及的一个参数,我们可以根据loss的数值进而分析网络的好坏。首先是调用卷积操作的方法conv_net(),得到网络预测值,然后是定义loss函数,利用Tensorflow中reduce_mean()方法,它是计算张量tensor的平均值,而softmax_cross_entropy_with_logits_v2()方法是计算softmax(logits)和labels之间的交叉熵,然后就是优化器的选择,优化器有着GradientDescentOptimizer()、AdadeltaOptimizer()、AdagradOptimizer()、MomentumOptimizer()、AdamOptimizer()等等几种优化方法,它可以加速神经网络的训练时长,我的实验所用到的是AdamOptimizer(),它利用了反向传播算法不断的修正权重和偏置项,也在运行中不断更新学习率,实验所用的learning_rate为0.01。如图5-1所示:图5-1定义loss函数与优化器示意图然后就是进行初始化CNN中的参数变量sess.run(init),如图5-2所示:图5-2初始化CNN变量示意图通过迭代循环,然后不断的更新Weight权重和bias偏置值,训练网络特征图,得到所需要的特征值,如图5-3所示:图5-3迭代CNN的示意图训练好模型之后,要对模型进行储存,如图5-4所示:图5-4保存模型示意图这次实验经过卷积神经网络的训练结果,随着训练时间的不断改变,准确率也不断改变。图5-5训练数据模型部分准确率示意图一段时间的训练之后,我得到的模型准确率稳定在70%中,如图5-6所示:图5-6准确率示意图图5-6中很明显的可以看出,随着时间的不断过去,实验所用到的模型准确率不断的增加,而且一开始训练模型的时候变化比较大,接着就是趋于平缓的状态,最后在70%~80%之间,训练的准确率与测试的准确率基本相同。手势识别经过基于Tensorflow的卷积神经网络训练的模型之后,得到了所需要的测试模型,然后进行保存,如图6-1所示:图6-1保存的训练模型示意图然后进行对模型进行提取,可以提取模型中的Weight值和Bian值,我们需要加载.meta文件构建图,我们在保存图片的时候就已经将图结构也同样保存下载了,所以不需要重新进行搭建了,只要导入进去就行了。图6-2提取模型示意图接着是我们通过摄像头的功能,得到了手势图像的时候,进行对图像的一些处理完成之后,然后进行模型的测试,得到的结果如图6-3所示:图6-3模型测试结果示意图最后是模型的实时检测,我们通过一个贪吃蛇游戏,用手势识别对贪吃蛇移动的方向进行控制。我使用了python当中Pygame库,构建了一个简单的贪吃蛇游戏,Pygame库是一个跨平台的Python库,它是一个免费的并且开源的python编程库,专门为电子游戏而设计的,其中还包含声音、输入输出函数、图像、图形化界面等等。它简化了游戏设计本身的逻辑代码和高强度编程。首先定义好游戏角色的样子,如图6-4所示:图6-4贪吃蛇游戏图片示意图设置好游戏的一些障碍,如图6-5所示:图6-5障碍示意图利用pygame库中的函数用来检测按键等的事件,得到贪吃蛇上下左右或者停止是命令,或者通过CNN所训练出来的模型,然后通过摄像头的捕捉,得到的图
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2024年度设备维修与技术支持协议
- 尿毒症康复护理
- 2024年度图书馆建设劳务分包合同
- 2024年度货运代理合同:某物流公司与某出口企业签订货运代理协议
- 2024版防水工程材料采购合同
- 2024年度房地产项目工程监理与施工管理合同
- 2024年度租赁期满资产处置合同
- 二零二四年度环保工程与设备合同
- 初中语文组长培训
- 2024年度设备租赁合同协议模板3篇
- 配送部管理制度
- 10-源代码编译指南
- 脑卒中溶栓相关知识考核试卷(试题与答案)
- 《招标投标法》学习培训
- DB32-T 3129-2016适合机械化作业的单体钢架塑料大棚 技术规范-(高清现行)
- 隧洞安全安全监测方案
- 健康教育学【完整版】
- 人教部编版《司马光》教学课件(23张)
- 《社会医学》课件11健康危险因素评价
- DB34T 3826-2021 保温板外墙外保温工程技术标准 (1)
- 信息化系统项目监理细则
评论
0/150
提交评论