发现与选择相机#
在应用程序能够使用相机之前,必须先发现哪些相机可用。此过程称为枚举。
枚举相机#
与消费级相机(例如网络摄像头)不同,工业相机并非自动绑定到单个应用程序。相反,以下情况是成立的:
- 可以同时连接多个相机。
- 可以通过不同的传输层连接相机,例如 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())
心智模型#
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 建议首先枚举设备。之后,您可以根据相机的唯一标识符(例如其序列号)选择所需的相机,从而避免多次设备枚举带来的开销。
- 枚举所有相机。
- 通过序列号或用户自定义名称映射相机。
生产系统#
- 将相机标识符存储在配置文件中。
- 在启动时验证是否存在。
- 如果缺少期望的相机,则快速失败。
核心要点#
枚举至关重要,因为它使您的应用程序具备以下特点:
- 对硬件更改具有鲁棒性
- 独立于连接顺序
- 可扩展至多个相机
如果没有适当的枚举,系统将变得脆弱且难以维护。