基于图像识别的物料分拣系统设计—图像识别与处理系统设计(机械电子工程专业)

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

基于图像识别的物料分拣系统设计—图像识别与处理系统设计
摘要
随着科技的不断发展,工厂逐渐步入智能化和自动化,物料分拣在生产方面是一个不可或缺的流程,平常的人工分拣物料的方法过于繁琐又浪费人力和时间。

因此我们设计了一款用图像识别进行物料分拣的机械系统来代替人工。

本文主要阐述了图像识别与处理系统设计以及对电路的设计。

利用Matlab进行图像的处理与识别,图像处理要先对物料图像的进行收集,再用Matlab对图像进行灰度化与图像分割;图像识别程序利用了Matlab提供的算法来设计,将处理好的图像进行CNN神经网络的训练,存储好物料的特征模板,最后用摄像头拍摄物料与所存的特征模板进行对比识别并分类好,把输出物料类别的数据传送给Arduino。

本设计主要运用于工厂的生产方面,而目前部分工厂仍沿用人工分拣的方法,市场上的PLC控制的分拣系统也普遍,基于此点,尝试使用图像识别技术,从识别的结果中更直观地展现出是什么物料,因此本文设计了基于图像识别的物料分拣系统。

关键词:图像识别;图像处理;Matlab;CNN神经网络;Arduino;
Design of material sorting system based on image recognition —— design of image recognition and processing system
Abstract
With the continuous development of science and technology, the factory gradually stepped into intelligence and automation. Material sorting is an indispensable process in production. The usual manual method of sorting materials is too cumbersome and wastes manpower and time. Therefore, we design a mechanical system for material sorting with image recognition instead of manual operation. This article mainly describes the design of image recognition and processing system and
the design of the circuit. Using Matlab to process and recognize the image, the image processing should first collect the material image, then use Matlab to gray the image and segment the image; the image recognition program uses the algorithm provided
by Matlab to design, training the processed image with CNN neural network and the characteristic templates of the materials are stored well. Finally, the materials captured by the camera are compared with the stored characteristic templates for recognition and classification,and the data of the output material class is transmitted
to Arduino.This design is mainly used in the production of factories, but at present
some factories still use manual sorting method, and PLC controlled sorting system is common in the market, from the result of recognition, it can show what material is
more directly, so this paper designs a material sorting system based on image recognition.
Keywords:Image recognition; Image processing; Matlab; CNN neural
network;Arduino
目录
1 绪论 (3)
1.1本设计的国内外发展历程与现状 (3)
1.2本设计的研究意义与目的 (4)
1.3本设计应解决的主要问题 (5)
1.4本章小结 (5)
2 MATLAB与CNN的特点和应用 (5)
2.1 MATLAB软件 (5)
2.1.1MATLAB的简介 (5)
2.1.2MATLAB的特点与应用 (6)
2.2 CNN神经网络 (7)
2.2.1 CNN的简介 (7)
2.2.2 CNN的原理及结构 (7)
2.2.3 CNN的特点与应用 (8)
2.3本章小结 (9)
3图像识别与处理系统的设计 (9)
3.1 图像识别的流程 (9)
3.2 物料图像的采集 (10)
3.3 物料图像预处理 (12)
3.3.1图像灰度化 (12)
3.3.2图像分割 (13)
3.4 训练物料图像 (14)
3.5 图像识别程序 (17)
3.6 物料图像识别程序效果测试 (19)
3.7本章小结 (21)
4 物料分拣系统的电路设计 (21)
4.1 物料分拣系统的流程图 (21)
4.2 物料分拣系统的主要元器件 (22)
4.2.1 物料分拣系统的核心控制电路 (22)
4.2.2 摄像头 (25)
4.2.3 舵机模块电路 (26)
4.2.4 气泵模块电路 (28)
4.2.5 电磁阀模块电路 (28)
4.3 总电路设计 (29)
4.4本章小结 (30)
5 总结与展望 (30)
5.1 总结 (30)
5.1.1 设计总结 (30)
5.1.2 设计难点 (30)
5.1.3 设计创新点 (31)
5.1.4 设计不足点 (31)
5.2 展望 (32)
参考文献 (32)
谢辞 ............................................................................................................................... 错误!未定义书签。

