コンテンツにスキップ
ステージングサーバー
開発サーバー

カメラの検出と選択#

このトピックでは、使用するカメラを検出して選定するプロセスについて説明します。

アプリケーションがカメラを使用する前に、まず利用可能なカメラを検出する必要があります。このプロセスは列挙(Enumeration)と呼ばれます。

カメラの列挙#

コンシューマー向けカメラ(Webカメラなど)とは異なり、産業用カメラは単一のアプリケーションに自動的に紐付けられません。代わりに、以下の特徴があります。

  • 複数のカメラを同時に接続できます。
  • 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).

主な特徴:

  • シンプルなセットアップのテストには十分です。
  • シングルカメラのユースケースでは、必要なPropertyを辞書として渡すことで、pylonにカメラを検出させることができます。
  • マルチカメラのユースケースには推奨されません。
camera = pylon.InstantCamera({pylon.SerialNumberKey : serial_number}, pylon.FirstFound)

マルチカメラシステム#

複数回のデバイス列挙によるオーバーヘッドを避けるため、Baslerではまずデバイスを列挙することを推奨しています。その後、シリアルナンバーなどの一意の識別子によって目的のカメラを選択できます。

  • すべてのカメラを列挙します。
  • シリアルナンバーまたはユーザー定義名でカメラをマッピングします。

生産システム#

  • 設定ファイルにカメラの識別子を保存します。
  • 起動時に存在を確認します。
  • 必要なカメラが見つからない場合は、早期にエラーを発生させます。

主なポイント#

列挙処理は、アプリケーションを以下の状態にするために不可欠です:

  • ハードウェアの変更に対する堅牢性
  • 接続順序への依存性の排除
  • 複数カメラへの拡張性

適切な列挙処理が行われていない場合、システムは脆弱になり、保守が困難になります。