跳至內容
測試伺服器
開發伺服器

核心概念#

擷取生命週期#

Camera → Transport → Buffer Queue → Application
                         ↑
                   RetrieveResult()

Mental Model#

  • 相機以非同步方式執行。
  • Python 以同步方式擷取。
  • 緩衝區將兩個網域解耦。

阻擋行為#

處理緩慢可能會導致積壓並遺失張數。您可以為 RetrieveResult() 指定適當的逾時值,以避免無限期地等待擷取結果。

RetrieveResult() → Waits until frame or timeout

GenICam Nodes#

什麼是 GenICam Node?#

一個 GenICam node 代表相機的單一可設定功能或 Property。Node 在 GenICam 標準中定義,該標準提供了一種統一的方式來存取相機功能,而與硬體供應商無關。

每個 node 的行為類似於強型別參數,並公開各種資訊:

  • 名稱(例如: ExposureTime)
  • 資料類型(例如 Float、Integer、Enumeration 等)
  • 存取權限(唯讀或讀/寫)
  • 有效的值範圍或選項

在 pypylon 中,node 是作為 camera 物件的屬性來存取,並提供以下等方法:

exposure_time = camera.ExposureTime   # Read exposure time in microseconds.
camera.ExposureTime.Value = 3000  # Value is in microseconds. Check Increment and ValueRange for valid values.

常見的 Node 類型#

Property 範例 描述
Float ExposureTime 對應至離散硬體設定的連續值
Integer Width 離散值
列舉 TriggerMode 預定義字串值
Boolean AcquisitionFrameRateEnable True/False
指令 ExecuteSoftwareTrigger 執行動作

理解節點至關重要,因為 pypylon 中的所有相機組態都是透過節點進行的。

pylon Parameters#

pylon parameters 包裝了 GenICam 節點,並提供了一個擴充且一致的介面來讀取和寫入值。它們還能處理型別轉換、範圍檢查和存取模式處理。

如果找不到節點,將傳回 pylon.PlaceholderParameter 這可讓您的程式碼順利處理遺失的節點。在不同相機型號或韌體版本可能具有不同可用功能的設定中,這通常是一種常見的情境。

var = camera.NotThere.GetValueOrDefault(1)
camera.NotThere.TrySetValue(3000)

設定參數

若要變更某些參數,必須先停止擷取:

camera.StopGrabbing()
camera.Width.Value = 640
camera.StartGrabbing()