1 绪论
1.1本设计的国内外发展历程与现状
本设计主要涉及物料自动分拣和图像识别两方面。

先从物料自动分拣开始阐述,物料的自动分拣这一想法最先由美国、德国等
国家提出来的,这种自动分拣系统是第二次世界大战后在美国、日本和欧洲的物
流中心被广泛采用。

日本的连锁商业和宅急便都普遍使用自动分拣机。

而我国在这方面起步较晚,相对于发达国家还比较落后,人工作业的情况仍
然普遍存在,但随着电商、快递等行业的快速发展和中国智能制造2025的不断
推进,其分拣系统的设备需求也逐渐变大。

因此部分企业也不想错失良机,开发
了许多分拣系统,例如太原刚玉仓储设备公司和贵阳普天通信机械厂设计的生产
货架电子标签拣选系统、小车式数字显示拣选系统、邮件自动分拣系统等;珠海
普天慧科信息技术有限公司研发出PTL电子标签拣选系统。

除此,近年来国内知
名的AGV厂家米克力美研制了一款兼具柔性、效率和成本优势的AGV分拣系统,
AGV分拣系统可以说是自动分拣系统的升级版,当其中一台AGV发生故障问题时,
并不会影响整个系统。

图像识别的发展主要有以下三个阶段:文字识别、数字图像处理与识别、物
体识别。

而本设计主要是对图像处理与识别,并对物体进行分类,可以说是第二
阶段和第三阶段的结合体。

由20世纪中期开始研究至今,逐渐由简单的字体,
到二维图片,再到三维的物体,最后到现今发展的如火如荼的人脸识别慢慢演变
而来。

我们可以看到目前这项技术的应用范围非常广,在国外的发展情况,谷歌
自主研发了图像搜索的功能,而各大企业则一直对外收购相关的公司以及许多
OCR识别软件的出现等等。

我国著名的中文搜索引擎百度,百度识图可以帮我们找到相似的图片;在高
速公路收费站或者是某些大型停车场里,都会设置一些栏杆,并且有摄像头进行
拍摄,这些摄像头会拍摄每一辆汽车的车牌号码,进行登记识别,并进行一系列收费,系统中会自动存储该车牌号码的,另外在红绿灯的时候,上面的高清摄像头会对违规的车辆进行拍摄登记,这都大大节省了值班人员人工操作的问题;日常生活中我们网购都会使用到淘宝软件,如果在生活中看到有什么衣服或电器等物品想要买的,也许你不清楚它叫什么名字,但是你可以用里面的拍摄AI功能,自动识别该物品的信息,并且弹出物品的链接给你;手机上的翻译软件如网易有道词典,它里面可以拍一篇其他语言的文章的图片,再翻译成你所需要的语言;针对最近发生的新型冠状病毒疫情问题,公共场所里如机场、地铁等皆应用了百度AI的技术,采取多人体温快速检测的办法,降低了传统体温检测的人工成本,提高了测量效率,还保障了测试人员的安全。

这一切都是源自于图像识别技术的功劳,给我们这个时代带来了许多便利,节省不少人力物力和时间,让我们把更多的精力放在其他不能用机器替代的工作之中去。

1.2本设计的研究意义与目的
随着时代的不断进步与发展,工业机器人的技术也得以提升,大多数的企业工厂都将走向无人化、智能化和自动化,应用起各种不同功能的机器,从而提高自身的生产效率。

物料自动分拣是不需要人力的干扰把许多零件或货品按照其不同的材料组成、形状大小等条件进行分拣,从而摆放到特定的区域,而最初的分拣系统都是完全基于人工来工作,工厂对人力的需求是极大的,他们一般使用人工分拣的方法,这样一来不仅生产效率低,而且往长远的方向想,大量的人力致使生产的成本也变得更高,显然无法满足生产商对速度快和高准确性的需求。

在那个时候市场上即使有机器代替人工的话也不会大范围普及,因其机器价格昂贵,再者是技术还未完全成熟稳定,生产商也不会冒着这风险。

