韋東周
摘 要:由于血糖試紙?jiān)跐L切完成裝筒之前要對(duì)試紙條進(jìn)行數(shù)條、瑕疵檢測(cè)、標(biāo)記檢測(cè)、切偏檢測(cè)、去廢條及補(bǔ)條等工作, 不僅費(fèi)時(shí)費(fèi)力,影像生產(chǎn)效率,而且由于人體的局限,往往由于一時(shí)的疏忽或者精力不集中就可能造成誤檢漏檢從而影響產(chǎn)品質(zhì)量?;诖宋覀?cè)O(shè)計(jì)研發(fā)了基于VisionPro視覺(jué)軟件及雙相機(jī)的血糖試紙視頻檢測(cè)系統(tǒng),利用雙相機(jī)分別獲取血糖基片滾切之前和滾切之后的兩張圖像發(fā)送給VisionPro視覺(jué)軟件進(jìn)行處理, 再利用VB.net編寫(xiě)的應(yīng)用程序界面接收和讀取VisionPro視覺(jué)軟件處理后的運(yùn)算結(jié)果,同時(shí)對(duì)檢測(cè)的結(jié)果進(jìn)行顯示并通過(guò)串口發(fā)送給下位機(jī)進(jìn)行處理。結(jié)果表明該系統(tǒng)很好的實(shí)現(xiàn)了血糖試紙條條數(shù)計(jì)算、瑕疵檢測(cè)、標(biāo)記檢測(cè)、切偏檢測(cè)等功能,滿足自動(dòng)化生產(chǎn)的需要。
關(guān)鍵詞:VisionPro ; 雙相機(jī); 血糖試紙; VB.net
1、引言
進(jìn)入新世紀(jì)后隨著計(jì)算機(jī)硬件、軟件及圖像處理算法的不斷進(jìn)步和更新,計(jì)算機(jī)視覺(jué)技術(shù)逐漸發(fā)展成熟并開(kāi)始逐步得到應(yīng)用。本文選用美國(guó)康耐視公司的VisionPro軟件,這是基于微軟Windows系統(tǒng)的視覺(jué)軟件開(kāi)發(fā)包。VisionPro為客戶提供了多種功能強(qiáng)大的分析工具,包括圖像查找、坐標(biāo)定位、斑點(diǎn)分析、卡尺工具、繪圖工具、條碼識(shí)別、顏色識(shí)別等等。配合VisionPro軟件自帶的界面生成軟件,可快速生成以C#或者VB.NET語(yǔ)言為基礎(chǔ)的應(yīng)用程序界面??蛻艨稍谄渖山缑婊A(chǔ)上二次開(kāi)發(fā)快速建立自己的應(yīng)用程序。目前康耐視的VisionPro軟件已經(jīng)成為機(jī)器視覺(jué)領(lǐng)域最受歡迎的視覺(jué)軟件之一,正在得到越來(lái)越廣泛的應(yīng)用。本文將介紹基于VisionPro視覺(jué)軟件及VB.net語(yǔ)言開(kāi)發(fā)的血糖試紙檢測(cè)篩選系統(tǒng)。
2.視頻檢測(cè)系統(tǒng)
2.1 系統(tǒng)硬件
系統(tǒng)硬件主要包括:兩個(gè)GiGE接口的500萬(wàn)像素工業(yè)相機(jī)、一個(gè)千兆級(jí)工業(yè)交換機(jī)、四塊陣面光源、由PLC控制的下位機(jī)執(zhí)行機(jī)構(gòu)。硬件的連接方式為:兩個(gè)GiGE接口的工業(yè)相機(jī)通過(guò)網(wǎng)線連接到交換機(jī)再通過(guò)網(wǎng)線連接到PC機(jī),每個(gè)相機(jī)工作部位包含兩塊陣面光源作為照明,兩個(gè)工位故需要總四塊陣面光源。此外還包括血糖試紙生產(chǎn)必需的滾切機(jī)、由氣缸和吸盤(pán)構(gòu)成的去廢條機(jī)構(gòu)和補(bǔ)條等機(jī)構(gòu),這幾個(gè)機(jī)構(gòu)都是由PLC進(jìn)行控制。PC機(jī)通過(guò)串口與PLC進(jìn)行通信,并將視頻分析后的信號(hào)結(jié)果發(fā)送給PLC,PLC再控制執(zhí)行機(jī)構(gòu)進(jìn)行去廢條、補(bǔ)條、裝筒等一系列動(dòng)作。
2.3 系統(tǒng)軟件
軟件部分包括:VisionPro 8.2視覺(jué)軟件、界面顯示控制軟件如圖(1)所示、由梯形圖語(yǔ)言編寫(xiě)的PLC程序。
3、雙相機(jī)設(shè)計(jì)原理
本系統(tǒng)采用雙相機(jī)檢測(cè)方案,VisionPro軟件支持多相機(jī)方案,即可以在一個(gè)項(xiàng)目中支持多個(gè)相機(jī)連接且其各個(gè)相機(jī)的信號(hào)傳輸、圖像信號(hào)處理都可以并行進(jìn)行。本系統(tǒng)采用雙相機(jī)方案的原因是由于將一版血糖基片(每版包含25條連接在一起的試條)送入滾切機(jī),從滾切機(jī)出來(lái)得到不連接的25條單獨(dú)的試劑片時(shí),這 25條試劑片高低前后的位置可能并不整齊,這會(huì)對(duì)視頻檢測(cè)造成影響。故在滾切機(jī)前面入口處添加一個(gè)相機(jī),對(duì)基片表面存在畫(huà)傷、標(biāo)記、瑕疵進(jìn)行第一次檢測(cè)。從滾切出來(lái)后還要對(duì)試劑片的條數(shù)(即是否滿25條)以及試劑片上下左右是否切偏進(jìn)行檢測(cè),故又在滾切機(jī)出口再添加一個(gè)相機(jī),實(shí)現(xiàn)對(duì)條數(shù)和切偏的檢測(cè)。要實(shí)現(xiàn)多相機(jī)方案,則相機(jī)和PC機(jī)的IP地址設(shè)定一定要在同一個(gè)網(wǎng)段內(nèi)。例如本設(shè)計(jì)將PC機(jī)的IP地址設(shè)定為:192.168.1.10,第一相機(jī)的IP地址設(shè)定為:192.168.1.20,第二相機(jī)的IP地址設(shè)定為192.168.1.30。下圖圖(2)為雙相機(jī)設(shè)計(jì)方案界面,CogJob1為第一相機(jī),CogJob2為第二相機(jī)。
4. 視頻檢測(cè)原理設(shè)計(jì)
4.1 圖像訓(xùn)練
VisionPro軟件中有一個(gè)CogPMAlignTool工具,該工具的作用是在接收到傳送的圖像后在圖像特定區(qū)域中查找已經(jīng)經(jīng)過(guò)訓(xùn)練的圖像,并將查找到的圖像數(shù)量、XY坐標(biāo)、角度、相似度分?jǐn)?shù)等參數(shù)傳遞給其他工具使用,該工具是進(jìn)行所有圖像分析和處理的基礎(chǔ)。進(jìn)入該工具可以設(shè)定檢測(cè)區(qū)域以及訓(xùn)練圖像、采用的檢測(cè)算法、偏轉(zhuǎn)角度范圍、縮放比例范圍、接受閥值等參數(shù)進(jìn)行設(shè)定。在本設(shè)計(jì)中該工具的設(shè)定為:檢測(cè)算法為PatMax 與PatQuick,因?yàn)樵撍惴`敏度以及檢測(cè)準(zhǔn)確度最高。訓(xùn)練的圖像選擇血糖試劑片電極部分。偏轉(zhuǎn)角度范圍為-45°到45 ?,縮放比例范圍為0.9至1.0, 接受閥值為0.8。接受閥值設(shè)置一定要注意,如果該參數(shù)設(shè)置得過(guò)高可能會(huì)造成漏條的情況,如果該參數(shù)設(shè)置得過(guò)低,則可能會(huì)造成多條的情況。
4.2宏代碼編輯
進(jìn)入宏代碼編輯頁(yè)面會(huì)看到以下三行代碼For Each tool As Cognex.VisionPro.ICogTool In mToolBlock.Tools ,mToolBlock.RunTool(tool, message, result) ,Next。其作用是將當(dāng)前頁(yè)面工具集合中的所有工具按從上往下的順序依次運(yùn)行一次。然而為了能夠更好的控制工具運(yùn)行的時(shí)間和運(yùn)行次數(shù),我們將上面三句代碼注釋掉,然后寫(xiě)入下面的代碼:Dim Cog_PMT As CogPMAlignTool = mToolBlock.Tools.item("查找產(chǎn)品")。其作用為定義一個(gè)名詞為Cog_PMT的CogPMAlignTool類的對(duì)象,并將對(duì)象初始化引用為當(dāng)前名稱為“查找產(chǎn)品”的CogPMAlignTool工具,“查找產(chǎn)品”這個(gè)名稱是可以自由修改的。然后采用以下命令運(yùn)行該對(duì)象:mToolBlock.RunTool(Cog_PMT, message, result) ,該代碼的意義為將Cog_PMT對(duì)象工具運(yùn)行一次。之后定義四個(gè)數(shù)組變量: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坐標(biāo)、角度及相似度分?jǐn)?shù)寄存變量。另定義一個(gè)整形變量并讀取搜索工具查找到的圖像數(shù)量:n = Cog_PMT.Results.Count,接著將各個(gè)圖像的XY坐標(biāo)、角度及相似度讀取并保存: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。這樣我們就能夠讀取搜索到的試劑片的數(shù)量和坐標(biāo)了。但是還有一點(diǎn)由于CogPMAlignTool搜索到并輸出的坐標(biāo)和ID號(hào)是按照相似度分?jǐn)?shù)大小從高往低排序的,而我們需要的是按照X坐標(biāo)從左往右的,故需要對(duì)結(jié)果進(jìn)行重新排序和處理,使其坐標(biāo)是按照X坐標(biāo)從左往右拍序。完成排序后將這些坐標(biāo)發(fā)送給名稱為:Strip1_Check的CogToolBlock類工具集合的X,Y,A三個(gè)輸入項(xiàng),Strip1_Checkz這個(gè)名稱也是可以自由定義的。Strip1_Check集合內(nèi)放置了試劑條表面檢測(cè)的各種工具,這些坐標(biāo)接下來(lái)將作為這些工具的坐標(biāo)使用。我們總共從搜索工具讀取了25個(gè)試劑條圖像的位置坐標(biāo),接著按照類似CogPMAlignTool工具的方法控制Strip1_Check集合的運(yùn)行,將這25個(gè)坐標(biāo)數(shù)據(jù)一一發(fā)送給Strip1_Check集合,并依次運(yùn)行Strip1_Check集合,完成25次運(yùn)行則完成25條試劑條表面檢測(cè)工作。第一相機(jī)和第二相機(jī)圖形搜索頁(yè)面的宏代碼都是一樣的。
4.3試劑條表面檢測(cè)
進(jìn)入第一相機(jī)的Strip1_Check的CogToolBlock類工具集合頁(yè)面,該界面放置了試劑條表面檢測(cè)的各類工具。trip1_Check輸入的坐標(biāo)先發(fā)送CogFixtureTool工具,該工具的作用是在輸入的坐標(biāo)基礎(chǔ)上在圖像表面進(jìn)行建立新的坐標(biāo)系供后面的工具使用。因?yàn)榈谝幌鄼C(jī)要進(jìn)行試機(jī)條表面空白處黑斑點(diǎn)、黑色電極白斑點(diǎn)、標(biāo)記、劃傷、上下邊緣切偏檢測(cè)等工作,故會(huì)用到兩個(gè)工具,依次是斑點(diǎn)檢測(cè)工具,CogBlobTool卡尺工具CogCaliperTool。在進(jìn)行空白處斑點(diǎn)及標(biāo)記檢測(cè)時(shí)將CogBlobTool工具設(shè)置成白底黑點(diǎn)、硬閥值(固定)、閥值設(shè)置到合適的數(shù)值即可。在進(jìn)行黑色電極處白斑點(diǎn)和劃傷檢測(cè)時(shí)將CogBlobTool工具設(shè)置成黑底白點(diǎn),其他參數(shù)一樣。卡尺工具是用來(lái)測(cè)量試劑條是否切偏的,它的原理是測(cè)量黑色電極到邊緣的距離,當(dāng)這個(gè)距離超過(guò)設(shè)定的數(shù)值則可認(rèn)定為切偏或者不合格。第一相機(jī)和第二相機(jī)前面的工具集合頁(yè)面都是一樣的,唯一不同的地方是在Strip1_Check集合這個(gè)頁(yè)面,因?yàn)榈谝幌鄼C(jī)要進(jìn)行斑點(diǎn)檢測(cè)和位置檢測(cè)因此要用到斑點(diǎn)檢測(cè)和卡尺工具。而第二相機(jī)只是進(jìn)行左右上下切偏檢測(cè),因此只用到卡尺工具。進(jìn)入第二相機(jī)的Strip1_Check的CogToolBlock類工具集合頁(yè)面。這兩個(gè)頁(yè)面CogFixtureTool工具的設(shè)定都是相同的,只是后面使用的工具不同而已。
4.4數(shù)據(jù)發(fā)送和處理
第一相機(jī)中要進(jìn)行四個(gè)黑色電極的白斑點(diǎn)分析,五個(gè)空白處黑斑點(diǎn)分析,導(dǎo)血槽左右位置檢測(cè),上下邊緣切偏檢測(cè),故用總共用到到四個(gè)斑點(diǎn)分析工具進(jìn)行白斑點(diǎn)分析,五個(gè)斑點(diǎn)分析工具進(jìn)行黑斑點(diǎn)分析,四個(gè)卡尺工具進(jìn)行位置檢測(cè)。第二相機(jī)中只需要檢測(cè)左右上下邊緣是否切偏,故要用到四個(gè)卡尺工具。在完成一次檢測(cè)之后用宏代碼讀取每個(gè)斑點(diǎn)分析工具的Results.GetBlob().Count項(xiàng),該項(xiàng)是一個(gè)整形變量,作用是輸出當(dāng)前斑點(diǎn)工具檢測(cè)到的斑點(diǎn)數(shù)量,在宏代碼中將讀取到的四個(gè)白斑點(diǎn)分析工具和五個(gè)黑斑點(diǎn)分析工具輸出的斑點(diǎn)數(shù)量分別相加,從而得到當(dāng)前試劑片的白斑點(diǎn)數(shù)和黑斑點(diǎn)數(shù),將這兩個(gè)變量添加為發(fā)送項(xiàng)。卡尺工具的輸出變量Results.Item(0).Width項(xiàng)代表的是當(dāng)前檢測(cè)到兩個(gè)邊緣對(duì)之間的距離數(shù)值。將四個(gè)卡尺工具的輸出變量Results.Item(0).Width全部添加為發(fā)送項(xiàng)。從以上可得知第一相機(jī)有六個(gè)發(fā)送項(xiàng)(包括兩個(gè)斑點(diǎn)數(shù)據(jù)發(fā)送項(xiàng),四個(gè)卡尺數(shù)據(jù)發(fā)送項(xiàng)),第二相機(jī)有4個(gè)卡尺數(shù)據(jù)發(fā)送項(xiàng)。界面控制軟件如(圖(1)所示)通過(guò)讀取發(fā)送項(xiàng)獲取VisionPro圖像分析后發(fā)送的數(shù)據(jù),在獲取了這幾個(gè)數(shù)據(jù)后我們就可以在界面控制軟件中進(jìn)行結(jié)果的判斷分析和對(duì)結(jié)果進(jìn)行顯示了。判斷的方法為:當(dāng)黑斑點(diǎn)和白斑點(diǎn)數(shù)據(jù)值兩者都為0時(shí)為無(wú)斑點(diǎn),當(dāng)兩者任何一個(gè)數(shù)值不為0則認(rèn)為為有斑點(diǎn),當(dāng)前試條不合格,并在控制界面上進(jìn)行提示。當(dāng)所有卡尺工具的數(shù)據(jù)都在指定范圍內(nèi)則認(rèn)定當(dāng)前試機(jī)條合格,否則有任何一個(gè)卡尺數(shù)據(jù)超過(guò)了規(guī)定范圍則認(rèn)定當(dāng)前試劑條不合格,并在控制界面上進(jìn)行提示。當(dāng)認(rèn)定當(dāng)前試機(jī)片不存在斑點(diǎn)和所有卡尺測(cè)量數(shù)據(jù)在規(guī)定范圍內(nèi)時(shí)則認(rèn)定當(dāng)前試劑片合格,否則有任何一項(xiàng)不符合規(guī)定都認(rèn)定為不合格。最后將25試劑片的檢驗(yàn)數(shù)據(jù)合并為一個(gè)25位二進(jìn)制數(shù)據(jù)并打包通過(guò)串口發(fā)送給下位機(jī)PLC,PLC在接收到檢測(cè)結(jié)果數(shù)據(jù)后控制氣缸和吸盤(pán)執(zhí)行去廢條和補(bǔ)條工作,從而完成整個(gè)系統(tǒng)工作流程。
5、結(jié)果和結(jié)論
經(jīng)過(guò)多次實(shí)驗(yàn)和改進(jìn),目前我們這個(gè)項(xiàng)目已經(jīng)通過(guò)客戶試用驗(yàn)收且已經(jīng)正式交付客戶使用。設(shè)備達(dá)到且超過(guò)設(shè)計(jì)任務(wù)書(shū)要求的設(shè)計(jì)目標(biāo)和參數(shù),設(shè)計(jì)任務(wù)書(shū)規(guī)定:識(shí)別誤差率:>99%,設(shè)備穩(wěn)定性:>8Hr,生產(chǎn)速度:>360筒/小時(shí)。而我們的系統(tǒng)實(shí)際識(shí)別誤差率:>99.9%,生產(chǎn)速度:>400筒/小時(shí)。系統(tǒng)和設(shè)備最終完整圖片如圖(3)和圖(4)所示。
參考文獻(xiàn):
[1]馬靜靜. 基于VisionPro的汽車儀表檢測(cè). 汽車實(shí)用技術(shù). 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