劉慶宏 王聲文 白彥慶
(大連光洋科技集團有限公司,遼寧 大連116600)
在工業應用方面,機器視覺使機器人、機床具有視覺感知功能,是自動化生產系統,尤其是機器人系統的重要部分之一。機器視覺可以通過獲取數字圖像,并通過適當的算法進行分析和識別,提取有效信息,用于指導生產。常見的機器視覺可以提供諸如零件定位、機器人運動軌跡規劃(障礙物判斷)、工件加工質量判斷和異常情況檢測等功能。機器視覺的加入,使得自動化生產系統可以更加智能地處理工作任務,提高了系統的工作效率,降低了系統對于環境的依賴,拓展了系統的應用領域。
在圖像處理和視覺識別方面,目前較為流行的基礎庫為OpenCV 庫。該庫的全稱是:Open Source Computer Vision Library。OpenCV 是一個開源發行的跨平臺計算機視覺庫,最初由Intel 公司發起并提供支持。可以運行在Linux、Windows、Mac OS 等桌面操作系統以及Android 和IOS 等移動操作系統上。該庫主要由C 和C+ +語言編寫完成,運行效率較高,OpenCV 庫實現了圖像處理和計算機視覺方面的很多通用算法。目前該庫最近版本為3.0 alpha 版。OpenCV 庫的出現和完善,極大地降低了機器視覺方向的學習以及開發的難度。
進行工業軟件開發所采用的基礎庫必須綜合考慮可靠性、穩定性、效率以及成本等問題。OpenCV 作為開源軟件,所有代碼公開,全世界的計算機視覺專家都可以審查其代碼。這保證了該庫的可靠性和穩定性,同時如果需要進一步開發,可以直接在已有源代碼基礎上進行。由于OpenCV 使用運行速度較快的C 和C+ + 語言開發,并且支持多線程運算以及基于OpenCL 的異構運算,充分利用了目前的計算機硬件運算能力,運行效率方面無明顯瓶頸。并且由于OpenCV 庫開源且免費,使用該庫本身成本較低。對比采用MatLab 的視覺識別方案以及類似Halcon 庫等商業化平臺而言,其商業成本基本可以忽略。
采用開源庫開發商業軟件或者作為商業應用,必須慎重考慮開源庫的版權問題。開源并不代表完全免費,也不代表沒有任何約束。目前流行的開源協議有GPL、LGPL、BSD 和MIT 等多種協議,并不是每一種開源協議都允許使用者將開源代碼用于閉源的商業軟件開發。有的協議,如開源軟件中最流行的GPL 協議,甚至要求任何基于遵循該協議的開源軟件所做的修改或應用,也要遵循該協議,不允許修改后和衍生的代碼作為閉源的商業軟件發布和銷售,即GPL 協議的開源傳染性。這方面比較著名的事件是思科公司的WRT54G 路由器事件,該事件發生于2003 年前后,該路由器的固件被發現是基于Linux 開發而成,而Linux遵循GPL 協議,因此思科公司不得不開放了該型號路由器的固件源代碼。雖然后來證明該舉動甚至擴大了該款路由器的知名度和銷售量,但對于絕大多數商業公司而言,開放產品源代碼都是不可接受的,因此在選擇開源庫用于開發時,必須考慮到開源版權的約束,避免潛在的損失。OpenCV 的絕大部分模塊遵循較寬松的BSD 協議。BSD(berkeley software distribution)協議對商業應用較為友好,允許在商業軟件中使用甚至修改遵循該協議的代碼或庫,而商業軟件本身代碼無須開源,即允許閉源商業化應用,僅要求保留原有開源版權聲明,因此應用OpenCV 庫進行商業開發限制較少。但要特別注意,由于OpenCV 中包含的一些特定算法,可能是專利算法或收費算法,是不遵循BSD 協議的,比如應用于人臉檢測的Ada -boost 算法等,不能直接免費用于商業軟件,實際使用中要注意辨別。
應用于實際工業生產環境的視覺識別軟件的實現通用流程如圖1。實際應用中,處理流程按照從左到右的順序執行。其中OpenCV 庫提供的功能,可以覆蓋除圖像獲取部分之外的所有模塊。

