チュートリアル

pylon C++ APIによる開発の効率化

pylon C++ APIは、多数のサンプルコードが付属しているほか、カメラの設定・画像処理・撮影の最適化をサポートするツールも充実しているため、一般的なC++言語のSDKと比較して、アプリケーション開発にかかる期間を最大80%短縮できます。しかも、完成したコードをエクスポートして、異なるOS上で使用することも可能です。このチュートリアルでは、pylon C++ APIを活用し、数行のコードのみでカメラの接続・設定や画像取得を行うことで、開発を効率化する方法について解説します。

  • 読了時間:約 16 分

Tip

はじめに

pylon C++ APIと付属のサンプルコード、pylonの各種ツールを使用するには、以下の条件を満たす必要があります。

  • C++言語やオブジェクト指向プログラミングを含め、C++プログラミングに関する知識を備えていること

  • pylon C++ API、マニュアル類(プログラマーガイドなど)、各種ツール(pylonビューワーなど)がセットになったpylon software Suiteを事前にインストールしていること

  • 開発環境がWindows、Linux、Linux ARM、macOSのいずれかに対応していること

  • 試験や検証を効率化したい場合は、推奨カメラを使用すること(非推奨カメラも使用可能)

ヘルプ&サンプルコード

pylonビューワーは、開発・デバッグに便利な以下の機能を備えています。

  • 全カメラパラメーター(プロパティ、現在の設定値など)の表示

  • コンテキストメニュー:Parameter(パラメーター)を右クリック→Get Help(ヘルプを表示) →Product Documentation(製品ドキュメント)→完全なコードをコピー可能

また、ヘルプメニューでは、以下のマニュアルをご覧いただけます。

カメラパラメーターごとのC++ SDKサンプル:迅速なコード確認・実装が可能
カメラパラメーターごとのC++ SDKサンプル:迅速なコード確認・実装が可能

pylon C++ APIの構造

pylon C++ APIの構造は、以下の通りです。

  • Instant Camera ClassInstant Camera Array Class:APIの中心的役割を担うクラスとして、シングルカメラシステム、マルチカメラシステムのカメラオブジェクトとカメラ機能にアクセス

  • イベントハンドラー:最小限のコードでカメラの動作調整、取得画像の処理、カメライベントの取得が可能

  • GenICam専用のクラス:pylon上で既存の全カメラ機能を表示

  • トランスポートレイヤー:pylonドライバーにアクセスすることで、カメラ一覧を読み込み、カメラオブジェクトを作成

    • 汎用的なトランスポートレイヤーファクトリー

    • インターフェース固有のトランスポートレイヤー

  • ユーティリティクラス:画像を取り扱うクラスとして、コード1行で画像の表示・保存、画像形式の変換、動画のエンコード、画像の解凍が可能

pylon C++ APIの構造
pylon C++ APIの構造

pylonにおけるGenICamの活用

Baslerの全カメラ製品には、400から500のカメラ機能を記述した1つ(または複数)のGenICam XMLファイルが含まれています。

カメラを起動すると、pylonがXMLファイルを自動的にPCヘダウンロードし、INodeMapと呼ばれるレジスタマップを生成します。この体系的かつ標準化されたマップを展開することで、カメラの各機能にアクセスすることができます。

Instant Camera Classによるカメラへのアクセス

Instant Camera ClassとInstant Camera Array Classは、カメラオブジェクトを経由することで、パラメーター設定を行うことなくコード1行で各カメラ機能(画像取得、カメラパラメーターへのアクセス、カメラ接続、バッファ調整)を使用できます。しかも、複数のカメラオブジェクトを扱うCInstantCameraArrayであれば、マルチカメラシステムを運用することも可能です。

CInstantCamera

  • pylonビューワーの根幹を成すGenICam準拠の汎用クラス

  • 特定のカメラインターフェースやカメラパラメーターに依存しない

  • 動的なINodeMapを介してカメラパラメーターにアクセス

  • 各種カメラ、カメラインターフェース、カメラパラメーターに対応

メリット:pylonのバージョンアップなしで、新しいカメラやインターフェースに対応可能

デメリット:プログラミングが複雑であるため、短期的な開発コストが増大

CBaslerUniversalInstantCamera

  • pylonのバージョンアップごとに更新 → Baslerカメラの最新版のGenICam XMLファイルから生成

  • 特定のカメラ、カメラインターフェース、カメラパラメーターに依存

  • カメラ固有のパラメーターにアクセス

  • 静的API(カメラパラメーターの静的メンバー)を経由するため、カメラ設定が簡単でIDE自動補完も可能

メリット:カメラパラメーターに直接アクセスし、カメラ設定などの作業を簡易化・効率化することで、開発労力を軽減

デメリット:新機能が追加された場合、pylonのバージョンアップが必要

サンプルコード:画像取得

以下のビデオでは、シングルカメラシステムやマルチカメラシステムにおいて、数行のコードのみで画像取得に必要な設定を行う方法について解説しています。主な作業内容は、以下の通りです。

  • カメラ一覧の読み込み、カメラの起動・設定

  • バッファの自動調整

  • 単一のカメラオブジェクトによる複数のカメラへのアクセス

