Operator CxpCamera

運算子庫:硬體平台

此運算子表示 CXP 相機與 VisualApplets 之間的影像資料介面。此運算子可用於單通道、雙通道或四通道 CXP 介面。介面類型是透過參數 ConnectionCount 來選取的。無論相機傳遞何種格式,運算子都會輸出原始影像資料。然後,您需要將此影像資料轉換為相機所傳送的格式。若要轉換影像資料,請使用適當的運算子來進行聚合,並將原始位元組值轉換 (cast) 為像素值。運作期間的某些特定情況可能會透過事件系統進行通訊,如下所述。此外,運算子還具有多個用於發送與相機連線狀態信號的參數。

如果運算子偵測到影格大於或小於相機在 CXP 影像標頭中所宣告的大小,就會啟動安全機制。接著,運算子會切斷超出範圍的像素與行,以便 VisualApplets 始終能讀取在影像標頭中定義的影格大小。如果影格尺寸小於影像標頭中指定的尺寸,運算子會以未定義的資料填滿 (Fill) 接收到的影格,以達到影像標頭中指定的影格尺寸。填滿較小的影格可能會導致後續影格遺失。遺失情況將會透過事件回報給軟體,尺寸不符的情況也會觸發事件。

適用於硬體平台
imaFlex CXP-12 Penta
imaFlex CXP-12 Quad

在 VisualApplets 中執行個體化

運算子在其輸出 O 上提供影像資料。此輸出始終存在。除了此標準輸出連接埠外,您還可以針對 CXP 標頭詮釋資料(meta-data)配置選用的 MetaDataO 輸出。在運算子實例化期間將顯示以下彈出式對話方塊:

在這裡,您可以指定選用的詮釋資料連接埠。如果您將連接埠可用性設為「0」(預設值),則該連接埠將不會存在於運算子中。如果您將連接埠可用性設為 1,則詮釋資料連接埠將可在運算子介面中使用。

選用的 MetaDataO 連接埠

32 位元輸出的格式如以下圖片所示。

每個 CXP 影格都提供相應且無錯誤的影像標頭。若影像標頭不正確,則不會將任何影像串流資料饋送至 VisualApplets 管線中。壓縮的影像標頭由 6 個字組 (word) 組成。最後一個位元組用於附加資訊,僅供內部使用。特別是 HeaderError 位元可告知影像標頭本身是否發生錯誤。

影像標頭 描述
StreamId CXP 資料流的 ID
標籤 16 位元來源影像索引。對於每個傳輸的影像,此索引會遞增,並在達到 0xFFFF 時循環歸零。包含與相同影像相關之資料的每個串流都應使用相同的編號(在多擷取端點串流的情況下)。
XSize 表示以像素為單位的影像寬度的 24 位元值。
XOff 表示影像相對於完整裝置影像最左側像素之水平位移(以像素為單位)的 24 位元值。
YSize 代表以像素為單位之影像高度的 24 位元值。針對線掃描影像,此值設為 0。CameraScanMode 參數會始終顯示從此值讀取的相機類型。如果 O.Img Protocol 設定為 VALT_LINE1D,則在處理時會忽略 YSize,且運算子會將所有傳入資料輸出為無盡的行串流。如果影像協定設定為 VALT_IMAGE2D,YSize=0 也會導致無盡的行串流。
YOff 表示影像相對於完整裝置影像頂端線條之垂直位移(以像素為單位)的 24 位元值。對於線形掃描影像,此值設為 0。
DSizeL 表示每條影像線之資料字組數的 24 位元值。
PixelF 表示 pixel format 的 16 位元值。
TapG 表示擷取端點幾何形狀的 16 位元值。
旗標 影像旗標。
x 鏡射 (尚未使用)。描述傳入的影像是否經過 x 軸鏡射。
y-Mirror (尚未使用)。描述傳入的影像是否經過 y 軸鏡射。
HeaderError

1:影像標頭發生錯誤,且該影格被宣告為遺失。運算子輸出資料串流中不存在對應的影像資料。

0:影像標頭正確,且運算子輸出資料串流中存在對應的影像資料。

[重要] Image Protocol: Area and Line Scan Cameras

影像協定對相機運算子輸出有兩種不同的影響。

  • 來自 CXP 標頭的 YSize 值(0 = 線掃描;>0 = 面陣掃描)。

  • 運算子輸出端上設定的協定 O.Img Protocol(VALT_LINE1D = 線掃描;VALT_IMAGE2D = 面陣掃描)。