而现今物料的自动分拣逐渐成为各大企业的不二方法,利用人们事先编制好的指令来控制机器工作替代人力,解决了分拣的繁琐工作,然后让从事人工分拣的员工去其他部门进行机器不能完成的工作,这样就可以让缺人的部门进行人才的填充。

当我们使用了带有程序性的机械臂进行分拣,它的智能化技术会比人工分拣要精准且迅速得多,甚至在测量器件的长度等等,你无一不会惊叹它的准确性。

人们如果在一些快递公司里进行分拣的工作,有些物料的成分具有刺激性气味,也有因生产方面致使表面材质有凹凸和锋利而伤人手,很难想象一个人长期在这种环境无保护地进行工作会是多么痛苦,甚至在这里的货品很多不清楚是什么东西,具有一定的安全隐患。

也许你会说人工分拣会更加灵活多变化,而对此,我们希望结合图像识别技术与自动分拣系统,在物料分拣系统基础上加入图像识别的功能,让物料分拣的过程更具智能自动化,只需几个人去值班观看显示出来
的图像识别结果,能够第一时间地做出相对应的补救措施。

本设计利用USB接口工业摄像头拍摄物料提供的图像信息进行识别分类,数据反馈到Arduino从而控制机械臂对物料的自动分拣,其目的意义在于提高企业的生产效率,降低生产成本和分拣的错误率,保障员工的安全健康。

1.3本设计应解决的主要问题
图像识别与处理系统的设计主要有以下难点,解决了基本上能够正常运行:
a、摄像头拍摄的图片质量。

我们打算是把摄像头悬空,往下拍物料,该情况下可能出现摄像头不够稳定、晃动而影响图片质量,再者可能摄像头遮挡光源,光线不足导致图片暗淡。

对此我们需要找稳定的支架把它固定好,看情况可以多放一个光源在侧边,尽量消除这种环境因素。

b、Arduino可能由于性能问题难以处理图像问题。

本来是想通过Arduino 实现图像识别和驱动机械臂,对此可以看实现的效率如何,不行的话用上位机PC机来操作。

c、程序设计和物料选择。

该部分是主要核心,由于本人能力有限,程序算法的东西没有基础,要用到什么函数来对物料进行分类,还有涉及物料的定位,选择什么样的物料才能让机械臂的吸盘成功吸取,对此需要多下工夫,查询资料进行不断实验仿真。

d、总电路的设计。

一切的程序化东西已经准备好了,就剩下控制部分的电路,这涉及到诸多元器件,让系统自动化地控制它们,稍有一部分的电路设计错了就会影响到最终的效果,令程序设计的东西形同虚设,因此需要对电路要熟悉,可以参考往届毕设中的电路是如何设计的,或者自行查阅资料深入了解每种元器件的用途。

1.4本章小结
本章主要介绍了本设计的涉及到的图像识别和物料自动分拣两方面的发展历程,阐述了本次设计研究的主要内容和目标,有了这些背景资料和事先提出的设计问题,给后面设计的时候做好了充分的准备,减少了不必要的麻烦。

2 MATLAB与CNN的特点和应用
2.1 MATLAB软件
2.1.1MATLAB的简介
MATLAB全称是matrix laboratory,意思是矩阵实验室,它是美国MathWorks
公司出品的商业数学软件,主要用于开发算法、数据的可视化、做数据的分析以及用作数值计算的高科技计算环境。

它可以进行矩阵运算、对数据和函数进行绘制、算法的设计、对图像的处理、用户界面的guide设计、与其他编程语言的程序连接等等,也支持与Arduino的交互连接,基本满足本设计的需求。

本设计主要使用的是MATLAB R2019a版本,相比于旧版本,某些函数的使用会有所不同,即旧版的函数需要两行代码实现,而新版本的便只需一行,在这里要值得注意。

2.1.2MATLAB的特点与应用
在MATLAB里面可以利用它自身的编辑器进行程序的编写并进行实验仿真,其编程的高效率且简单,能够及时发现问题错误,并不需要利用其它编程语言编写程序再导入进去,可以对复杂的数学函数进行调用。

