Framegrabber API#
| ライブラリー | 目的 |
|---|---|
| fglib5 |
|
| siso_genicam |
|
| clsersis |
|
| iolibrt |
|
| display_lib |
|
Framegrabber APIを使用すると、Baslerフレームグラバーに接続されたカメラから画像を取得および処理するアプリケーションを作成できます。Camera LinkおよびCoaXPress標準を使用するカメラは、BaslerフレームグラバーおよびFramegrabber APIによってサポートされています。
情報
Framegrabber APIバージョン5.9以降、APIにいくつかの変更が加えられています。マニュアル全体において、このような変更箇所はそれぞれのセクションで強調表示されています。すべての変更点については、マニュアルの変更履歴セクションにまとめられています。
Baslerフレームグラバーは、ダイレクトメモリーアクセス(DMA)を使用して、1台または複数のカメラからの画像をアプリケーションによって割り当てられたメモリに直接転送します。カメラからフレームグラバーを経由してアプリケーションメモリに至る画像データの経路は、Framegrabber APIのコンテキストではDMAチャネルと呼ばれます(Framegrabber APIの観点からは、画像データはアプリケーションメモリへのDMA転送を通じてアプリケーションのコンテキストに入ります)。
アプリケーションは、新しい画像を求めてアクイジションループで待機するように設計することも、新しい画像が利用可能になったときに Framegrabber API から呼び出される関数を登録することもできます。いずれの場合も、新しい画像がコンピュータメモリに完全に転送され、アプリケーションによって画像データが安全に処理できるようになって初めて、アプリケーションにそのことが通知されます。
アプリケーションは、新しい画像を待機する時間(通常は秒数)を常に入力する必要があります。新しい画像を待機するために呼び出される関数は、Framegrabber SDK のインストールに含まれるオペレーティングシステムドライバを呼び出し、新しい画像の到着か指定された時間の経過のいずれか早い方まで、呼び出しスレッドをスリープ状態にすることができます。指定された待機時間内に画像が到着しなかった場合は、タイムアウトエラーが生成され、アプリケーションに報告されます。
Framegrabber API の動作方法により、新しい画像の待機中のプロセッサ使用率の低下と、カメラからアプリケーションへの画像データの低遅延転送が保証されます。ただし、これはほとんどのアプリケーションが別々のスレッドで画像アクイジションを実行するように実装されるか、または Framegrabber API によって管理される別のスレッドでアクイジションループを再度実行するコールバックメカニズムを使用することを意味します。そうしないと、アプリケーションが新しい画像を待機している間、アプリケーションのメインスレッドがブロックされる可能性があります。
また、新しい画像を待機する時間は、オペレーティングシステムドライバからの呼び出しからスレッドが戻るのを待たずにアプリケーションを終了できないことを意味する場合もあります。これは、たとえばマシン上で単一のユーザーインターフェイスとして実行されているアプリケーションではあまり問題になりませんが、多目的コンピュータ上で実行され、アプリケーション終了時に応答性の高いユーザーエクスペリエンスが求められるアプリケーションでは、むしろ短い待機時間を使用し、それに応じてタイムアウトエラーを処理する必要があります。
Framegrabber API 内の関数は異なるスレッドから安全に使用できますが、異なるスレッドが同じ機能や DMA チャネルを同時に制御しないでください。
Basler フレームグラバーは、アプリケーションメモリに転送される前に画像データに前処理を適用できます。ほとんどのフレームグラバーは、一般的に使用される標準的な一連の前処理機能をサポートしていますが、Basler VisualApplets と Basler のプログラマブルフレームグラバーを使用することで、アプリケーション開発者はより高度な前処理を実装し、画像処理を CPU からフレームグラバーの FPGA にオフロードすることができます。