"景先生毕设|www.jxszl.com

基于机器视觉的棒材计数系统

2019-12-14 20:15编辑: www.jxszl.com景先生毕设
基于机器视觉的棒材计数系统[20191214193220]
摘 要
棒材的计数分钢是棒材企业生产和销售中重要的一环。长期以来,棒材企业采用人工计数的方式对棒材计数。这种方法计数效率低、劳动强度高,存在较大计数误差,严重影响轧钢厂的生产效率和自动化程度。因此,提高棒材计数的效率和精度从而实现棒材计数自动化,并实现整个棒材生产流程的自动化都有重大的意义。
本设计介绍一种基于机器视觉的棒材计数系统。在该系统中,PC机软件驱动工业摄像机拍摄生产线上连续传送的钢材的端面图像,并将图像传输给PC机进行数字图像处理和计数。当计数值达到设定值时,发出链床停止信号,同时发出分钢信号以便于分钢操作,整个过程分为图像采集、图像处理以及流程控制三个步骤来实现。系统采用USB传输协议驱动工业相机,从而完成图像采集工作,使用MFC框架开发出系统界面,并依照相机属性对相机的参数进行研究。经过研究,实现了系统对相机的驱动以及参数调节,能稳定的为图像处理模块提供高质量的数字图像信号。
 查看完整论文请+Q: 351916072 
