隨著自動化程度的提高,工業(yè)成像和機器視覺應用在工業(yè)控制中變得越來越普遍,以支持提高生產(chǎn)率的動力。為了實現(xiàn)提高效率的承諾,圖像處理系統(tǒng)需要高速運行,以確保節(jié)拍時間,即每個新單元開始生產(chǎn)之間的平均時間,盡可能短。
同時,市場上出現(xiàn)了高分辨率相機,能夠進行高清晰度記錄,并且可以支持生產(chǎn)線上組件的極細細節(jié)成像。由于使用千兆以太網(wǎng),它們能夠高速傳輸這些高質(zhì)量圖像。因此,圖像處理軟件的高性能至關重要。
這表明在硬件中實現(xiàn)關鍵算法,但工業(yè)圖像處理的靈活性至關重要。不同類型的組件和組件需要特別關注某些視覺特征。組裝后對PCB的檢查通常是檢測焊道中的斷裂和擠壓,指示可能的故障源。檢查發(fā)動機歧管可能會尋找未對準或缺失的緊固件。雖然這些任務可能使用通用模塊,例如邊緣檢測和模式匹配來識別感興趣的區(qū)域,但每個模塊都需要自己的一組圖像處理程序來執(zhí)行完整的檢查任務。
靈活性將變得更加重要當調(diào)用圖像處理子系統(tǒng)來協(xié)助設置自動化時。圖像處理不僅對于檢查而言是必要的,而且有助于定位機器人系統(tǒng)并對其進行訓練。傳統(tǒng)上機器人使用精心計算的運動輪廓進行編程,而現(xiàn)在他們開始使用視野內(nèi)的攝像機和物體來對齊自己并確定需要拾取和處理的組件。要運行此類映像應用程序,開發(fā)人員需要一個功能工具包,可以在平臺上輕松組裝,具有實時運行算法所需的性能。
可視化工具包,提供一組基本功能包括工業(yè)在內(nèi)的多種形式的圖像處理以OpenCV庫的形式提供?,F(xiàn)在,開源OpenCV庫已經(jīng)成為許多領域中圖像處理的流行選擇,現(xiàn)在已達數(shù)百萬行代碼。到2016年,SourceForge存儲庫記錄了超過1300萬次的庫下載。
OpenCV涵蓋了圖像處理和機器視覺應用所需的許多功能,從基本的像素級操作,如閾值處理到特征提取基于深度學習等機器學習技術進行對象識別。它的功能可以從C/C ++,Java和Python等語言中獲得。
從C ++訪問,OpenCV使用“cv”命名空間中的類和函數(shù)提供服務。例如,要檢索存儲的圖像和顯示,開發(fā)人員首先通過基于cv:Mat類創(chuàng)建對象來創(chuàng)建合適的圖像數(shù)組。函數(shù)cv :: imread()用于賦值,將圖像數(shù)據(jù)插入到使用cv :: Mat聲明的數(shù)組中:
cv :: Mat圖像(height,width,pixel_type);
image = cv :: imread(“image.bmp”);
鏡像圖像的簡單操作可以通過聲明一個新的Mat對象來實現(xiàn) - 例如“鏡像” - 并發(fā)出命令cv :: flip(image,mirrored,1)。第三個位置使用的整數(shù)決定了圖像翻轉(zhuǎn)的軸。
Mat數(shù)組提供對圖像數(shù)據(jù)的低級別像素訪問,以支持掃描區(qū)域以查找屬性(例如最小值或最大值)的算法,并支持直接操作數(shù)據(jù)。但是該庫還實現(xiàn)了在機器視覺中有用的更高級過濾功能,例如邊緣檢測過濾器。例如,cv :: Sobel和cv :: Laplacian調(diào)用實現(xiàn)了對圖像的濾波器,該圖像通過將圖像數(shù)據(jù)與3×3或更大的矩陣進行卷積來檢測像素亮度的突然變化。在源陣列上執(zhí)行過濾器會生成包含可能邊緣的數(shù)組。較大的內(nèi)核可用于抑制高頻噪聲并以更高的置信度產(chǎn)生實際邊緣。使用Canny算子等函數(shù)進行閾值處理可以提高結果的整體質(zhì)量。
可以使用cv :: HoughLinesP等函數(shù)提取圖像中檢測到的行,并用于支持對其進行操作的算法在源圖像中找到的形狀。這些可用于確定是否存在預期在圖像中的物體,例如發(fā)動機殼體上的緊固件。
雖然OpenCV是為計算效率而設計的,但是高分辨率的數(shù)據(jù)流量相機可以挑戰(zhàn)純軟件實現(xiàn),甚至是那些在高性能多核SoC上運行的軟件。 OpenCV不僅支持在通用處理器上實現(xiàn)其功能,還支持在圖形處理單元(GPU)甚至自定義硬件上實現(xiàn)其功能。保持基于軟件的控制的靈活性,同時利用硬件實現(xiàn)下可實現(xiàn)的性能的一種方法是采用可編程邏輯。 Xilinx Zynq-7000提供了一種在單個SoC中訪問多核CPU和可編程邏輯的便捷方式。
Zynq-7000平臺將一個或兩個ARM?Cortex?-A9處理器與靈活的硬件組合在一起。嵌入式現(xiàn)場可編程門陣列(FPGA)以及支持高速I/O的外設。 Zynq-7000器件支持兩種形式的FPGA架構:一種基于Xilinx Artix-7架構,另一種基于高性能Kintex-7架構。所有這些都采用28 nm CMOS工藝實現(xiàn),具有高性價比的高邏輯和存儲密度。
除了基于查找表概念的靈活可編程邏輯外,Artix和Kintex架構均提供數(shù)字信號處理(DSP)資源設計用于有效處理濾波器和卷積。使用片式架構,DSP資源可以調(diào)諧到器件,Kintex提供比Artix更高的DSP引擎與位級邏輯比。超過2000條互連線將處理器復合體連接到可編程結構,有助于支持在處理模塊之間傳輸圖像數(shù)據(jù)所需的高帶寬。
使用Zynq-7000平臺的設計人員可以使用高級別Vivado Design Suite中的綜合(HLS)技術將算法編譯成可編程硬件。傳統(tǒng)的FPGA開發(fā)是圍繞硬件描述語言(HDL)構建的,例如Verily和VHDL。盡管這些HDL分別與C和Ada具有語法上的相似性,但它們的運行細節(jié)水平低于大多數(shù)軟件開發(fā)人員所熟悉的程度。 Verilog和VHDL基于位級操作和組合邏輯。 HLS技術提供了將用C ++等語言表達的算法轉(zhuǎn)換為硬件的能力。
HLS綜合利用面向?qū)ο蟮腃 ++基礎,讓程序員識別并發(fā)機會,在代碼中進行低級調(diào)度,為合成引擎提供如何從源代碼生成硬件的方向。例如,創(chuàng)建用于在FPGA架構上部署的嵌套矩陣乘法運算的程序員可以識別可以在Vivado HLS實現(xiàn)工具中分配給硬件及其相關調(diào)度的每個循環(huán)的處理模塊。在圖1中,Row,Col和Product標識符表示輸出塊。圖2顯示了Row塊及其包含的Col塊的擴展,以及用于在塊之間移動數(shù)據(jù)的兩個區(qū)域??刂屏餮h(huán)顯示合成操作的延遲。