甚至还可以利用guide函数设计一个用户操作界面,让用户方便操作,软件的界面看起来比较舒服,这类的设计实例就有一个是做计算机的,可以设置17个按钮和一个显示屏的简单版计算机,而每一个按钮都可以设置回调函数,使得每个按钮能够有所反应。

如果有不懂的话,可以在命令窗口输入help指令,如图2.1所示,可以查阅各类函数的使用方法和例子,这对初学者来说还是容易上手的。

MATLAB里的图像工具箱还是挺丰富的,本设计主要涉及了MATLAB里的几个功能:
(1)图像处理功能。

在这个功能里,我们用的工业摄像头拍的照基本都是彩色图,在图像识别之前仍需要对图片进行灰度化的处理,再者进行图像的分割,把多余的部分进行裁剪,识别的图片里尽量只剩下所识别物体的大小。

MATLAB 在这方面提供了相对应的函数和检测算子,我们可以随便使用。

(2)图像特征提取与识别功能。

Matlab里自带的神经网络工具箱可以使我们在构建网络时更方面,我们的物料有着不同特征,分别有矩形、圆形和三角形,采用卷积神经网络CNN的模型进行训练物料图片,提取其相关特征并进行分类。

图2.1 MATLAB软件的帮助
2.2 CNN神经网络
2.2.1 CNN的简介
CNN,全称是Convolutional Neural Networks,意为卷积神经网络,它是深度学习其中的一种算法,是一种带有卷积结构的前馈神经网络,而深度学习又是机器学习的子方向,而这些都是与人工智能AI有着莫大的关系。

卷积神经网络会对每层结构输入信息并且做出数据的分类,而且它拥有表征学习的能力,能够自动提取数据的特征,免去了人们手动提取的不必要操作。

神经网络在近几年来发展得比较快,Alex Krizhevsky在2012年的ImageNet 挑战赛中就是运用了CNN神经网络,设计出了AlexNet网络模型,把分类的误差大大减少到15%左右,当时可谓是让人惊叹的呢,也是从那起神经网络才开始被重视,而CNN卷积神经网络被广泛应用在图像识别和自然语言处理等方面,可以说目前是在图像分类这一块领域里众所周知。

2.2.2 CNN的原理及结构
CNN神经网络中的原理基本上是将输入的图像处理生成一堆数字,而不是一堆色彩缤纷的图片,而且这些数字信息是图像上每一块小区域,而并非每个像素点,这样对收集的信息进行整理,不断提取其信息的特征,然后这种网络结构基本搭建完成,在对识别新图像时,我们可以再次调用同类的神经网络进行重复的步骤,若新图像的某些特征与已有的特征相匹配,然后将这些信息放在全连接层中进行分类,便可以知道该图像属于哪一类了。

卷积神经网络的结构里一般包括输入层、隐含层和输出层,其中隐含层里又主要由卷积层、池化层和全连接层组成,当然还能添加其他的层来辅助,如图2.2所示能够很好地理解其基本的网络架构。

输入层,顾名思义就是将数据输入进去,在该层可以处理多维数据,一般地输入之前需要对数据进行归一化的处理,比如输入的数据是图像的像素,经过处理之后物体出现的地方即为“1”,没有则为“0”,相比于像素的值是0到256之间,这样的处理减少了许多计算,有利于提高卷积神经网络的深度学习。

卷积层相当于是把图像拆分成很多小块进行更深入的分析研究,从而更容易获得相似的特征,本设计采取了一层5*5大小的卷积层,而在卷积层后其实还需要一个激活函数层relulayer()来进行激活计算,增强该模型的非线性表达能力。

池化层是将卷积层输出的特征图像进行选择过滤,改变其大小,简化计算的复杂程度,尽量地减少整个神经网络的参数。

全连接层的功能是将提取出来的主要特征来进行分类,这些特征经过了前面的卷积层和池化层的处理之后,变得更具有代表性,从而对可以更快地识别出其他图像是否与之匹配。

在之后可以使用softmax layer()函数使最后节点的输出的概率限定于0到1之间,取所有分类结果概率的最大值。

输出层则可以根据所研究问题的不同而输出相对应的识别分类结果,或者是物体的中心坐标信息等。

