Python

eGrabber can also be used in Python.

インストール

The Python bindings for eGrabber are provided in a Pyhon wheel installation package (a .whl file) located in the python subdirectory of the eGrabber installation directory1. 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を調べます。インターフェースモジュールからの返答が必要であるため、getgrabber.interfaceを実行します。
5. 同様に、デバイスのIDを調べます。今回は、を使用してデバイスモジューgrabber.device
6. 最後に、カメラの解像度を読み取ります。今回は、カメラから値を取得必要があるため、grabber.remoteを使用します。
7. egrabberは、エラーを報告するために例外を用いるため、try: ... except: ...ブロック内のコードをラップします。

プログラムの出力例:

Interface:    PC1633 - Coaxlink Quad G3 (2-camera) - KQG00014
Device:       Device0
Resolution:   4096x4096

C++とPythonのeGrabberの違い

eGrabberクラス

C++ Python
EGrabber<> EGrabber
EGrabber<CallbackOnDemand> EGrabber
EGrabber<CallbackSingleThread> -
EGrabber<CallbackMultiThread> -
Buffer Buffer
ScopedBuffer with-blockで使用されるBuffer

EGrabberメソッド

メソッド名は、C++ APIではcamelCaseのように記述されますが、Pythonではlower_caseのように記述されます。たとえば、C++でreallocBuffersと記述されるメソッドは、Pythonではrealloc_buffersと記述されます。
Event notification via callback functions is not available in the current eGrabber Python bindings.
その他、次のような違いがあります。
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は、systeminterfacedevicestream、またはremoteに置き換えられます。