圖1:適用于FPGA實現(xiàn)的嵌套循環(huán)代碼。

圖2:在Vivado中查看的嵌套循環(huán)部分的控制流程圖。
為了提高性能,設計人員可以展開循環(huán)以允許更多功能并行發(fā)生(如果可用的DSP節(jié)點和查找表)硬件可用。對于圖像和視頻處理工作,Vivado環(huán)境包括許多提供直接支持的庫。
HLS成像庫包括與OpenCV imgproc模塊非常接近匹配的函數(shù)。例如,雖然軟件中的OpenCV將使用cv :: Mat聲明來創(chuàng)建在內(nèi)存中保存圖像所需的數(shù)組,但是有一個相應的模板類,稱為hls :: Mat <>,它提供相同的核心功能。聲明一個名為image的數(shù)組的等效調(diào)用將顯示為:
hls :: Mat image();
而不是從磁盤讀取圖像,它通常使用hls :: stream <>數(shù)據(jù)類型將處理器復合體傳遞到FPGA架構中。在處理器空間和FPGA中處理圖像之間存在關鍵差異。硬件結構是在假設將存在以像素流形式通過邏輯元件的加速操作流水線的情況下編程的。因此,依賴于對圖像數(shù)據(jù)的隨機訪問的算法需要轉(zhuǎn)換為可以作用于線性流的形式。
流式訪問也意味著如果兩個硬件映射函數(shù)需要圖像,它需要重復。這通常使用hls :: Duplicate函數(shù)執(zhí)行。另一個不同之處在于浮點值的處理。 OpenCV本身支持浮點運算,但這在典型FPGA的DSP資源上通常效率低下。將所有數(shù)據(jù)類型轉(zhuǎn)換為定點等價物然后在將數(shù)據(jù)傳遞回軟件例程后使用縮放轉(zhuǎn)換以保持與核心OpenCV函數(shù)的兼容性是有意義的。
硬件對函數(shù)的適用性可能決定應用程序或子系統(tǒng)的分區(qū)。 Zynq-7000平臺上與OpenCV兼容處理的參考設計之一是實現(xiàn)角點檢測和創(chuàng)建覆蓋圖,顯示圖像中的所有角落。其結構如圖3所示。