CameraScanMode 參數始終顯示從 CXP 標頭讀取的相機類型。如果 O.Img Protocol 設定為 VALT_LINE1D,則在處理時會忽略 YSize,且運算子會將所有傳入資料輸出為無盡的行串流。如果影像協定設定為 VALT_IMAGE2D,YSize=0 也會導致無盡的行串流,這會產生超過 O Max Img Height 的影像。過大的影像可能會在設計中位於 CxpCamera 運算子之後的運算子中導致未定義的行為。為避免這種情況,建議將傳入的行串流分割為多個影像,例如透過使用 SplitImage 運算子。

裝置資源使用情況

運算子會根據參數 ConnectionCount 的選擇,使用一個或多個類型為 CameraPort 的資源。對於事件系統,則會使用類型為 EventPort 的資源。如果 ConnectionCount 設定為 X4(四通道),資源對話方塊將如下所示:

[重要] 修改 Image Width 與 Image Height

透過輸出連結的最大影像寬度和高度屬性,您可以將寬度和高度調整為相機特定的設定。但是,運算子連接埠 O 上的最大影像寬度 必須能夠被連接埠 O 的 Parallelism 整除。因此,請確保最大影像寬度能被連接埠 O 的 Parallelism 整除!

錯誤處理與事件系統

當運算子偵測到接收到並重建的影格大於或小於相機在 CXP 影像標頭中所宣告的大小,就會啟動安全機制。接著,運算子會切斷超出範圍的像素與行,以便後續的處理管線始終能讀取在影像標頭中定義的影格大小。如果接收到的影格尺寸小於影像標頭中指定的尺寸,運算子會以未定義的資料填滿 (Fill) 接收到的影格,以達到影像標頭中指定的影格尺寸。填滿較小的影格可能會導致後續影格遺失。隨後會透過事件將遺失情況回報給軟體(請參閱下段)。尺寸不符的情況也會觸發事件。

