论文部分内容阅读
摘 要:由于血糖试纸在滚切完成装筒之前要对试纸条进行数条、瑕疵检测、标记检测、切偏检测、去废条及补条等工作, 不仅费时费力,影像生产效率,而且由于人体的局限,往往由于一时的疏忽或者精力不集中就可能造成误检漏检从而影响产品质量。基于此我们设计研发了基于VisionPro视觉软件及双相机的血糖试纸视频检测系统,利用双相机分别获取血糖基片滚切之前和滚切之后的两张图像发送给VisionPro视觉软件进行处理, 再利用VB.net编写的应用程序界面接收和读取VisionPro视觉软件处理后的运算结果,同时对检测的结果进行显示并通过串口发送给下位机进行处理。结果表明该系统很好的实现了血糖试纸条条数计算、瑕疵检测、标记检测、切偏检测等功能,满足自动化生产的需要。
关键词:VisionPro ; 双相机; 血糖试纸; VB.net
1、引言
进入新世纪后随着计算机硬件、软件及图像处理算法的不断进步和更新,计算机视觉技术逐渐发展成熟并开始逐步得到应用。本文选用美国康耐视公司的VisionPro软件,这是基于微软Windows系统的视觉软件开发包。VisionPro为客户提供了多种功能强大的分析工具,包括图像查找、坐标定位、斑点分析、卡尺工具、绘图工具、条码识别、颜色识别等等。配合VisionPro软件自带的界面生成软件,可快速生成以C#或者VB.NET语言为基础的应用程序界面。客户可在其生成界面基础上二次开发快速建立自己的应用程序。目前康耐视的VisionPro软件已经成为机器视觉领域最受欢迎的视觉软件之一,正在得到越来越广泛的应用。本文将介绍基于VisionPro视觉软件及VB.net语言开发的血糖试纸检测筛选系统。
2.视频检测系统
2.1 系统硬件
系统硬件主要包括:两个GiGE接口的500万像素工业相机、一个千兆级工业交换机、四块阵面光源、由PLC控制的下位机执行机构。硬件的连接方式为:两个GiGE接口的工业相机通过网线连接到交换机再通过网线连接到PC机,每个相机工作部位包含两块阵面光源作为照明,两个工位故需要总四块阵面光源。此外还包括血糖试纸生产必需的滚切机、由气缸和吸盘构成的去废条机构和补条等机构,这几个机构都是由PLC进行控制。PC机通过串口与PLC进行通信,并将视频分析后的信号结果发送给PLC,PLC再控制执行机构进行去废条、补条、装筒等一系列动作。
2.3 系统软件
软件部分包括:VisionPro 8.2视觉软件、界面显示控制软件如图(1)所示、由梯形图语言编写的PLC程序。
3、双相机设计原理
本系统采用双相机检测方案,VisionPro软件支持多相机方案,即可以在一个项目中支持多个相机连接且其各个相机的信号传输、图像信号处理都可以并行进行。本系统采用双相机方案的原因是由于将一版血糖基片(每版包含25条连接在一起的试条)送入滚切机,从滚切机出来得到不连接的25条单独的试剂片时,这 25条试剂片高低前后的位置可能并不整齐,这会对视频检测造成影响。故在滚切机前面入口处添加一个相机,对基片表面存在画伤、标记、瑕疵进行第一次检测。从滚切出来后还要对试剂片的条数(即是否满25条)以及试剂片上下左右是否切偏进行检测,故又在滚切机出口再添加一个相机,实现对条数和切偏的检测。要实现多相机方案,则相机和PC机的IP地址设定一定要在同一个网段内。例如本设计将PC机的IP地址设定为:192.168.1.10,第一相机的IP地址设定为:192.168.1.20,第二相机的IP地址设定为192.168.1.30。下图图(2)为双相机设计方案界面,CogJob1为第一相机,CogJob2为第二相机。
4. 视频检测原理设计
4.1 图像训练
VisionPro软件中有一个CogPMAlignTool工具,该工具的作用是在接收到传送的图像后在图像特定区域中查找已经经过训练的图像,并将查找到的图像数量、XY坐标、角度、相似度分数等参数传递给其他工具使用,该工具是进行所有图像分析和处理的基础。进入该工具可以设定检测区域以及训练图像、采用的检测算法、偏转角度范围、缩放比例范围、接受阀值等参数进行设定。在本设计中该工具的设定为:检测算法为PatMax 与PatQuick,因为该算法灵敏度以及检测准确度最高。训练的图像选择血糖试剂片电极部分。偏转角度范围为-45°到45 ?,缩放比例范围为0.9至1.0, 接受阀值为0.8。接受阀值设置一定要注意,如果该参数设置得过高可能会造成漏条的情况,如果该参数设置得过低,则可能会造成多条的情况。
4.2宏代码编辑
进入宏代码编辑页面会看到以下三行代码For Each tool As Cognex.VisionPro.ICogTool In mToolBlock.Tools ,mToolBlock.RunTool(tool, message, result) ,Next。其作用是将当前页面工具集合中的所有工具按从上往下的顺序依次运行一次。然而为了能够更好的控制工具运行的时间和运行次数,我们将上面三句代码注释掉,然后写入下面的代码:Dim Cog_PMT As CogPMAlignTool = mToolBlock.Tools.item("查找产品")。其作用为定义一个名词为Cog_PMT的CogPMAlignTool类的对象,并将对象初始化引用为当前名称为“查找产品”的CogPMAlignTool工具,“查找产品”这个名称是可以自由修改的。然后采用以下命令运行该对象:mToolBlock.RunTool(Cog_PMT, message, result) ,该代码的意义为将Cog_PMT对象工具运行一次。之后定义四个数组变量:Dim Data_x(25) As Double,Dim Data_y(25) As Double,Dim Data_A(25) As Double,Dim Data_sco(25)As Double作为XY坐标、角度及相似度分数寄存变量。另定义一个整形变量并读取搜索工具查找到的图像数量:n = Cog_PMT.Results.Count,接着将各个图像的XY坐标、角度及相似度读取并保存:Fori= 0 To n – 1,Data_Pose(i) = Cog_PMT.Results.item(i).getPose,Data_x(i)=Cog_PMT.Results.item(i).getPose.TranslationX,Data_y(i)=Cog_PMT.Results.item(i).getPose.TranslationY ,Data_A(i)=Cog_PMT.Results.item(i).getPose.Rotation,Data_sco(i)=Cog_PMT.Results.item(i).Score ,Next。這样我们就能够读取搜索到的试剂片的数量和坐标了。但是还有一点由于CogPMAlignTool搜索到并输出的坐标和ID号是按照相似度分数大小从高往低排序的,而我们需要的是按照X坐標从左往右的,故需要对结果进行重新排序和处理,使其坐标是按照X坐标从左往右拍序。完成排序后将这些坐标发送给名称为:Strip1_Check的CogToolBlock类工具集合的X,Y,A三个输入项,Strip1_Checkz这个名称也是可以自由定义的。Strip1_Check集合内放置了试剂条表面检测的各种工具,这些坐标接下来将作为这些工具的坐标使用。我们总共从搜索工具读取了25个试剂条图像的位置坐标,接着按照类似CogPMAlignTool工具的方法控制Strip1_Check集合的运行,将这25个坐标数据一一发送给Strip1_Check集合,并依次运行Strip1_Check集合,完成25次运行则完成25条试剂条表面检测工作。第一相机和第二相机图形搜索页面的宏代码都是一样的。 4.3试剂条表面检测
进入第一相机的Strip1_Check的CogToolBlock类工具集合页面,该界面放置了试剂条表面检测的各类工具。trip1_Check输入的坐标先发送CogFixtureTool工具,该工具的作用是在输入的坐标基础上在图像表面进行建立新的坐标系供后面的工具使用。因为第一相机要进行试机条表面空白处黑斑点、黑色电极白斑点、标记、划伤、上下边缘切偏检测等工作,故会用到两个工具,依次是斑点检测工具,CogBlobTool卡尺工具CogCaliperTool。在进行空白处斑点及标记检测时将CogBlobTool工具设置成白底黑点、硬阀值(固定)、阀值设置到合适的数值即可。在进行黑色电极处白斑点和划伤检测时将CogBlobTool工具设置成黑底白点,其他参数一样。卡尺工具是用来测量试剂条是否切偏的,它的原理是测量黑色电极到邊缘的距离,当这个距离超过设定的数值则可认定为切偏或者不合格。第一相机和第二相机前面的工具集合页面都是一样的,唯一不同的地方是在Strip1_Check集合这个页面,因为第一相机要进行斑点检测和位置检测因此要用到斑点检测和卡尺工具。而第二相機只是进行左右上下切偏检测,因此只用到卡尺工具。进入第二相机的Strip1_Check的CogToolBlock类工具集合页面。这两个页面CogFixtureTool工具的设定都是相同的,只是后面使用的工具不同而已。
4.4数据发送和处理
第一相机中要进行四个黑色电极的白斑点分析,五个空白处黑斑点分析,导血槽左右位置检测,上下边缘切偏检测,故用总共用到到四个斑点分析工具进行白斑点分析,五个斑点分析工具进行黑斑点分析,四个卡尺工具进行位置检测。第二相机中只需要检测左右上下边缘是否切偏,故要用到四个卡尺工具。在完成一次检测之后用宏代码读取每个斑点分析工具的Results.GetBlob().Count项,该项是一个整形变量,作用是输出当前斑点工具检测到的斑点数量,在宏代码中将读取到的四个白斑点分析工具和五个黑斑点分析工具输出的斑点数量分别相加,从而得到当前试剂片的白斑点数和黑斑点数,将这两个变量添加为发送项。卡尺工具的输出变量Results.Item(0).Width项代表的是当前检测到两个边缘对之间的距离数值。将四个卡尺工具的输出变量Results.Item(0).Width全部添加为发送项。从以上可得知第一相机有六个发送项(包括两个斑点数据发送项,四个卡尺数据发送项),第二相机有4个卡尺数据发送项。界面控制软件如(图(1)所示)通过读取发送项获取VisionPro图像分析后发送的数据,在获取了这几个数据后我们就可以在界面控制软件中进行结果的判断分析和对结果进行显示了。判断的方法为:当黑斑点和白斑点数据值两者都为0时为无斑点,当两者任何一个数值不为0则认为为有斑点,当前试条不合格,并在控制界面上进行提示。当所有卡尺工具的数据都在指定范围内则认定当前试机条合格,否则有任何一个卡尺数据超过了规定范围则认定当前试剂条不合格,并在控制界面上进行提示。当认定当前试机片不存在斑点和所有卡尺测量数据在规定范围内时则认定当前试剂片合格,否则有任何一项不符合规定都认定为不合格。最后将25试剂片的检验数据合并为一个25位二进制数据并打包通过串口发送给下位机PLC,PLC在接收到检测结果数据后控制气缸和吸盘执行去废条和补条工作,从而完成整个系统工作流程。
5、结果和结论
经过多次实验和改进,目前我们这个项目已经通过客户试用验收且已经正式交付客户使用。设备达到且超过设计任务书要求的设计目标和参数,设计任务书规定:识别误差率:>99%,设备稳定性:>8Hr,生产速度:>360筒/小时。而我们的系统实际识别误差率:>99.9%,生产速度:>400筒/小时。系统和设备最终完整图片如图(3)和图(4)所示。
参考文献:
[1]马静静. 基于VisionPro的汽车仪表检测. 汽车实用技术. 2015(12)
[2]Cognex. VisionPro Application Development Guide. 2013
[3]Cognex. VisionPro Users Guide. 2013
[4]Cognex. VisionPro Programming Reference. 2013
[5]Cognex. VisionPro Control Reference. 2013
关键词:VisionPro ; 双相机; 血糖试纸; VB.net
1、引言
进入新世纪后随着计算机硬件、软件及图像处理算法的不断进步和更新,计算机视觉技术逐渐发展成熟并开始逐步得到应用。本文选用美国康耐视公司的VisionPro软件,这是基于微软Windows系统的视觉软件开发包。VisionPro为客户提供了多种功能强大的分析工具,包括图像查找、坐标定位、斑点分析、卡尺工具、绘图工具、条码识别、颜色识别等等。配合VisionPro软件自带的界面生成软件,可快速生成以C#或者VB.NET语言为基础的应用程序界面。客户可在其生成界面基础上二次开发快速建立自己的应用程序。目前康耐视的VisionPro软件已经成为机器视觉领域最受欢迎的视觉软件之一,正在得到越来越广泛的应用。本文将介绍基于VisionPro视觉软件及VB.net语言开发的血糖试纸检测筛选系统。
2.视频检测系统
2.1 系统硬件
系统硬件主要包括:两个GiGE接口的500万像素工业相机、一个千兆级工业交换机、四块阵面光源、由PLC控制的下位机执行机构。硬件的连接方式为:两个GiGE接口的工业相机通过网线连接到交换机再通过网线连接到PC机,每个相机工作部位包含两块阵面光源作为照明,两个工位故需要总四块阵面光源。此外还包括血糖试纸生产必需的滚切机、由气缸和吸盘构成的去废条机构和补条等机构,这几个机构都是由PLC进行控制。PC机通过串口与PLC进行通信,并将视频分析后的信号结果发送给PLC,PLC再控制执行机构进行去废条、补条、装筒等一系列动作。
2.3 系统软件
软件部分包括:VisionPro 8.2视觉软件、界面显示控制软件如图(1)所示、由梯形图语言编写的PLC程序。
3、双相机设计原理
本系统采用双相机检测方案,VisionPro软件支持多相机方案,即可以在一个项目中支持多个相机连接且其各个相机的信号传输、图像信号处理都可以并行进行。本系统采用双相机方案的原因是由于将一版血糖基片(每版包含25条连接在一起的试条)送入滚切机,从滚切机出来得到不连接的25条单独的试剂片时,这 25条试剂片高低前后的位置可能并不整齐,这会对视频检测造成影响。故在滚切机前面入口处添加一个相机,对基片表面存在画伤、标记、瑕疵进行第一次检测。从滚切出来后还要对试剂片的条数(即是否满25条)以及试剂片上下左右是否切偏进行检测,故又在滚切机出口再添加一个相机,实现对条数和切偏的检测。要实现多相机方案,则相机和PC机的IP地址设定一定要在同一个网段内。例如本设计将PC机的IP地址设定为:192.168.1.10,第一相机的IP地址设定为:192.168.1.20,第二相机的IP地址设定为192.168.1.30。下图图(2)为双相机设计方案界面,CogJob1为第一相机,CogJob2为第二相机。
4. 视频检测原理设计
4.1 图像训练
VisionPro软件中有一个CogPMAlignTool工具,该工具的作用是在接收到传送的图像后在图像特定区域中查找已经经过训练的图像,并将查找到的图像数量、XY坐标、角度、相似度分数等参数传递给其他工具使用,该工具是进行所有图像分析和处理的基础。进入该工具可以设定检测区域以及训练图像、采用的检测算法、偏转角度范围、缩放比例范围、接受阀值等参数进行设定。在本设计中该工具的设定为:检测算法为PatMax 与PatQuick,因为该算法灵敏度以及检测准确度最高。训练的图像选择血糖试剂片电极部分。偏转角度范围为-45°到45 ?,缩放比例范围为0.9至1.0, 接受阀值为0.8。接受阀值设置一定要注意,如果该参数设置得过高可能会造成漏条的情况,如果该参数设置得过低,则可能会造成多条的情况。
4.2宏代码编辑
进入宏代码编辑页面会看到以下三行代码For Each tool As Cognex.VisionPro.ICogTool In mToolBlock.Tools ,mToolBlock.RunTool(tool, message, result) ,Next。其作用是将当前页面工具集合中的所有工具按从上往下的顺序依次运行一次。然而为了能够更好的控制工具运行的时间和运行次数,我们将上面三句代码注释掉,然后写入下面的代码:Dim Cog_PMT As CogPMAlignTool = mToolBlock.Tools.item("查找产品")。其作用为定义一个名词为Cog_PMT的CogPMAlignTool类的对象,并将对象初始化引用为当前名称为“查找产品”的CogPMAlignTool工具,“查找产品”这个名称是可以自由修改的。然后采用以下命令运行该对象:mToolBlock.RunTool(Cog_PMT, message, result) ,该代码的意义为将Cog_PMT对象工具运行一次。之后定义四个数组变量:Dim Data_x(25) As Double,Dim Data_y(25) As Double,Dim Data_A(25) As Double,Dim Data_sco(25)As Double作为XY坐标、角度及相似度分数寄存变量。另定义一个整形变量并读取搜索工具查找到的图像数量:n = Cog_PMT.Results.Count,接着将各个图像的XY坐标、角度及相似度读取并保存:Fori= 0 To n – 1,Data_Pose(i) = Cog_PMT.Results.item(i).getPose,Data_x(i)=Cog_PMT.Results.item(i).getPose.TranslationX,Data_y(i)=Cog_PMT.Results.item(i).getPose.TranslationY ,Data_A(i)=Cog_PMT.Results.item(i).getPose.Rotation,Data_sco(i)=Cog_PMT.Results.item(i).Score ,Next。這样我们就能够读取搜索到的试剂片的数量和坐标了。但是还有一点由于CogPMAlignTool搜索到并输出的坐标和ID号是按照相似度分数大小从高往低排序的,而我们需要的是按照X坐標从左往右的,故需要对结果进行重新排序和处理,使其坐标是按照X坐标从左往右拍序。完成排序后将这些坐标发送给名称为:Strip1_Check的CogToolBlock类工具集合的X,Y,A三个输入项,Strip1_Checkz这个名称也是可以自由定义的。Strip1_Check集合内放置了试剂条表面检测的各种工具,这些坐标接下来将作为这些工具的坐标使用。我们总共从搜索工具读取了25个试剂条图像的位置坐标,接着按照类似CogPMAlignTool工具的方法控制Strip1_Check集合的运行,将这25个坐标数据一一发送给Strip1_Check集合,并依次运行Strip1_Check集合,完成25次运行则完成25条试剂条表面检测工作。第一相机和第二相机图形搜索页面的宏代码都是一样的。 4.3试剂条表面检测
进入第一相机的Strip1_Check的CogToolBlock类工具集合页面,该界面放置了试剂条表面检测的各类工具。trip1_Check输入的坐标先发送CogFixtureTool工具,该工具的作用是在输入的坐标基础上在图像表面进行建立新的坐标系供后面的工具使用。因为第一相机要进行试机条表面空白处黑斑点、黑色电极白斑点、标记、划伤、上下边缘切偏检测等工作,故会用到两个工具,依次是斑点检测工具,CogBlobTool卡尺工具CogCaliperTool。在进行空白处斑点及标记检测时将CogBlobTool工具设置成白底黑点、硬阀值(固定)、阀值设置到合适的数值即可。在进行黑色电极处白斑点和划伤检测时将CogBlobTool工具设置成黑底白点,其他参数一样。卡尺工具是用来测量试剂条是否切偏的,它的原理是测量黑色电极到邊缘的距离,当这个距离超过设定的数值则可认定为切偏或者不合格。第一相机和第二相机前面的工具集合页面都是一样的,唯一不同的地方是在Strip1_Check集合这个页面,因为第一相机要进行斑点检测和位置检测因此要用到斑点检测和卡尺工具。而第二相機只是进行左右上下切偏检测,因此只用到卡尺工具。进入第二相机的Strip1_Check的CogToolBlock类工具集合页面。这两个页面CogFixtureTool工具的设定都是相同的,只是后面使用的工具不同而已。
4.4数据发送和处理
第一相机中要进行四个黑色电极的白斑点分析,五个空白处黑斑点分析,导血槽左右位置检测,上下边缘切偏检测,故用总共用到到四个斑点分析工具进行白斑点分析,五个斑点分析工具进行黑斑点分析,四个卡尺工具进行位置检测。第二相机中只需要检测左右上下边缘是否切偏,故要用到四个卡尺工具。在完成一次检测之后用宏代码读取每个斑点分析工具的Results.GetBlob().Count项,该项是一个整形变量,作用是输出当前斑点工具检测到的斑点数量,在宏代码中将读取到的四个白斑点分析工具和五个黑斑点分析工具输出的斑点数量分别相加,从而得到当前试剂片的白斑点数和黑斑点数,将这两个变量添加为发送项。卡尺工具的输出变量Results.Item(0).Width项代表的是当前检测到两个边缘对之间的距离数值。将四个卡尺工具的输出变量Results.Item(0).Width全部添加为发送项。从以上可得知第一相机有六个发送项(包括两个斑点数据发送项,四个卡尺数据发送项),第二相机有4个卡尺数据发送项。界面控制软件如(图(1)所示)通过读取发送项获取VisionPro图像分析后发送的数据,在获取了这几个数据后我们就可以在界面控制软件中进行结果的判断分析和对结果进行显示了。判断的方法为:当黑斑点和白斑点数据值两者都为0时为无斑点,当两者任何一个数值不为0则认为为有斑点,当前试条不合格,并在控制界面上进行提示。当所有卡尺工具的数据都在指定范围内则认定当前试机条合格,否则有任何一个卡尺数据超过了规定范围则认定当前试剂条不合格,并在控制界面上进行提示。当认定当前试机片不存在斑点和所有卡尺测量数据在规定范围内时则认定当前试剂片合格,否则有任何一项不符合规定都认定为不合格。最后将25试剂片的检验数据合并为一个25位二进制数据并打包通过串口发送给下位机PLC,PLC在接收到检测结果数据后控制气缸和吸盘执行去废条和补条工作,从而完成整个系统工作流程。
5、结果和结论
经过多次实验和改进,目前我们这个项目已经通过客户试用验收且已经正式交付客户使用。设备达到且超过设计任务书要求的设计目标和参数,设计任务书规定:识别误差率:>99%,设备稳定性:>8Hr,生产速度:>360筒/小时。而我们的系统实际识别误差率:>99.9%,生产速度:>400筒/小时。系统和设备最终完整图片如图(3)和图(4)所示。
参考文献:
[1]马静静. 基于VisionPro的汽车仪表检测. 汽车实用技术. 2015(12)
[2]Cognex. VisionPro Application Development Guide. 2013
[3]Cognex. VisionPro Users Guide. 2013
[4]Cognex. VisionPro Programming Reference. 2013
[5]Cognex. VisionPro Control Reference. 2013