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

尋找與選取相機#

本主題將說明如何發掘並挑選適合使用的相機。

應用程式在能夠使用相機之前,必須先偵測哪些相機可用。這個過程稱為「清點」。

列舉相機#

與消費級相機(例如網路攝影機)不同,工業相機並不會自動與單一應用程式的綁定。相反地,情況如下:

  • 可同時連接多台攝影機。
  • 攝影機可透過不同的傳輸層進行連接,例如 USB、GigE 等。
  • 攝影機可能會動態地出現或消失,例如因熱插拔或網路變更所致。

透過枚舉,您的應用程式可達成以下目標:

  • 偵測所有目前可用的攝影機。
  • 可靠地識別它們。
  • 請根據您的任務選擇合適的相機。

範例#

factory = pylon.TlFactory.GetInstance()

傳輸層工廠是進入 Pylon 生態系統的入口點。它負責執行以下任務:

  • 探索相機。
  • 建立裝置實例。
  • 將底層的傳輸層(例如 USB、GigE 等)進行抽象化處理。

不妨將它視為一個裝置管理員。

device_info_list = factory.EnumerateDevices()

此方法會回傳一個裝置描述符清單。每個項目都包含關於已偵測到相機的元資料,例如:

  • 型號名稱
  • 序號(唯一識別碼)
  • 介面類型(USB、GigE 等)
for device_info in device_info_list:
    print(device_info.GetFriendlyName())
    print(device_info.GetSerialNumber())

心智模型#

System Startup
     ↓
Transport Layers Scan for Devices
     ↓
Detected Camera List (Enumeration)
     ↓
Application selects a camera

選擇相機#

您可以透過序號或使用索引來選取攝影機。

這是選購相機的建議方法。

serial_number = "123456"

for device_info in device_info_list:
    if device_info.GetSerialNumber() == serial_number:
        camera = pylon.InstantCamera(factory.CreateDevice(device_info))

索引#

device_info_list[0]

資訊

不建議使用索引,因為順序可能會因連接的攝影機數量而有所變化。

應用情境#

單鏡頭系統#

使用 pylon.InstantCamera(pylon.FirstFound).

主要特點:

  • 足以用於測試簡單的設置。
  • 對於單一攝影機的使用情境,您可以透過將所需的屬性以字典形式傳入,讓 pylon 自動偵測您的攝影機。
  • 不建議用於多攝影機的應用情境。
camera = pylon.InstantCamera({pylon.SerialNumberKey : serial_number}, pylon.FirstFound)

多相機系統#

Basler 建議先對裝置進行枚舉。之後,您可以透過其唯一識別碼(例如序號)來選取所需的攝影機,以避免多次裝置枚舉所造成的額外負擔。

  • 列出所有攝影機。
  • 根據序號或使用者自訂名稱來映射攝影機。

生產系統#

  • 將攝影機識別碼儲存於設定檔中。
  • 在啟動時驗證是否存在。
  • 若未偵測到預期的攝影機,請立即終止執行。

重點摘要#

枚舉至關重要,因為它能讓您的應用程式:

  • 能適應硬體變更
  • 與連接順序無關
  • 可擴展至多台攝影機

若未進行適當的編號,系統便會變得脆弱且難以維護。