For a set of very critical errors, the operator will forward asynchronous events to the host runtime software (Framegrabber SDK). The event name in the Framegrabber API is <hierarchical operator name>\CxpStreamStatus, e.g. Device1\Process0\Camera\CxpStreamStatus. The event payload is provided as four 16-bit data words. The event format is defined as follows:

  • 字組 [0]:

    • bits [0:15]:事件發生所在的 CXP 影像標籤。

  • 字組 [1]:

    • 位元 [8:15]:發生事件的串流 ID。

    • bits [0:7]:保留,視為無需理會 (don't care)。

  • 字組 [2]:

    • bit [0]:發生 CRC 錯誤。

    • 位元 [1]:在影像標頭中偵測到串流標記錯誤。

    • bit [2]:在影像標頭中偵測到無法修正的錯誤。

    • bit [3]:偵測到影格尺寸錯誤,亦即 CXP 影像標頭中定義的影像尺寸與從傳輸封包重建的影格尺寸不符。當相機在影像標頭中寫入一個資訊,但傳輸的資料量卻與標頭中宣告的不同時,就會發生這種情況。

    • bits [4:15]:保留,視為無需理會 (don't care)。

  • 字組 [3]:

    • bit [0]:事件類型,0 = Corrupted Entity,1 = Lost Entity。

      • Corrupted Entity 表示錯誤發生在影格內部,且該影格已經饋送至 VisualApplets 管線中。

      • Lost Entity 表示錯誤發生在影格被轉發至後續運算子之前,且該影格已被相機運算子捨棄。

      • 當觀察到損壞的實體時,運算子將根據 CXP 影像標頭定義填滿 (Fill) 影格,以便後續運算子不會導致未定義的行為。在此填滿 (Fill) 期間,可能會到達新影格,因而導致該影格遺失。當相機根據影格標籤傳送帶有間隙的資料時,也會引發遺失實體事件。

    • 位元 [1]:類型 已損毀 實體 的事件已遺失。這表示先前 同類型 「損毀實體」 已遺失。此情況 發生於執行時軟體未對事件作出反應,且 內部事件佇列已滿時。

    • 位元 [2]:類型 已遺失實體 已發生。這表示類型 「實體遺失」 的先前事件已遺失。此情況發生於 執行時軟體未對事件作出反應,且內部 事件佇列已滿。

    • 位元 [3:15]:遺失的 遺失的實體 事件的數量。

事件分為兩種類型:損壞實體事件和遺失實體事件。word 3 的 bit 0 描述了發生的事件類型。如果事件緩衝區已滿,可能會發生事件遺失的情況。當標記損壞實體的事件遺失時,將設定 word 3 的 bit 1。當標記遺失實體的事件遺失時,將設定 word 3 的 bit 2,並且 bit 3 到 15 將提供指示遺失畫格的遺失事件數量。如果設定了 bit 2 但 Counter 為 0,則表示發生了計數器溢位。

每個事件都會引起軟體中斷。為了減少事件數量,可以將多個具有相同畫格標籤的事件合併在一起。在這種情況下,某些錯誤旗標會被組合。如果事件遺失,遺失事件之前的事件將包含有關該遺失事件的資訊,並且無法與具有相同畫格標籤的其他事件進行合併。

由 CRC 錯誤所引發的事件會回報一個 幀標籤,該標籤未必與發生 CRC 錯誤的幀 完全對應。該幀標籤可能是前一幀或下一幀的標籤。這種情況僅會 發生在攝影機傳送的 CXP 封包中,包含兩個或更多 幀之間的轉換時。 CRC 計算雖在封包結尾處完成,但串流資料是 即時重建的。這意味著可能會發生以下情況:當 CRC 錯誤被 偵測到時,操作員可能已經傳送了前一個幀。 在正常 情況下,若攝影機封包中未同時包含當前 幀的結尾與下一幀的開頭資料,則發生 CRC 錯誤時的幀標籤將始終 正確。 對於所有其他情況,只要完整的幀流資料小於 8k 的最大封包大小,一個封包內可能僅會出現 1 個幀重疊。在此 情況下,軟體應用程式應將幀標籤為 -1 的前一幀 以及幀標籤為 +1 的下一幀,一併視為可能已損毀。

I/O Properties

Property Value
Operator Type M
輸出連結 O,影像資料輸出
MetaDataO,選用的後設資料輸出

Supported Link Format

Link Parameter Output Link O 輸出連結 MetaDataO
Bit Width 32
Arithmetic 無號數 無號數
Parallelism auto 1
Kernel Columns 1 1
Kernel Rows 1 1
Img Protocol {VALT_IMAGE2D, VALT_LINE1D} (default: VALT_IMAGE2D)1 {VALT_IMAGE2D, VALT_LINE1D, VALT_PIXEL0D} (default: VALT_IMAGE2D)
Color Format VAF_GRAY VAF_GRAY
Color Flavor FL_NONE FL_NONE
Max. Img Width 任何(預設值:1032) 6
Max. Img Height 任何(預設值:1032) 1

1

如果 O.Img Protocol 設為 VALT_LINE1D,則處理時會忽略 CXP 標頭中的 YSize 值,且運算子會將所有送達的資料輸出為無盡的行資料流。如果影像協定設為 VALT_IMAGE2D,則 YSize=0(線形掃描相機)也會導致無盡的行資料流,進而產生超出 O.Max.Img.Height 的影像。

Parameters

ConnectionCount
Type 靜態寫入參數
Default X1
Range {X1, X2, X4}

參數 ConnectionCount 定義了聚合到 CXP 連線的 CXP 通道數。所使用連接埠的索引由 CameraPort 類型的資源處理。連接埠資源的數量與連線數相符(例如 X2:兩個 CameraPort 資源項目)。

當您實例化多個 CxpCamera 運算子(例如用於雙攝影機 Applet)時,如果使用多個具有相同索引的資源,或者消耗的 CameraPort 資源數量超過最大值 4,則可能會發生資源衝突。在這種情況下,設計規則檢查會回報錯誤。

ResetStatus
Type 動態寫入參數
Default 關閉
Range {Off, On}

參數 ResetStatus 會重設攝影機統計資料,即錯誤計數器。

UsedConnections
Type 動態讀取參數
Default
Range {1,2,4}

參數 UsedConnections 顯示了執行階段由探索軟體設定的 CXP 通道數量。

PacketTagErrorCount
Type 動態讀取參數
Default
Range [0 : 8191]

參數 PacketTagErrorCount 顯示收到的封包中有多少個封包的標籤不符合 CXP 標準所預期的標籤。具體而言,當後續的資料流封包標籤列舉中出現間隙時,此數值會向上計數。該參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 則代表 Counter 溢位。當設定溢位位元時,應將 Counter 值視為無關 (don't care)。

ImageTagErrorCount
Type 動態讀取參數
Default
Range [0 : 8191]

此參數用於計算影像標頭標籤、CXP 標準預期的標籤以及接收到的標籤之間發生多少次不匹配。此參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當溢位位元設為 1 時,該 Counter 值應視為無效(don't care)。

StreamIdErrorCount
Type 動態讀取參數
Default
Range [0 : 8191]

此參數用於計算串流封包中接收到的串流 ID 值與影像標頭中指定的串流 ID 值發生不匹配的頻率。此參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當溢位位元設為 1 時,該 Counter 值應視為無效(don't care)。

CorrectedErrorCount
Type 動態讀取參數
Default
Range [0 : 8191]

此參數用於計算影像標頭或行標記中偵測到了多少個已修正的錯誤。此參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當溢位位元設為 1 時,該 Counter 值應視為無效(don't care)。

UncorrectedErrorCount
Type 動態讀取參數
Default
Range [0 : 8191]

此參數用於計算影像標頭或行標記中偵測到的錯誤有多少個因為同一個位元組中有多個位元錯誤而無法修正。此參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當溢位位元設為 1 時,該 Counter 值應視為無效(don't care)。

PacketBufferOverflowCount
Type 動態讀取參數
Default
Range [0 : 8191]

此參數用於計算在聚合模式(aggregated mode)下進行通道分集(channel bonding)時發生封包緩衝區溢位的頻率。此參數僅適用於 ConnectionCount = X2 或 X4 的情況。此參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當溢位位元設為 1 時,該 Counter 值應視為無效(don't care)。

PacketBufferOverflowSource
Type 動態讀取參數
Default
Range [0x0 : 0xf]

此參數實作了一個位元遮罩(bit mask),用於查詢封包緩衝區溢位發生在 4 個潛在 CXP 通道中的哪一個。參數寬度取決於 ConnectionCount 參數。在 X1 模式下,參數寬度為 1 位元;在 X2 模式下,參數寬度為 2 位元;而在 X4 模式下,參數寬度為 4 位元。順序為:LSB = 最低 CXP 通道編號,MSB = 操作員配置的最高 CXP 通道編號。

CameraScanMode
Type 動態讀取參數
Default
Range {area,line}

收到的影像標頭帶有該資料流是用於面型掃描(YSize > 0)還是線形掃描(YSize = 0)應用的資訊。此參數顯示最後收到的有效資料流影像標頭資訊。

MarkerErrorCount
Type 動態讀取參數
Default
Range [0 : 8191]

此參數用於計算 CXP 串流標記與標頭或行標記的順序不正確的頻率。此參數為 13 位元寬,其中位元 [11:0] 代表實際的 Counter 值,而位元 [12] 代表 Counter 溢位。當溢位位元設為 1 時,該 Counter 值應視為無效(don't care)。

UnexpectedStartupData
Type 動態讀取參數
Default
Range {false, true}

此參數用於偵測錯誤情況:在操作員重設後的第一個資料值是不預期的(即先前未收到任何影像標頭)。這種情況可能是由於相機、擷取卡韌體實作有誤,或是探索程序(discovery procedure)的軟體控制不當所造成。此外,相機的硬體缺陷理論上也可能導致這種情況。

FrameLostCount
Type 動態讀取參數
Default
Range [0 : 33554431]

此參數用於計算在擷取期間遺失且未傳送至 VisualApplets 管線的影格。當偵測到影像標頭發生錯誤,或某個影格與另一個影格重疊時,就會遺失影格。此參數為 25 位元寬,其中第 [23:0] 位元表示實際的 Counter 值,而第 [24] 位元代表 Counter 溢位。當設定溢位位元時,Counter 值應視為無關 (don't care)。

FrameCorruptedCount
Type 動態讀取參數
Default
Range [0 : 33554431]

此參數用於計算擷取期間損毀的影格。損毀的影格是指包含錯誤像素並傳送至 VisualApplets 管線的影格。此參數為 25 位元寬,其中第 [23:0] 位元表示實際的 Counter 值,而第 [24] 位元代表 Counter 溢位。當設定溢位位元時,Counter 值應視為無關 (don't care)。

Examples of Use

以下範例展示了 CxpCamera 運算子的使用方式: