如何使用Vision Acquisition Software搭配GigE相機進行影像擷取

更新 Jul 7, 2022

環境

軟體

  • LabVIEW

驅動程式

  • Vision Acquisition Software

本教程將延續第一部分中有關GigE Vision相機與Vision Acquisition Software一起使用的討論。在這一部分中,我們將討論影像擷取硬體和軟體的要求。接著,我們將使用LabVIEW API進行擷取,首先從相機擷取影像,控制相機的設定,然後設置相機觸發。

要了解GigE Vision標準的基礎知識,請閱讀應用說明:
Acquiring from GigE Vision Cameras with Vision Acquisition Software

硬體和軟體設置

為了從GigE Vision相機擷取影像,首先需要確保您擁有所有正確的硬體和軟體。以下是需求列表。

硬體

  • GigE Vision相機:該相機必須符合GigE Vision標準。如果您的相機具有超高速乙太網路接口,但不相容GigE Vision,則無法使用Vision Acquisition Software擷取影像。您可在相機的使用手冊或行銷文件中找到GigE Vision的標識。
  • 超高速乙太網端口:雖然可以使用分別支持10 MB/s和100 MB/s的乙太網和快速乙太網端口來擷取影像,但這僅適用於非常慢的幀率和較小的解析度。強烈建議您使用超快速乙太網路卡 (NIC)。

軟體

  • Vision Acquisition Software:您將需要Vision Acquisition Software 8.2.1或更高版本,它將安裝NI-IMAQdx 3.0或更高版本。 NI-IMAQdx是該驅動程式,具有從USB3 Vision、GigE Vision和IEEE 1394相機擷取影像的功能。
  • Application Development Interface (ADE):您可以使用LabVIEW、LabWindows / CVI、Visual Studio 6.0或任何ANSI C編譯器來擷取影像。

網路設置

正確安裝硬體和軟體後,還必須設定網路。如第一部分所述,GigE Vision相機可以從DHCP Server獲取IP地址,也可以使用Link Local Addressing (LLA) 來選擇一個IP地址。如果使用DHCP Server將相機連接到超快速乙太網,則會自動檢測到相機。如果相機直接連接到計算機(使用常規電纜或交叉電纜),則您需要等待一分鐘左右,以使DHCP在DHCP請求上超時並使用LLA。 Windows操作系統可能會顯示警告,指出網卡只能進行有限的操作。您可以忽略此警告。注意:該延遲僅適用於Windows XP和2000,不適用於Windows Vista操作系統。


圖1 直接連接相機時Windows顯示警告

Jumbo Packet

通常,網路驅動程式會將大於1500字節的任何數據拆分為多個數據包。但是,GigE Vision標准允許最大9014字節的數據包大小。這些Jumbo Packet使相機可以更有效地在網路上傳輸數據。通過右鍵單擊網卡並選"Property"可以從Windows裝置管理員中啟用許多網卡中的Jumbo Packet。


圖2 在Intel PRO / 1000適配器上設置巨型數據包的示例

網路防火牆

當相機擷取影像時,它將立即將這些數據包流式傳輸到主機。但是,網路防火牆將不允許數據包到達其目的地,因為防火牆通常會阻止未發起的傳入流量。因此,您需要禁用防火牆才能從GigE Vision相機擷取影像。您可以從控制台(開始>>控制台)禁用Windows防火牆。但是,如果您的網卡帶有Intel PRO / 1000晶片組並且正在使用高性能驅動程式,則無需禁用防火牆。由於高性能驅動程式會在傳入的GigE Vision數據包到達防火牆之前將其重定向到NI-IMAQdx內核驅動程式,因此防火牆設置不會影響影像的擷取。

在MAX中擷取影像

Measurement and Automation Explorer (MAX) 用於驗證您已發現相機並可以擷取影像。由於NI-IMAQdx驅動程式支持即插即用 (PnP),與主機位於同一子網中的所有GigE Vision相機應自動出現在"Devices and Interfaces"子樹中。 GigE Vision相機枚舉在NI-IMAQdx子樹下,並通過特殊圖標標識。如果您使用的是NI IMAQdx 4.3.5或更高版本,則GigE Vision相機將出現在"Network Devices"子樹中。


圖3 MAX在同一子網中自動檢測到任何GigE Vision相機

MAX將在與主機相同的子網上顯示任何GigE Vision相機。但是,NI-IMAQdx也允許您從遠程子網中的相機擷取影像。您可以通過調用NI-IMAQdx API中的相應函數來發現遠程子網中的相機。例如,C函數IMAQdxDiscoverEthernetCameras()具有用於指定要在其上發現相機的子網的參數。

一旦能夠在MAX中發現相機,下一步就是從相機中擷取影像。從子樹中選擇相機以在主窗口中將其打開。以下是Acquisition tab的各個部分及其說明