关键字:机器视觉;数字摄像机;棒材计数
目 录
摘 要 I
ABSTRACT II
目 录 III
第1章 绪论 1
第一节 钢材自动计数技术现状的调研与分析 1
第二节 课题的研究意义及目的 3
第三节 本文主要研究内容 3
第2章 开发平台及相关技术选择论证 4
第一节 开发语言的选择论证 4
第二节 技术框架的选择论证 4
第三节 本章小结 5
第3章 总体设计 6
第一节 项目需求分析 6
第二节 系统功能需求分析 6
第三节 系统结构模块设计 7
第四节 系统工作流程设计 8
第五节 本章小结 8
第4章 系统设计与实现 9
第一节 硬件检测模块的设计与实现 9
第二节 文件处理模块的设计与实现 10
第三节 系统设置模块的设计与实现 10
第四节 视图采集模块的设计与实现 14
第五节 系统校正和帮助模块的设计与实现 14
第六节 本章小结 15
第5章 系统测试及结果分析 16
第一节 系统测试 16
第二节 测试结果分析 20
第6章 总结与展望 22
第一节 总结 22
第二节展望 22
致谢 24
参考文献 25
附录A:外文翻译 27
第1章 绪论
第一节 钢材自动计数技术现状的调研与分析
在我国钢材种类中,小型钢材的耗费量持续增多,并持续以较高的速度增长。近些年来,小型棒材产量占钢材的总生产量的10%-20%[1]。在市场经济的带动下,各个生产企业纷纷展开技术创新,发展先进技术来提高生产量。按照国家标准GBl49921998(钢筋混凝土用带肋钢筋)和GBl301321991(钢筋混凝土用热轧光圆钢筋)[2],各个棒材企业一般开始采用负偏差轧制和理论重量交货。实际重量与理论重量的误差不超出标准中所给出的误差时,按照理论重量交货。
在棒材生产过程中,铁坯(原料)经过加热炉加热后再进行粗轧机、中轧机和精轧机轧制,得到符合用户要求的钢筋或螺纹钢,经倍尺切剪后送至冷却机床进行冷却。钢材冷却后,成一定规格的剪切输送到生产线上用定尺冷却剪进行切割。但由于倍尺在切割快速移动的钢筋时存在切割误差,因此冷却床上的倍尺钢筋经过定尺切割后余下的部分常常存在短尺等问题。同时,钢筋还存在弯头、划痕、钢材带耳、螺纹钢材少纹、细孔及弯折等缺陷[3]。为了把有缺陷的钢材挑出来,在定尺切割后,要在校验台处对钢筋进行校验。钢筋在生产好之后,按照客户要求将标准钢材按规定的支数进行标准化打包封装。
要实现按理论质量交货,并且保证钢筋质量合格,则必然使每捆棒钢材的数量确定。但是,一直以来,在实践生产过程中,棒材的自动计数作为重大问题困扰着我国钢材生产厂家。现今,我国的棒材生产企业大多采用人工计数,这种方法劳动强度大,准确率低,与生产节奏不适应,成为局限生产率的门槛。因为人工计数的措施存在各种问题,市场运行过程当中只可根据实际重量计算,不能以国际上流通的负公差轧制法中获取应有的利润,造成经济损失[4]。因此,寻找一种合适的方法来准确的计数是棒材生产过程中亟待解决的问题,市场上目前已经应用的方法有如下几种
1.人工计数法
人工计数方法是在棒材打捆机前的传送链条上由人工进行计数[5]。冷剪尺按长度剪切相同长度后,送到挡板对齐。然后通过横移装置将测试尺分离出的不合格的棒材输出。现场工作人员根据规定将棒材分开,并由机床送至打捆环节进行打捆。图1.1显示了点支工作人员的工作环境。
图1.1显示了点支工作人员的工作环境
人工计数的主要优点是在同一时间计数,并挑选不符合要求的不合格的棒材。同时,仍有许多不足之处,是一个比较困难的工作[6]。
(1)棒材即使经过机器降温,但温度仍然在200度以上,在钢材机床旁工作的点支工作人员一直处于高温下。
(2)棒材机床移动速度快,一般的钢铁公司棒材厂,检验台处传送链条的速度为0.54m/s工人工作时神经高度紧张,时间稍长时就容易数错。在夜间工作时,困倦等因素会加大错误率。
(3)在生产半径较细的棒材时,点支的频率很快。对于自动化的生产方式,人工计数已经无法满足,传送链条与工作人员计数速度不同,需要一定时间间隔后停下来等待,导致生产流程不匹配,很大程度上影响了生产效率的提升。棒材计数是高重复性的劳动,从事这类工作的工人容易产生疲劳。对于产品尺寸规格高的棒材,工作人员的劳动强度非常高,并且在恶劣的生产环境下,工人的身体也收到了严重的影响。
2.机电计数法
利用光电器件实现计数目标、利用霍尔元件实现计数目标以及利用摄像像素分析法实现计数目标[7-9]。采用位移传感器和光纤传感器的双重传感器检测技术,配合数字电路以及机电一体化的自动检测装置,并结合软件算法实现棒材的自动化计数。
光电管基于光伏效应的理论,即光电流的强弱变化反应了光通量的大小。成型的钢材输送到链床上并捆装,光源与光电管分别置于链床两端运动中的棒材会使光通量的大小产生变化,从而判断棒材的数量。
光电管在棒材平铺在链床上时计数准确率高,但是这种方法有其弊端,传感器易老化,而且对于棒材重叠、粘连等问题不能有效解决,误差较大。
3.基于图像处理的棒材计数法
据估计,采用了自动视觉检验可以使客户投诉减少72%到80%,企业生产过程的需要使自动化检测技术的研究和发展得到了促进[10]。直到有了计算机视觉、图像处理以及模式识别的研究得以有新的可适用可实施成果的时候,计算机视觉与模式识别技术才被人们将其相结合来代替系统的视觉,对传送到电脑的图像进行分析处理并能得出相应的结果。基于机器视觉的图像处理技术,在一定的判断要求下,得出的是基于结论的客观判断,并且在相同的外部因素下,得出的判断结果是一致的。因此基于机器是觉得棒材计数系统得到了广泛的重视与研究。利用基于机器视觉的棒材检测技术来代替人工技术将使棒材计数工人从枯燥、严峻甚至危险的工作环境下解脱出来的最佳方式[11]。然而,机器视觉技术的复杂性一直使棒材生产机床的全自动化无法真正实现。
棒材计数项目一直是我国大多数钢铁企业和相关研究机构的研究对象,已经实现的棒材计数技术要在工业现场应用,还有很多问题仍需要解决。
第二节 课题的研究意义及目的
为了实现自动化生产,避免人工技术的劳累与低效。急需一种稳定的棒材数量自动检测装置,能够实时点支,当技术达到设定的个数之后,系统能发出信号,控制机床实现分钢操作。而装置的核心部分,是棒材的在线识别和计数[12]。
图像处理技术是随着计算机技术的发展和成熟的理论体系而快速发展的,同时基于计算机视觉的理论的图像处理系统已广泛应用于工业领域,技术已经成熟[13]。
对照本设计中的棒材技术系统,通过系统对工业摄像机的驱动来获取合适的棒材端面图像,由图像采集卡将图像信号数字化;然后将近信号输出到机床,采用图像处理技术识别棒材的端面,从而实现棒材的跟踪技术,当技术达到设定的个数之后,系统能发出信号,控制机床实现分钢操作。从而达到分离棒材的目的[14]。
第三节 本文主要研究内容
为了达到自动化棒材计数、控制分钢,需要一款上位机软件来采集工业相机采集到的棒材图像,然后对图像进行处理,识别出棒材根数,在达到计数数量后,向机床发出分钢信号,从而达到智能分钢的要求。整个流程下来分三块:图像采集、图像处理、流程控制,本文主要研究内容为图像采集于流程控制部分,属于图像处理的前端和后端,为整个课题研究提供了支撑框架。
第2章 开发平台及相关技术选择论证
第一节 开发语言的选择论证
为了实现棒材的精准计数,可视化的人机交互界面,便于操作,我们使用Visual C++开发出简洁、友好、实用的棒材自动计数系统软件操作界面[15]。C++语言相对于目前其他的较高级语言或脚本语言,如Java、C#、python,优势在于程序的运行性能。但是这种观念并不完全,C/C++语言是直接运行在机器上,并不需要虚拟机作为中介,这直接提高了C++语言的运行效率,同时,一般认为,使用Java或C#的开发成本会比C++低。如果软件的规模与复杂度小,C++的优势没有多少,如果有效代码超过三万行以上(不包括编辑器生成的代码),C++的优势将会非常明显,这种差异的产生使C++的软件工程性能提升到一个绝无仅有的高度,语言的抽象能力可以反映出软件工程的质量,从面向过程到面向对象,语言的抽象能力有了质的改变,然而在实际应用中,面向对象的思想也无法解决所有的问题,于是C++引入了多种特性,并拓展泛型编程,解决了复杂性的软件工程问题。目前C++在高级系统程序设计、3D游戏开发、数值科学计算、通用程序设计以及混合系统设计等领域有着根本性优势,所以本软件选择使用C++进行研究开发[17]。
第二节 技术框架的选择论证
在进行C++开发时,我们会涉及到许多基础的代码重复的编写,我们还需要注意各个接口的标准化,这时候我们需要引入一种稳定、高效的程序框架,MFC是微软公司特定的应用程序包接口,是一种重要的编程方法。
MFC的全称是 Microsoft Foundation Classes,即微软的基础类库[18]。MFC的本质就是一个包含了微软公司许多定好的对象的类库。虽然每个开发人员要编写的程序功能各不相同,但是从结构上讲,都可以划分为对用户界面的设计、对文件的操作、对数据库的访问以及对多媒体的使用等等,这一点是微软公司提出MFC框架的重要原因。而课题应用了其中的用户界面设计和对文件的操作。
应用程序在运行时需要保存一些信息,这是必不可少的。,例如,SDK程序会将实力保存为全局变量,而程序就可以通过这个实例句柄获得执行文件的资源,同样MFC也会保存资源,它会通过Class来保存[19]。 
通过与SDK比较,MFC要保存的信息更多,除了实例句柄,还包括资源、窗口、模块句柄。除此之外,MFC还分配内存给应用程序,还有ODBC支撑、OLE支撑以及异常的处理等。经过对比,可知MFC的功能相比较SDK更加全面、强大[20]。
对于MFC来说,窗口的种类很多。打开MFC的类库,包括以下窗口类:Frame Window、Dialog Box、Views、Controls。而能作为主程序的窗口类也不是唯一的。(实际应用中,以Dialog作为Main Window的例子会更加常见。)  
不同的窗口类之间都有差别,但是他们都有共同的地方。是的,正如你所见,他们都继承于CWnd类。CWnd是一个很全面的类,他是所有窗口类的基类。因为继承的特点,子类集会默认保留一些父类的属性。  
虽然每个窗口类之间的差异,但在本质上,他们已经做了一个非常类似的工作。因此,我们对进行一些特定的探究,从而使窗口类的实现统一化[21]。(但在一些时候,由于一些窗口的自身特性,一般化过程也会被阻碍。)  
CFrameWnd的主要作用是创建一个窗体对象,并通过自身的消息映射表(Message Map),将消息映射到相应的消息处理函数中进行处理。这里CFrameWnd在SDK中起到了回调函数的作用。
在MFC中,都以字母“C”为开头来命名类,但这并不是一定的,这样做只是为了程序编写更加标准,增加可读性。作为单文档程序(即我们在工程创建的第二步选的Single document),都会有CMainFrame这个类,还有一个以“C+项目名+App”为名的一个类、以“C+项目名+Doc”命名的一个类、一个以“C+项目名+View”命名的一个类。作为一名初学者,在刚学习MFC的框架时,首先要熟悉框架生成的几个类,还有类中的源代码。然后在解读程序时,才能知道类与代码是如何生成的,便于区分我们自己编写的的类与系统生成的类。双击ClassView标志页上的类名称,头文件会在工作区窗格处打开定义。我们可以发现ClassView标志页中的这几个类下面都会有一个基类,例如,CTestView下的View;CMainFrame下的CFrameWnd,这些基类都是MFC类库中的类[22]。

原文链接:http://www.jxszl.com/dzxx/dzkxyjs/1715.html