詳細とサンプルコードについては、C++プログラマーガイドをご覧ください。

トランスポートレイヤーによるカメラ一覧の読み込み

汎用的なトランスポートレイヤーファクトリー、または特定のトランスポートレイヤーを使用することで、カメラ一覧の読み込みやカメラオブジェクトの作成が可能です。カメラパラメーターにアクセスするには、上記で解説したInstant Camera Class、Instant Camera Array Classをご使用ください。

トランスポートレイヤーファクトリー(CTlFactory)

  • 汎用的な読み込みに対応

  • インターフェースの種類にかかわらず、すべてのカメラを読み込み可能

  • 特定のトランスポートレイヤーを作成

  • カメラオブジェクト(pylonデバイス)を作成

トランスポートレイヤー(ITransportLayer)

  • 特定のインターフェース(GigE Visionなど)に対応

  • 特定のインターフェースに対応したカメラ一覧を読み込み

  • 対応するカメラオブジェクト(pylonデバイス)を作成

  • 特定のインターフェースのパラメーター(GigEアクションコマンドなど)にアクセス

サンプルコード:カメラ一覧の読み込み

以下のビデオでは、数行のコードのみでカメラ一覧を読み込み、カメラオブジェクトを作成する方法について、トランスポートレイヤーファクトリーとトランスポートレイヤーの2つの手法に分けて解説しています。

なお、IPアドレス(GigEカメラの場合)、ユーザーIDまたはシリアル番号を使用してカメラオブジェクトを作成することも可能です。

詳細とサンプルコードについては、C++プログラマーガイドをご覧ください。

汎用パラメーターへのアクセス
(CInstantCamera)

  • INodeMapの読み出しとノード(カメラパラメーター)の作成が可能

  • 新たなインターフェースや機能の追加に柔軟に対応

  • パラメーター情報やプロパティをユーザー自身で検索する必要あり

  • ソースコードを削減できるヘルプ機能を内蔵

固有パラメーターへのアクセス
(CBaslerUniversalInstantCamera)

  • 共通するカメラパラメーターへの直接アクセスが可能(先にカメラを起動)

  • INodeMapを作成する必要なし

  • 迅速かつ簡単

サンプルコード:カメラパラメーターへのアクセス

以下のビデオでは、汎用クラスまたは固有クラスを使用してカメラパラメーターにアクセスする方法について解説しています。

詳細とサンプルコードについては、C++プログラマーガイドをご覧ください。

イベントハンドラー&ユーティリティクラス

イベントハンドラーは、最小限のコードのみでカメラ動作の調整、取得画像の処理、カメライベントの取得が可能です。

一方、ユーティリティクラスは、幅広い作業に使用されます。以下のビデオでは、そのうちの3つをご紹介しています。

イベントハンドラー

Instant Camera Classには、事前定義済みのイベントハンドラーが含まれています。それぞれの名称と機能は、以下の通りです。

  • コンフィギュレーションイベントハンドラー:トリガーや画像取得などのカメラ動作の調整が可能(単一画像の取得、連続画像の取得、ソフトウェアトリガー、GigEアクションコマンドの4種類を設定済み)

  • イメージイベントハンドラー:取得画像の処理が可能

  • カメライベントハンドラー:露光終了などのカメライベントの取得が可能

以下のビデオでは、数行のコードのみでカメラ動作を調整する方法について解説しています。

コンフィギュレーションイベントハンドラーは、いずれもヘッダファイル内にあるため、アプリケーションの開発時にそのままコピーしたり、ハードウェアトリガーなどに変更して再利用することが可能です。

ユーティリティクラス

CPylonImage

  • バッファのサイズ・ライフタイムを自動調整

  • ユーザーやサードパーティが作成したバッファの使用が可能

  • bmp、tiff、jpg、png、raw形式の画像の保存・ロードに対応

  • 平面画像の処理、ROI抽出(欠陥箇所のサムネイル表示など)が簡単

CFeaturePersistence

  • カメラの設定情報を別のカメラに簡単エクスポート

CVideoWriter

  • 最小限のコードでMPEG-4形式の動画ファイルを保存可能

  • 取得画像(連続画像)を動画ファイルへ変換

以下のビデオでは、ユーティリティクラスについて解説しています。ほかのクラスの詳細については、ヘルプメニューのpylon SDKサンプルマニュアルをご覧ください、

デモ:pylon Visual Studioのプロジェクトの作成

以下のデモでは、pylon Visual Studioのプロジェクトを一から作成し、以下の作業を5分で完了させます。

  • カメラの検索(カメラ一覧の読み込み)、カメラの起動・設定

  • 画像の取得・表示・保存

詳細については、ヘルプメニューのC++プログラマーガイドをご覧ください。

関連資料

製品・サービスに関するご不明点やご相談等がございましたら、お気軽にお問い合わせください。