圖4 Acquisition tab

  • Video Mode:此屬性僅對IEEE 1394相機有效。 GigE Vision相機為灰色。
  • Pixel Format:顯示可用像素格式的列表。典型格式是Mono8,Mono16和YUV422Packed。
  • Region of Interest:指定擷取窗口的左右偏移量以及寬度和高度。
  • Timeout:設置驅動程式等待超時完成之前返回超時錯誤的毫秒數。
  • Packet Size:指定每個數據包中傳輸的字節數。此數字必須小於網卡允許的最大數據包大小(如果禁用了巨型數據包,則為1500;如果啟用了巨型數據包,則為9014)。

正確設置擷取參數後,單擊Snap以擷取一幅影像,或單擊Grab以連續擷取影像。

在LabVIEW中擷取影像

NI-IMAQdx提供了一個統一的API,可從IEEE 1394,USB3 Vision和GigE Vision相機擷取影像。雖然某些功能特定於一種類型的總線,但是大多數功能和VI均可用於兩種類型的相機。這使得更多的總線不可知論的發展為影像擷取。您可以用GigE Vision相機替換IEEE 1394相機,反之亦然,而無需更改代碼。

NI-IMAQdx LabVIEW API分為高級VI和低級VI。使用高級VI,可以對簡單的捕捉,抓取或序列操作進行編程。使用low-level VI可以執行與high-level VI相同的任務,但可以更好地控制執行細節。查看LabVIEW附帶的示例,以了解如何使用NI-IMAQdx對影像擷取進行編程。


圖5 一個簡單的例子

上面的例子說明了在LabVIEW中的簡單Grab擷取。所擷取的影像顯示在影像指示器中。本示例在Buffer Number中顯示了緩衝區編號。如果while循環的循環速率不高於相機的幀速率,則可能會遺失緩衝區。在這種情況下,在可以處理原始影像之前,複製到內存緩衝區中的影像會被另一個影像覆蓋。在大多數機器視覺情況下,重要的是要通知用戶是否遺漏了任何幀。

了解相機屬性

相機通常支持幾種可設置的屬性,這些屬性使相機具有足夠的靈活性,可以在具有各種約束的不同環境中工作。儘管大多數機器視覺相機都支持某些典型屬性,例如增益,快門速度或位深度,但許多相機具有唯一的屬性子集,該子集僅特定於該相機或相機系列。


圖6 MAX中的"Camera Attributes"選項卡顯示所有屬性

GigE Vision標准定義了捕獲影像所需的最少屬性集。每個GigE Vision相機都必須支持這些屬性,例如影像寬度,高度,像素格式等。但是,可以使用GenICam標準公開相機支持的其他屬性。

GenICam標準

GigE Vision規範依賴於GenICam,它是歐洲機器視覺協會 (EMVA) 的標準,用於描述相機支持的功能 (屬性)。每個GigE Vision相機都必須提供符合GenICam語法的XML設備描述文件。連接相機並在MAX中首次選擇該相機時,NI-IMAQdx會檢索並解釋該XML文件,以枚舉相機支持的屬性。由於每個相機供應商都提供特定於每個相機的XML文件,因此NI-IMAQdx可以自動填充該相機的特定屬性。

<Integer Name=“Gain" NameSpace="Standard">
    <ToolTip>Analog Gain setting for camera</ToolTip> 
    <DisplayName>Gain</DisplayName> 
    <pValue>GainReg</pValue> 
    <Min>0</Min> 
    <Max>128</Max> 
    <Inc>1</Inc> 
    <Representation>Logarithmic</Representation>
</Integer>
 
<IntReg Name="GainReg">
    <ToolTip>Access node for the camera's Gain feature</ToolTip>
    <Address>0x0815</Address>
    <Length>2</Length>
    <AccessMode>RW</AccessMode>
    <pPort>Device</pPort>
    <Sign Unsigned </Sign>
    <Endianess>BigEndian</Endianess>
</IntReg>

圖7 描述增益屬性的XML文件的片段
 

圖7顯示了在XML文件中描述的gain屬性的非常簡單的示例。解析此XML代碼片段後,NI-IMAQdx確定以下內容:

  • 功能名稱是Gain。
  • 它的最小值和最大值分別為0和128,最小增量為1。
  • Gain以對數形式表示。
  • 當前增益值以BigEndian Unsigned形式存儲在地址為0x0815的寄存器中,長度為2個字節。
  • 驅動程式具有對該寄存器的讀寫訪問權限。

相機支持的每個此類屬性在XML文件中都有一段代碼,用於定義屬性參數。您可以通過從<Program Files>\National Instruments\NI-IMAQdx\Data\XML目錄中打開XML文件來手動檢查它。注意:上面的示例非常簡單地表示屬性,並作為學術練習提供。典型的XML文件要復雜得多,並且涉及許多交叉引用。

以編程方式控制相機設置

可以通過使用MAX (請參見圖6) 來設置XML文件中公開的屬性值來控制相機設置。但是,許多應用程序需要能夠以編程方式更改相機屬性。 NI-IMAQdx API提供了更改XML文件中公開的任何屬性的值的方法。雖然可以在任何受支持的API中設置相機屬性,但我們將在LabVIEW中討論其實現。

相機支持的每個屬性均由以下(非窮舉)屬性定義:

  • Name:屬性的唯一名稱
  • Representation:可以是整數,浮點數,布林,枚舉,字符串或命令
  • Unit of Measurement:值的單位 (例如:μs)
  • Access:只讀,只寫或讀/寫

