尋找與選擇相機#
在應用程式可以使用相機之前,必須先尋找有哪些相機可用。此過程稱為列舉。
列舉相機#
與消費型相機(例如網路攝影機)不同,工業相機並不會自動繫結至單一應用程式。相反地,情況如下:
- 可能會同時連接多部相機。
- 相機可能透過不同的傳輸層連接,例如 USB、GigE 等。
- 相機可能會動態出現或消失,例如由於熱插拔或網路變更。
列舉可讓您的應用程式達成以下目的:
- 偵測目前可用的所有相機。
- 可靠地識別它們。
- 為您的任務選擇正確的相機。
範例#
transport layer factory 是進入 pylon 生態系統的切入點。它負責以下任務:
- 尋找相機。
- 建立裝置執行個體。
- 對底層傳輸層進行抽象化,例如 USB、GigE 等。
可以將其視為裝置管理員。
這會傳回裝置描述項清單。每個項目都包含有關偵測到的相機的中繼資料,例如:
- 型號名稱
- 序號(唯一識別碼)
- 介面類型(USB、GigE 等)
for device_info in device_info_list:
print(device_info.GetFriendlyName())
print(device_info.GetSerialNumber())
Mental Model#
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))
索引#
資訊
不建議使用索引,因為順序可能會根據連接的相機數量而改變。
使用案例#
單相機系統#
使用 pylon.InstantCamera(pylon.FirstFound).
主要特點:
- 足以用於測試簡單的設定。
- 對於單相機使用情境,您可以透過傳遞所需的 Property 作為字典,讓 pylon 尋找您的相機。
- 不建議用於多相機使用情境。
多相機系統#
Basler 建議先列舉裝置。之後,您可以透過其唯一識別碼(例如序號)來選擇所需的相機,以避免多次裝置列舉帶來的額外開銷。
- 列舉所有相機。
- 透過序號或使用者定義的名稱對應相機。
生產系統#
- 將相機識別碼儲存在設定檔中。
- 在啟動時驗證存在性。
- 如果找不到預期的相機,則快速失敗。
重點整理#
列舉至關重要,因為它能使您的應用程式具備以下特點:
- 對硬體變更具備強健性
- 獨立於連接順序
- 可擴充至多台相機
若沒有適當的列舉,系統將會變得脆弱且難以維護。