圖3:快速應用示例的數(shù)據(jù)流結構。
與許多人一樣機器視覺應用程序,實現(xiàn)采用管道的形式。第一個功能是灰度轉(zhuǎn)換,可以通過從RGB源提取綠色通道來近似。然后進行角點檢測,然后使用模塊在圖像上繪制角點。
應用程序在硬件使用方面的問題是在目標圖像中繪制疊加層需要隨機訪問圖像陣列,這是面向流的硬件實現(xiàn)不容易支持的。設計人員可以采用的方法是在FPGA和處理器復合體之間劃分功能。綠色通道提取和角點檢測卷積很容易在硬件中實現(xiàn)。一旦通過Zynq-7000的AXI4接口將圖像流回處理器存儲器,就可以在圖像上執(zhí)行角圖繪制功能,這些圖像的計算密集度較低。
涉及數(shù)字的更復雜的圖像處理系統(tǒng)執(zhí)行提取,識別和其他任務的協(xié)作模塊可能涉及比固定延遲流水線更復雜的架構。例如,不同的情況可能需要對圖像進行更密集的處理。例外情況可能會觸發(fā)對部分數(shù)據(jù)的更深入分析。這些考慮使調(diào)度變得復雜。最簡單的選擇是在處理器復合體上運行自由選擇的函數(shù),但如果某些函數(shù)是計算密集型的,則存在整體系統(tǒng)性能受損并且控制例程將錯過關鍵期限的風險。 FPGA的區(qū)域可以保留用于計算密集型功能,但除非留出大部分,否則無法保證資源在某些條件下可用。所需要的是在處理器復合體和其他加速器之間分配功能的動態(tài)方法,例如能夠在FPGA架構上運行的加速器。
嵌入式多核構建模塊(EMB2)庫提供動態(tài)所需的支持預定的異構系統(tǒng)。 EMB2庫可從GitHub獲得,為各種嵌入式實時應用程序提供一組設計模式,這些應用程序需要在GPU,GPU和可編程硬件上實現(xiàn)高性能計算支持,以及支持OpenCV等環(huán)境的C ++包裝器。
EMB2庫符合多核任務管理應用程序編程接口(MTAPI),由多核協(xié)會定義,以確??绠悩嬘嬎闫脚_的高可移植性。 MTAPI體系結構將工作負載組織為一組任務和隊列,后者用于實現(xiàn)數(shù)據(jù)元素流的處理流程。任務提供了將多個工作包彼此同步所需的組織。
EMB2和MTAPI的一個關鍵方面是它們支持能夠?qū)ν蝗蝿帐褂貌煌瑢崿F(xiàn)的概念。如果構成庫的一部分的調(diào)度程序確定硬件結構中有資源可用,則它將運行能夠?qū)嵗匾壿嫷拇a版本,并允許數(shù)據(jù)流入和流出。如果處理器上有更大的空間,則可以標記純軟件版本以備運行。開發(fā)人員只需確保兩個表單都可供調(diào)度程序調(diào)用。結果是高性能應用程序的靈活執(zhí)行環(huán)境和適合OpenCV架構的應用程序。
結論
由于靈活的開源庫和平臺的結合提供高速微處理器和可編程硬件,現(xiàn)在可以實現(xiàn)適用于工業(yè)物聯(lián)網(wǎng)的高效機器視覺應用。
-
機器人
+關注
關注
213文章
30378瀏覽量
218696 -
機器視覺
+關注
關注
163文章
4685瀏覽量
124720 -
工業(yè)物聯(lián)網(wǎng)
關注
25文章
2478瀏覽量
67052
發(fā)布評論請先 登錄
機器視覺系統(tǒng)在注塑行業(yè)的應用
微信精選:圖像處理軟件在機器視覺系統(tǒng)中怎么工作?
四元數(shù)視覺:CCD機器視覺系統(tǒng)運行原理及工作方式
CCD機器視覺系統(tǒng)運行原理及工作方式
CCD機器視覺系統(tǒng)有哪些運行原理及工作方式?
深圳工業(yè)機器視覺系統(tǒng)有哪些組成部分?
機器視覺系統(tǒng)對工業(yè)相機有哪些要求
如何使用DSP實現(xiàn)機器視覺的道路圖像采集和處理系統(tǒng)的設計
凌華科技推出機器視覺應用的高速數(shù)字圖像采集卡,適用于PCB檢測等
機器視覺在工業(yè)市場的應用 基于機器視覺的雙目圖像采集處理實例
4G物聯(lián)網(wǎng)網(wǎng)關應用于智慧污水處理系統(tǒng)
適用于機器視覺應用的智能機器視覺控制平臺
機器視覺系統(tǒng)中工業(yè)相機的常用術語解讀

適用于工業(yè)物聯(lián)網(wǎng)的高效機器視覺應用的圖像處理系統(tǒng)設計
評論