在本應用說明中,您將學習如何在VisualApplets 中設計與建立影像處理 應用程式(即 Applet),以及如何在幀擷取卡上使用它。您還將 學習如何透過 microDisplay 和Framegrabber API 在執行期間使用此 Applet,以及 如何在此軟體中設定 Applet 的參數。 您可在以下連結找到關於如何 在 microDisplay 中設計、建置及於執行期間使用小程式的介紹: 《入門指南》中。在本應用說明中,您將透過索貝爾邊緣濾波器應用的範例,了解上述 Applet 開發與使用的各階段。
工作流程如下:
-
在 VisualApplets 中設計 applet。
-
在 VisualApplets 中模擬 applet 並執行設計規則檢查 (DRC)。
-
建置 applet。
-
針對 mE5 平台:燒錄 applet。
-
透過 microDisplay 或 Framegrabber API 在硬體上使用 applet。
applet 的設計階段是在 VisualApplets 中進行。若要開啟 VisualApplets,請按一下 VisualApplets.exe 表格中顯示
bin VisualApplets 安裝目錄中的資料夾,或是 Windows 開始功能表中的 VisualApplets 程式圖示,或是桌面上的圖示。
-
首先會開啟 VisualApplets 主視窗,且未載入任何專案。
-
按一下 File+New ( Ctrl+N ),或使用 圖示列中的 圖示。此時會開啟 視窗,讓您指定專案名稱、目標硬體平台以及目標執行階段。您隨時可以之後再變更這些設定。
-
若要跟隨此處的範例,請使用下列設定:
-
按一下 確認您的設定。
VisualApplets 現在會啟動一個新專案,您會在程式視窗中央看到一個空白的設計視窗。右側的 標籤頁會顯示目前專案的相關資訊,例如專案名稱、目標硬體、目標平台等。
在 VisualApplets 中,影像處理作業是以算子(operator)來表示。您可以在 VisualApplets 設計視窗右側的 中找到所有這些算子。您可以使用拖放方式輕鬆地將算子放置到設計視窗中。
算子在設計中的執行個體稱為模組(module)。算子可以具有輸入連接埠和輸出連接埠。設計中的算子(即模組)可以使用這些連接埠進行連接。模組之間的連接稱為連結(link),在設計視窗中以箭頭表示。這些模組與連結代表了影像(或信號)處理管線。因此,作業的順序是由模組的順序所決定。
算子與連結具有屬性,這些屬性描述了與目前影像處理管線相關的設定,例如影像尺寸。若要檢視與編輯這些屬性,請按兩下算子。算子的屬性會在 下的算子說明文件中詳細說明。
此範例實作了 Sobel 邊緣濾波器演算法。
在 VisualApplets 設計範例庫中,有適用於邊緣濾波與其他影像處理應用的「隨裝即用」範例。您可以在以下位置找到這些設計範例: Examples\Processing 位於您的 VisualApplets 安裝目錄中,並附有對應的文件,請參閱 Processing Examples。您可以將這些範例設計用作您自訂應用的基礎。
為了實作這個範例 Sobel 濾波器設計,請在 中尋找運算子,將其拖曳至設計中,並依照 Getting Started 一節所述使用連結將其連接。
您稍後可以重新命名模組,以便在設計中獲得更好的總覽,並在執行階段中更妥善地使用。
只要合適,請使用 HierarchicalBoxes 來組織設計,以獲得更好的設計總覽。
並且別忘了不時儲存設計。
此應用筆記中的範例設計由以下元件組成,如以下圖示所示:
-
一個 Camera Link 灰階相機介面
-
一個影像緩衝區
-
具備 x 和 y 方向邊緣濾波功能的 Sobel 邊緣濾波器模組(基於位於
SobelMultiGradient.vad下的Examples\Processing\Filter\EdgeDetection\Sobel_Multi_GradientVisualApplets 安裝目錄中的範例) -
一個可調整的二值化閾值以及一個縮放運算子,以便在執行階段更好地在顯示器上將二值化影像視覺化
-
傳送至 PC 的 DMA。
您可以在設計中使用 CoefficientBuffer 作為影像的模擬來源,而非使用相機擷取的影像。透過運算子 SourceSelector,您可以在 VisualApplets 中以及執行階段期間選擇處理管線的影像輸入來源。
若要為運算子與連結設定參數,您可以透過雙擊每個 元件來編輯其參數。
連結具有若干屬性,這些屬性定義了經處理影像的特性, 例如最大影像尺寸、影像協定、位元寬度,以及一項 與最大可用頻寬相關的參數:並行度 (即在一個設計時鐘週期內傳輸的像素數量)。 若這些連結 已連接至特定運算子(請參閱對應的運算子文件), 例如相機介面運算子,您即可根據需求 編輯並調整這些屬性。
您選擇的最大影像尺寸和並行度越高, FPGA 資源消耗就越大。因此,Basler 建議僅將 這些數值設定為必要範圍內,以節省 FPGA 資源。連結 屬性僅能在設計階段於VisualApplets 中進行變更。
運算子屬性有兩種類型: 靜態 與 動態。您僅能在 設計階段於VisualApplets 中變更靜態參數,而動態參數則可在 設計階段及執行階段進行變更。請參閱下方的螢幕截圖,其中展示了運算子 IS_GreaterThan 的靜態 與動態參數範例。
在此範例設計中,請設定下列參數:
- 運算子 IS_GreaterThan:
-
將參數 Number 設定為 600。
這會識別邊緣的灰階。如果您想找出邊緣的灰階,可以在 IS_GreaterThan 運算子之前設定模擬探棒 (Simulation Probe)、執行模擬,並放大包含邊緣的像素以查看其灰階。這是一個動態參數,您可以在執行階段進行更改。
- 運算子 SCALE:
-
將參數 ScaleFactor 設定為 255。
這會增強邊緣的可見性。這是一個動態參數。不過,為了節省 FPGA 資源,您可以將此參數設定為 Static。
在執行階段期間,您可以變更動態參數。常見的使用情境是:您的設計中包含許多運算子,且您需要為設計中的許多不同運算子變更相同的參數(例如影像尺寸)。
程式庫 Parameters 提供的運算子只需控制一個參數,就能存取設計中的不同模組參數。此外,這些運算子還能讓存取參數顯示在特定的階層層級上。這些選項可讓您在執行階段更容易進行參數設定。範例設計 Sobel_Filter.va
(請參閱 圖 189「範例設計實作 Sobel_Filter.va'」使用轉譯與參照參數,以便在階層層級輕鬆存取影像寬度和高度、影像來源選擇器、閾值與比例因子
。為此,請建立一個空的 HierarchicalBox,將其命名為 ,並將對應轉譯與參照參數的
DisplayHierarchy 參數設定為 。您可以在對應的文件中找到有關 Parameters 程式庫的詳細說明,請參閱 Library Parameters.
在設計階段中,模擬來源和探棒非常有用。使用模擬來源,您可以在幾個 momen 內載入 Test Images,並檢查處理管線中每個連結上的處理後影像。例外狀況:訊號無法模擬。此外,模擬會執行設計規則檢查第 1 級,以檢查實作的形式正確性。模擬結果與執行階段的結果相同。您可以在 VisualApplets 的圖示選單中或文字選單的 Analysis 下找到模擬來源和探棒。如需模擬來源和探棒用法的詳細說明,請參閱 'Simulation' 下的詳細說明。
在 圖 189「範例設計實作 Sobel_Filter.va' 您可以在範例設計的模擬來源中看到已載入的 Test Image
Sobel_Filter.va。在閾值之後和 DMA 之前,您可以看到目前處理步驟的結果。
完成實作後,建議執行設計規則檢查第 1 級和第 2 級。若要執行設計規則檢查第 1 級和第 2 級,請選取 Analysis+Design Rules Check Level 1 and 2,或使用圖示列中的圖示 。
設計規則檢查第 1 級會回報實作中的形式錯誤及其在設計中的確切位置。在將設計轉譯為硬體 applet 之前,您必須修正這些錯誤。
設計規則檢查第 2 級還會提供有關設計中所使用估計 FPGA 資源的資訊。利用此資訊,您可以檢查是否有足夠的 FPGA 資源可用於您的影像處理實作。如果資源超過其中一個 FPGA 資源的 100%,您需要重新設計實作以節省資源。
在 圖 192,「範例設計的設計規則檢查 1 與 2
Sobel_Filter.va' 顯示了設計規則檢查 1 與 2 的結果:設計完全正確,大約使用了 36% 的可用尋找表 (Lookup Tables)、22% 的正反器 (FlipFlops)、15% 的區塊 RAM (Block RAM) 以及 2% 的可用嵌入式 ALU。您可以在以下位置檢視詳細的概覽,了解設計中每個元素消耗了多少 FPGA 資源(請參見 圖 193,「FPGA 資源估算」)於 Analysis+FPGA 資源估算
硬體 applet 建置程序必須在正確安裝 Xilinx 工具的情況下才能執行。在 https://docs.baslerweb.com/visualapplets/installing-visualapplets#which-xilinx-toolchain-and-version-for-which-frame-grabber-platform 下方,您可以找到詳細的概覽,了解哪些 Xilinx 版本適用於您的擷取卡平台。在此範例設計中 Sobel_Filter.va
選定了 microEnable 5 marathon VCL 平台。因此,適用 Xilinx ISE 14.7 版或 2016.1 至 2020.1 之間的 Vivado 版本。
現在您已經完成了範例設計 Sobel_Filter.va 並且想要將設計轉譯為硬體 applet。對於此轉譯程序(稱為 build ),您需要選取正確的 Xilinx 建置設定。開啟 設定+Build Settings,並從您的檔案系統中選取對應 Xilinx 版本的批次檔 settings64.bat (建議使用:Xilinx Vivado 2018.2),然後按一下「確定」確認。您可以在以下位置找到編輯建置設定的詳細說明: 「建置設定」.
VisualApplets 現在會使用 Xilinx 工具將應用程式轉譯為 FPGA 位元串流 (bitstream),也就是 程式 或 applet。
此程序的時間長度取決於設計的複雜度。高度複雜設計的建置可能需要數小時。對於此範例實作
Sobel_Filter.va,建置時間約為 15 分鐘。建置成功後,applet 即完全產生。applet 的名稱
(*.hap 檔案)與設計檔案的名稱相同
(*.va): Sobel_Filter.hap
若要在擷取卡上的硬體中執行 Applet,系統必須安裝可程式化(V 系列)擷取卡(硬體)。此外,PC 上必須安裝 Framegrabber SDK 軟體。針對 microEnable 5 marathon VCL 的這個範例 Applet,支援的最新 Framegrabber SDK 版本為 5.7。
如果您像本範例一樣使用 microEnable 5 marathon 擷取卡,則需要使用 microDiagnostics 將新的 Applet 燒錄至擷取卡中。
如果您要在 microEnable IV 擷取卡或最新 CXP 12 系列擷取卡上使用新的 Applet,請直接略過此章節。
若要燒錄擷取卡,請執行下列步驟:
若要測試您的 Applet Sobel_Filter.hap 並設定一些初始
參數,請使用 microDisplay 程式。載入 Applet 需要執行下列步驟:
-
儲存 Applet(此處:
Sobel_Filter.hap)於Hardware Applets\<your frame grabber>(此處: mE5-MA-VCL)於 Framegrabber SDK 安裝目錄中。 -
從
bin資料夾啟動 microDisplay Framegrabber SDK 安裝目錄。 -
在 microDisplay 中,於 下方選擇您要使用的擷取卡。選定擷取卡後,所有可用的 Applet 將立即顯示。
-
選擇您要使用的
*.hap您要使用的檔案(此處:Sobel_Filter.hap)連按兩下。
載入 Applet 後,您可以在 microDisplay 中看到參數樹狀結構和影像擷取視窗。以下顯示載入至 microDisplay 中的 Applet
Sobel_Filter.hap 的畫面擷取畫面。
左側顯示的是參數樹。這些參數在 VisualApplets 的設計階段相當於運算子名稱。為運算子命名時採用良好的命名方式非常重要,這樣才能找到您想要調整以進行擷取的正確參數。動態參數可在執行階段進行調整。動態參數分為兩種:僅能在擷取開始前調整的參數(例如 DMA dimensions),以及甚至能在影像擷取期間進行調整的參數(例如運算子 IS_GreaterThan 的閾值)。
在此範例中,您使用來自模擬器來源的影像執行影像擷取,並將二值化閾值設為 150。如果您在 VisualApplets 的設計階段中整合了 Parameters 庫的參數,您就可以在參數樹中的 階層層級下設定所有相關的動態參數。否則,您需要逐一瀏覽不同的階層層級,以找到我們要設定的正確參數。
在此範例中,前往 階層層級並將其展開:
-
在 上按一下滑鼠右鍵。隨後,您可以選取您要用於影像擷取的範例影像。
-
按一下 來載入此影像。
-
將 ImageSource selector 參數設為 Simulator,並將 Binarization Threshold 設為值 150。
-
將影像尺寸設為 1024x1024 像素。
設定好這些參數(或對您的 Applet 而言的所有相關參數)後,您就可以開始擷取。在這裡,您可以選擇連續擷取、擷取序列或單一影格。若要停止連續擷取,請按一下「停止」按鈕。若是多處理程序設計,您可以分別啟動和停止單一處理程序的擷取。
如需 Applet 設定與使用 microDisplay 進行擷取的詳細說明,請參閱 https://docs.baslerweb.com/frame-grabbers/what-is-micro-display-x。
您也可以選擇不要在 microDisplay X 中執行 Applet 設定與擷取,而是將其整合至您自己的 SDK 環境中。在本節中,您將找到影像擷取與設定相關 SDK 元件之基本功能的介紹。
作為 C++ SDK 的基礎,您可以使用 VisualApplets 內部 SDK 程式碼產生器,您可以在圖示選單中或 VisualApplets 的 Build+Generate SDK Example 下找到它。此功能會自動產生對應的 CMake 檔案與 VisualStudio 專案檔案,您可以將其用作 SDK 程式碼的基礎。
專案檔案中產生的 C++ 程式碼 vasFgProject.cpp
包含下列程式碼元件:
-
圖形擷取卡:初始化
定義擷取循環次數、定義應屬索引、呼叫函數
Fg_Init("Sobel_Filter.hap", boardIndex)來啟動 Applet。 -
為擷取緩衝區配置記憶體。
函數:
Fg_AllocMemEx(fg, ..., ...) -
圖形擷取卡:取得與設定 Process0 的參數 (Get* and Set*)
函數:
Fg_setParameterWithType(fg, ..., ..., ...)進行明確的生命週期管理即呼叫Fg_getParameterWithType(fg, ..., ..., ...)此處列出了設計中包含的所有參數。為了便於檢視,Basler 建議刪除所有在執行階段不需要調整的參數。
-
建立顯示畫面
函數
CreateDisplay() -
針對每個現有的連接埠,在 applet 和相機上啟動擷取:
函數:
Fg_AcquireEx(fg, 0, nrOfCycles, ...,...); -
擷取影像:
函數:
Fg_getLastPicNumberBlockingEx(fg, ..., ..., ..., ...); -
停止擷取
功能
Fg_stopAcquireEx(fg, .., .., ...) -
關閉顯示
函數
CloseDisplay(...); -
釋放緩衝區的記憶體
函數
Fg_FreeMemEx(fg, ..); -
擷取卡取消初始化
函數
Fg_FreeGrabber(fg);
如需 SDK 函數的詳細說明與解釋,請參閱 https://docs.baslerweb.com/frame-grabbers/sdk/basler__fg_8h.html
如需 Framegrabber API 的簡介,請參閱 https://docs.baslerweb.com/frame-grabbers/framegrabber-api.html。
您可以將產生的 SDK 範例程式碼整合至較大的 SDK 環境中,以進行擷取卡(預先)處理之影像的後續軟體處理。














上一頁