成功搭建好网络之后,还有一个需要值得注意的问题是模型的过拟合现象。

常常会因为数据不是很多而导致这类问题,因此可以添加更多的数据,对数据进行增强或者增加网络dropout层来防止过拟合。

图2.2 神经网络结构搭建图
2.2.3 CNN的特点与应用
在图像分类领域中,除了可以用卷积神经网络来做以外,还有深度神经网络(DNN)和循环神经网络(RNN)等。

而CNN的适用能力较强且广泛,CNN在这方面的优点有以下几点:
1.处理多维数据或高维图像时亦是比较轻松的,因为它是共享同一个卷积核的结构,减少了大量没有用的参数,提高训练的速度,图像经过了卷积的处理后依旧保留数据在原来的位置。

2.而在提取图像特征的时候,不会因为图像的复杂程度和具体特征是什么而难以提取,去除了人工提取特征的步骤,可以将图像分块地局部处理自动提取主要的特征,从而简化了分类和计算的难度。

3.经历了多阶层的处理图像,使得特征分类的效果更好。

相反的,卷积神经网络也有些许弊端,它需要的样本数据很多且要调参,在训练过程中如果用CPU运行的话就会比较慢,较吃电脑的性能,建议使用GPU 来运行程序,提升训练和深入学习的速度,这样节省很多的时间。

CNN除了做图像分类也可以应用于语音识别、字符识别、神经风格迁移、遥感科学等等,但如果想用DNN来处理是无法实现的,它不能对时间序列上的变化进行建模。

合成语音方面,谷歌的WaveNet模型则很好地利用了CNN对语音进行处理,从而让机器合成出新的语音;目标检测方面,汽车的自动驾驶也可以利用它来进行目的地的定位,也能追踪嫌疑人的信息定位,协助安防;甚至在医学方面,CNN 也有不错的发展,可以对身体中关键的骨骼进行识别,更容易发现病症所在。

2.3本章小结
本章主要介绍了MATLAB软件的背景和功能,还介绍了CNN卷积神经网络的架构和应用特点,本设计的图像识别离不开这两样核心内容,为后面的程序设计做好坚实的准备。

3图像识别与处理系统的设计
3.1 图像识别的流程
对于物料的图像识别,与人脸识别相比来说是简单一点,毕竟不用对其进行旋转图像这种操作,本设计的图像识别主要是基于CNN卷积神经网络来对物料进行识别分类,当识别完之后就会将结果输出给Arduino进行机械臂分拣动作的操作。

如图3.1是本设计的物料图像识别的流程与步骤。

图3.1 物料图像识别的流程与步骤
3.2 物料图像的采集
在采集图像这一部分,我们选用了一款USB接口工业摄像头进行拍摄,图像识别的结果与图片的质量有一定的关系,因此可以利用这款USB高清工业摄像头的设置对图片进行一系列改善,并且拍下物料在有光与无光时的状态下的照片作为训练图库。

而对USB高清工业摄像头的调试方面则由我的组员负责。

在一开始考虑要分拣什么物料我们组每个人还是有不同的见解,又想与本专业有相关联系的零部件,比如齿轮、弹簧以及六角螺母等等,可是反思了之后发现这类型的东西与我们的机械结构上的设计融合不到一起,因为考虑到这类型的物料结构中间会空心,机械臂上的吸盘便有可能吸不起来,因此我们最终有了同一个想法,要分拣的物料有三种,分别是瓶盖、充电器和三角板,这些东西都是日常生活常见的。

本次图库素材如图3.2,图3.3和图3.4所示。

图3.2 瓶盖图库
图3.3 充电器图库
图3.4 三角板图库
3.3 物料图像预处理
3.3.1图像灰度化
灰度化处理是指把含有亮度的和有色彩的图片转换为只有灰色的单通道图片的过程。

在图像识别之前,需要把图片进行一系列的处理,因为我们本来的图像都是彩色图的,图片的颜色过于丰富,在识别的时候有可能识别不出来,因此需要把它转换成灰度图像才能检测得到。

