Python
eGrabberはPythonで使用することもできます。
インストール
eGrabber用のPythonバインディングは、eGrabberがインストールされたディレクトリ1のpython
サブディレクトリにあるPython wheelインストールパッケージ(.whl
ファイル)に含まれています。Pythonの設定にもよりますが、次のような簡単なコマンドでインストールできます。
python -m pip install <PATH_TO_EGRABBER_WHL>
最初の例
この例では、グラバーを作成し、それに含まれるインターフェース、デバイス、およびリモートデバイスモジュールに関する基本情報を表示します。これは、C++言語によるeGrabberの例をPythonバージョンに書き換えたものです。
from egrabber import * # 1
card_ix = 0
device_ix = 0
def showInfo():
gentl = EGenTL() # 2
grabber = EGrabber(gentl, card_ix, device_ix) # 3
card = grabber.interface.get('InterfaceID') # 4
dev = grabber.device.get('DeviceID') # 5
width = grabber.remote.get('Width') # 6
height = grabber.remote.get('Height') # 6
print('Interface: %s' % card)
print('Device: %s' % dev)
print('Resolution: %ix%i' % (width, height))
try: # 7
showInfo()
except Exception as e: # 7
print('error: %s' % e)
1. | egrabber モジュールをインポートします。 |
2. | EGenTL オブジェクトを作成します。このオブジェクトによって、GenTLプロデューサー(coaxlink.cti など)の場所を特定して開き、それを初期化します。 |
3. | EGrabber オブジェクトを作成します。コンストラクターには、手順2で作成されたgentl オブジェクトが必要です。また、使用するインターフェースとデバイスのインデックスも、オプションの引数として取ります。 |
4. | GenApiを使用し、CoaxlinkカードのIDを調べます。インターフェースモジュールからの返答が必要であるため、grabber.interface でget を実行します。 |
5. | 同様に、デバイスのIDを調べます。今回は、grabber.device を使用してデバイスモジュールをターゲットにします。 |
6. | 最後に、カメラの解像度を読み取りますが、今回は、カメラから値を取得必要があるため、grabber.remote を使用します。 |
7. | egrabber は、エラーを報告するために例外処理を用いるため、try: ... except: ... ブロック内のコードをラップします。 |
プログラムの出力例:
Interface: PC1633 - Coaxlink Quad G3 (2-camera) - KQG00014
Device: Device0
Resolution: 4096x4096
9.3 C++とPythonのeGrabberの違い
eGrabberクラス
C++ | Python |
---|---|
EGrabber<>
|
EGrabber
|
EGrabber<CallbackOnDemand>
|
EGrabber
|
EGrabber<CallbackSingleThread>
|
- |
EGrabber<CallbackMultiThread>
|
- |
Buffer
|
Buffer
|
ScopedBuffer
|
withブロックで使用されるBuffer |
EGrabber
メソッド
● | メソッド名は、C++ APIではcamelCase のように記述されますが、Pythonではlower_case のように記述されます。たとえば、C++でreallocBuffers と記述されるメソッドは、Pythonではrealloc_buffers と記述されます。 |
● | コールバック関数によるイベント通知は、eGrabberの現在のPythonバインディングでは利用できません。 |
● | その他、次のような違いがあります。 |
C++ | Python |
---|---|
getInteger< MODULE >(f)
|
MODULE .get(f, dtype=int)
|
getFloat< MODULE >(f)
|
MODULE .get(f, dtype=float)
|
getString< MODULE >(f)
|
MODULE .get(f, dtype=str)
|
getStringList< MODULE >(f)
|
MODULE .get(f, dtype=list)
|
- | MODULE .get(f, dtype=bool)
|
- | MODULE .get(f)
|
setInteger< MODULE >(f, v)
|
MODULE .set(f, v)
|
setFloat< MODULE >(f, v)
|
MODULE .set(f, v)
|
setString< MODULE >(f, v)
|
MODULE .set(f, v)
|
execute< MODULE >(f)
|
MODULE .execute(f)
|
MODULE
は、system
、interface
、device
、stream
、またはremote
に置き換えられます。