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