首先,需要從工業攝像頭等設備中獲取圖像信息。從軟件設計的角度講,通常,工業攝像頭可以抽象為流設備,從其驅動中可以讀取到連續的圖像幀。機器視覺的第1 個模塊就是實現從不同的攝像頭驅動中獲取圖像信息并轉化為OpenCV 支持的圖像數據結構的模塊。目前常見的工業相機接口有GIGE Vision、Camera Link、USB 和1394 等接口,OpenCV 提供了原生的USB攝像頭以及部分品牌的GIGEVision 相機的支持。實際上,由于通常情況下工業攝像機的廠商會提供設備驅動,因此圖像獲取部分無須OpenCV 的特別支持。
從原始設備中獲取的圖像信息,包含噪聲、陰影、反光等干擾,影響有效信息判斷。需要進行圖像增強,如濾波、平滑、開閉、均衡化等圖像操作,去除無效干擾信息,加強有效信息。同時,由于很多特征分析算法,都是僅支持單通道圖像(黑白圖像),甚至針對二值化圖像,這里也需要針對具體需求進行圖像的轉換工作。這些工作均由預處理模塊完成,OpenCV 提供了常見的圖像操作的支持。
經過預處理后的圖像,需要交給特征分析模塊進行特征的分析提取工作。目前圖像識別方面主要使用的特征包括顏色、紋理、形狀等,針對不同的特征,有不同的提取算法,需要根據工作環境以及識別目標進行具體分析。經過特征分析后,獲得的是有用的信息描述,而不再是一張圖像。例如輪廓特征提取,獲取到的是輪廓上所有點的坐標順序描述鏈表。
提取到的特征需要與用戶事先設定的目標特征進行對比,符合用戶要求的特征給予通過,否則放棄。特征對比,針對不同的特征分析,有不同的特征對比算法,如針對輪廓,通常可以采用矩匹配。較有效的方法如Hu 不變矩,該方法對輪廓的縮放和旋轉不敏感,可以在實際應用中得到較好的匹配結果。OpenCV 提供了常用的特征提取和匹配算法。
通過特征提取對比等工作后,從原始圖像中可以獲取到零個至若干個符合結果。所有的結果均處在圖像坐標系下,以像素為單位。該信息不能直接用于驅動生產,需要通過畸變矯正、坐標變換等工作將結果的坐標信息(如位置,角度等)從圖像坐標系變換到空間坐標系下。該項工作的絕大部分函數在OpenCV 中也有支持。
以上流程是視覺識別的基本工作流程,實際上,還需要例如識別目標特征提取存儲、現場光照補償等其他工作進行保障才能完成機器視覺的全部功能。
視覺識別軟件作為完整的商業軟件,僅僅提供算法接口實現圖像識別的基本功能是不夠的,還需要有諸如用戶操作界面、數據庫保存和索引等諸多外圍功能,協助用戶完成視覺識別的調試、監控等工作。
OpenCV 提供了跨平臺的通用界面接口HighGUI(high-level graphical uer iterface)模塊。該模塊提供了諸如圖像文件讀入,圖像窗口顯示,鼠標事件等操作支持,并提供滑動條,按鈕開關等GUI 控件。但該模塊僅提供較為基礎的界面功能,可以作為簡單的可視化工具在OpenCV 學習及軟件開發調試過程中使用,并不適合作為商業化軟件的界面。實際上,作為軟件工程的重要組成部分,GUI 界面通常是有專門的庫支持的,如微軟公司的MFC 庫以及最初由奇趣公司發起的QT 等。為了配合OpenCV 構建跨平臺的視覺識別軟件,這里采用了基于LGPL 開源協議版本的QT 作為界面庫進行用戶操作界面的開發以及數據庫操作。
下面以筆者公司實際生產環境下的機器人工件識別解決方案為例,介紹視覺識別工作的流程。
首先,基于設備布局走線、工業環境可靠性、成本等因素綜合分析,解決方案的工業攝像頭選擇了支持POE(power over ethernet)供電的GIGE Vision 接口的工業相機,該接口物理形式與千兆以太網兼容,并能通過RJ45 接口的標準網線同時實現信號的傳遞與電源供給,可以實現從設備到主機僅用1 根線纜連接的最簡布置。同時該接口無需主機有額外的板卡設備,并且相對于USB 等接口有較遠的傳輸距離和更高的可靠性。該方案以較低的成本和復雜度滿足了工業需求。
從工業攝像頭獲取的原始圖像,經過預處理、特征提取和特征匹配等工作,最終獲取有用的信息供機器人拾取使用,由于圖像整體的特征提取流程與目標部分的處理有類似之處,為清晰起見,這里以識別目標的提取處理為例。




如圖2 為通過工業攝像頭獲取的靜態圖像中截取的目標模板部分原始圖像,該圖像為8BIT 灰度圖像。視覺識別以此為參照,凡是符合該模板特征的部分,均識別為工件。
圖3 是經過平滑去噪以及開閉操作后的圖像,經過以上操作,圖像的背景噪聲得到了較好的抑制,并且沒有丟失邊緣等關鍵信息。
圖4 為經過閾值化操作之后的二值圖像,后續的特征提取和分析操作均基于此二值圖像。
圖5 為針對圖4 的二值圖像進行輪廓提取后得到的關鍵輪廓特征,這里采用了工件外輪廓以及4 個最大的螺釘孔輪廓作為特征,以后的識別均以此特征作為目標。

圖6 為實際匹配效果,在工件拾取平臺上的16 個空位中放置了8 個工件,放置角度均不一致,位置也沒有精確對齊,通過圖像的輪廓特征比對,最終實現了工件的識別和空位的排除,對于識別出的工件,在圖像中繪制了其最小包圍盒以及軸對齊包圍盒為標志。這里運用了Hu 不變矩匹配,但同時考慮到Hu 不變矩對于輪廓縮放不敏感的問題,綜合比較了輪廓的周長和面積,最終取得了滿意的效果。
OpenCV 計算機視覺函數庫,提供了常用的視覺識別算法,并且遵循BSD 開源協議,除了作為科研樣本,同樣也可以用于工業軟件開發,并可以取得較好的識別效果。
[1]Gary Bardski,Adrain kaebler.學習OpenCV 中文版[M].于仕琪,劉瑞禎,譯.北京:清華大學出版社,2009.
[2]Mark S Nixon.特征提取與圖像處理[M].李實英,楊高波,譯.2 版.北京:電子工業出版社,2010.
[3]章毓晉.圖像處理和分析基礎[M].北京:高等教育出版社,2002.