相機製造商可以為您提供詳細說明每個屬性的屬性的文件。如果沒有可用的文件,則可以使用MAX確定某個屬性的屬性。為此,只需從"Camera Attributes"選項卡中選擇所需的屬性。例如,我們將檢查Basler Scout scA640-70gm相機的ExposureTimeAbs屬性。從圖8中,我們可以確定屬性ExposureTimeAbs 是一個以微秒為單位的浮點數。


圖8 MAX中的ExposureTimeAbs屬性

在LabVIEW中,您可以使用屬性節點設置屬性值。但是,在開發時,LabVIEW無法知道屬性的名稱或表示形式。因此,您將需要提供屬性名稱並根據屬性表示形式 (整數,字符串,布林) 調用適當的函數。


圖9 設置Basler scA640-70gm的ExposureTimeAbs屬性

儘管GenICam提供了控制相機的靈活方法,但該標準還不足以保證互操作性。互操作性是在不同相機之間切換並仍保持應用程序軟體功能的能力。例如,如果我們將上述示例中的Basler相機替換為其他製造商的相機。該相機可能具有以ns或整數表示的ExposureTimeAbs屬性,甚至可能以不同的名稱引用該屬性。顯然,每個相機對於相同的輸入將產生不同的擷取結果。

為了提高互操作性,EMVA與相機製造商合作創建了GenICam標準功能命名約定。本文件的目標是標準化大多數相機共有的許多屬性的名稱,表示形式,訪問方式,單位和功能。通過與GenICam標準一起使用此命名約定,相機製造商可以為標準功能促進與其他相機的互操作性,同時仍使用戶可以使用其相機的獨特功能。

 

在GigE Vision中觸發

在大多數機器視覺應用程序中,相機需要根據實際事件拍攝影像。例如,當瓶子相對於相機位於傳送帶上的確切位置時,瓶子檢查系統必須捕獲每個影像。這將使瓶子出現在影像中的完全相同的位置,從而簡化影像處理。您可以使用硬體觸發器來實現這種控制。

在典型的硬體觸發系統中,接近傳感器或編碼器發送脈衝以觸發擷取。在許多情況下,觸發器連接到啟動擷取的幀擷取器。但是,由於GigE Vision相機 (最長100米) 可能存在較長的距離,因此觸發抓幀器是不可行的。因此,所有觸發信號必須直接連接到相機。

在GenICam中,選擇觸發模式的操作與設置相機屬性一樣。實際上,觸發模式是GenICam中的屬性。您可以使用上一節中討論的相同API來設置觸發模式。 GenICam標準功能命名約定定義了一些觸發控制功能,使您可以自定義觸發動作的行為。雖然不要求相機製造商實現所有觸發模式,但以下介紹了最常用的模式。

  • AquisitionStart:觸發器在相機上開始擷取
  • AcquisitionActive:只要觸發器處於活動狀態,相機就會捕獲影像
  • FrameStart:相機為每個觸發器捕獲一張影像
  • LineStart:相機為每個觸發器捕獲一條線(用於線掃描相機)
  • ExposureStart:觸發器開始曝光一幀(或一行)
  • ExposureActive:只要觸發器處於活動狀態,框架(或線條)就會暴露

圖10 Prosilica GE650相機的觸發屬性
例如,讓我們看一下Prosilica GE650 GigE Vision相機的觸發模式。 MAX的Camera Attributes選項卡如圖10所示。請注意,我們已選擇相機應為連接到Line1的觸發器的每個上升沿捕獲一個影像。一旦以任何API打開相機,這些設置一旦保存在MAX中,就會自動加載。但是,您可能需要以編程方式設置設置。圖11使用LabVIEW以編程方式將相機配置為與圖10相同的設置。

圖11 LabVIEW中的簡單觸發示例

注意事項和陷阱

Jumbo Packet:如果您的NIC設備或任何中間網路硬體(交換機,路由器等)不支持巨型數據包,則您將被限制為小於1500字節的數據包大小。 GigE Vision數據包大小不能大於NIC允許的最大數據包大小。

防火牆:許多公司網路都使用防火牆來提高網路安全性。但是,除非使用High Performanceace驅動程式,否則無法從啟用了防火牆的GigE Vision相機擷取數據。如果您公司的網路策略不允許您禁用防火牆或使用其他網路驅動程式,則需要使用專用於影像擷取的系統,該系統不屬於公司網路。

損壞的XML文件:與任何新標準一樣,相機製造公司通常會發布其固件的新修訂版。如果收到錯誤消息指出XML文件已損壞,請聯繫相機製造商以獲取其固件的最新版本。

互操作性:儘管GenICam使相機製造商可以靈活地創建自定義屬性集,但很難在不修改代碼的情況下輕鬆地在相機之間切換。儘管GenICam標準功能命名公約在一定程度上緩解了此問題,但大多數公約僅是建議而非要求。因此,相機製造商可能會偏離約定,在這種情況下,將需要修改應用程序軟體以使其與其他相機兼容。