跳转到内容
STAGING SERVER
DEVELOPMENT SERVER

发现与选择相机#

本主题阐述了发现并选择要使用的相机的过程。

在应用程序能够使用相机之前,必须先发现哪些相机可用。此过程称为枚举。

枚举相机#

与消费级相机(例如网络摄像头)不同,工业相机并非自动绑定到单个应用程序。相反,以下情况是成立的:

  • 可以同时连接多个相机。
  • 可以通过不同的传输层连接相机,例如 USB、GigE 等。
  • 相机可能会动态出现/消失,例如由于热插拔或网络更改。

枚举允许您的应用程序实现以下目的:

  • 检测当前所有可用的相机。
  • 可靠地识别它们。
  • 为您的任务选择正确的相机。

示例#

factory = pylon.TlFactory.GetInstance()

传输层工厂(Transport Layer Factory)是 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).

主要特征:

  • 足以用于测试简单的设置。
  • 对于单相机使用场景,您可以将所需的 Property 作为字典传递,让 pylon 查找您的相机。
  • 不建议用于多相机使用场景。
camera = pylon.InstantCamera({pylon.SerialNumberKey : serial_number}, pylon.FirstFound)

多相机系统#

Basler 建议首先枚举设备。之后,您可以根据相机的唯一标识符(例如其序列号)选择所需的相机,从而避免多次设备枚举带来的开销。

  • 枚举所有相机。
  • 通过序列号或用户自定义名称映射相机。

生产系统#

  • 将相机标识符存储在配置文件中。
  • 在启动时验证是否存在。
  • 如果缺少期望的相机,则快速失败。

核心要点#

枚举至关重要,因为它使您的应用程序具备以下特点:

  • 对硬件更改具有鲁棒性
  • 独立于连接顺序
  • 可扩展至多个相机

如果没有适当的枚举,系统将变得脆弱且难以维护。