所以可以使用rgb2gray()这个函数将彩色图像(RGB图片)转换成灰度图像并且保存,这里先设定两个变量image 和image1,括号里输入image1是原图,则image输出成灰度图了。

原图与灰度图对比的效果如图3.5所示,相关的程序可以看3.5节。

图3.5 原图灰度图对比图
3.3.2图像分割
在图像之中,我们发现所识别的物料仅仅占图像的一小部分,多余的部分只会让系统处理更加缓慢,因此需要对图像做出一些裁剪,关于改变图像的大小或角度,MATLAB中有几种函数命令可以提供使用,如表3.1所示为部分图像分割函数。

表3.1 MATLAB部分图像分割函数及其功能
考虑到物料放到传送带上的位置和摄像头所拍摄的物料基本在图片的中心,而因此本设计采取imresize(A,[a,b])的函数对刚处理完的灰度图进行缩放裁剪,没必要使用imcrop函数,这里的a和b是输入数字,分别表示图片的高和宽,这里采用640*480的像素大小。

处理后的效果如图3.6所示。

然后这些图像都存放在“image”这个文件夹里面,并且已经按照w1,y1,z1的文件夹名分类好不同的物料,分别是充电器、三角板和瓶盖的分类文件夹。

图3.6 图像缩放效果图3.4 训练物料图像
训练卷积神经网络的程序如下:
要进行物料图像的识别前,就得先训练过之前处理过的图像库来把各种物料的特征,即要把物料分类好,再并不断地深入学习训练,训练好后保存模型再调用。

本设计用的是卷积神经网络CNN来对图像分类,在本训练程序的开头clear 和clc是MATLAB里经常使用到的函数,因为有时候在命令窗口中我们会出现很多的数据,此时就可以用clc的命令对窗口进行清除,让命令窗口显得更加简洁清楚。

而有些工作区的变量数据,我们是不希望让它们用在下一个程序当中去的,所以可以利用clear命令进行数据的清除。

随后的ds=imageDatastore()语句的含义是调用之前已经处理过的图像库,即“image”文件夹,训练图像的数据来源基本与这个图像库有关。

然后是把数据集拆分成三种类型,这是为了更好地建立模型,按照0.7:0.15:0.15的比例拆分成训练集、验证集和测试集,要注意训练集的分配不能低于其他两种,如表3.2为这三种数据集的具体功能。

表3.2 三种数据集的功能
在建立自己的网络中,使用了batchNormalizationLayer()来对数据的归一化,避免发生梯度消失,大大减少了训练的时间。

本设计的卷积神经网络里面一共有七层,分别是由输入层,卷积层,激活函数层,池化层,全连接层,去最大值层和分类层组成。

本设计选择了一层5*5大小的卷积层,由于样本过少,若是再加多一层卷积层的话会出现过拟合的现象,可能会影响分类的结果。

而在设定参数时,使用了Adam优化器的算法,能够替代随机梯度下降,适应不同的参数,快速计算数据,所占的内存也较少,重要的是能够处理大规模数据和参数的优化问题,训练过程的学习速率基本不会改变,这样基本满足此次训练图像库的要求。

而训练网络时,在GPU中处理比CPU中处理快得多,由于不太清楚GPU是怎么样的,或者干脆说是没有这个东西,因此最终设定了常规的测试环境是利用CPU来运行,但还是训练了很久的时间,差不多有一个多小时,可能是本人电脑的CPU性能不太行。

设定参数中的“ValidationData”是训练的时候用于验证的数据。

“Plots”可以显示训练过程的曲线,能够更加直观地看到训练过程的学习率,训练完网络后加了保存模型的语句,文件名为aa2.mat,用作后面的识别程序的调用。

运行效果如图3.7,我们可以从图中看到训练时的曲线,图像识别的准确率理论上也有84.62%,从之前的60%多提升到现在可以说是差不多够了,这其中的原因可能数据过少了。

得出的测试集与验证集如图3.8所示,这张训练图是从我的组员的电脑来训练的,因为我的电脑运行缓慢的原因而导致训练过程运行了一个多小时,且曲线图也不够好看,而最后的训练结果还是可以接受的。

图3.7 训练过程及曲线。

相关文档
最新文档