Python

eGrabber can also be used in Python.

Installation

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. Depending on your Python setup, installation can be as easy as:

python -m pip install <PATH_TO_EGRABBER_WHL>

A first example

This example creates a grabber and displays basic information about the interface, device, and remote device modules it contains. This is the Python version of the first C++ eGrabber example:


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. Import the egrabber module.
2. Create an EGenTL object. This will locate, open, and initialize the GenTL producer (e.g., coaxlink.cti).
3. Create an EGrabber object. The constructor needs the gentl object created in step 2. It also takes as optional arguments the indices of the interface and device to use.
4. Use GenApi to find out the ID of the Coaxlink card. We want an answer from the interface module, so the get is done on grabber.interface.
5. Similarly, find out the ID of the device. This time, we use grabber.device to target the device module.
6. Finally, read the camera resolution. This time, we use grabber.remote since the values must be retrieved from the camera.
7. egrabber uses exceptions to report errors, so we wrap our code inside a try: ... except: ... block.

Example of program output:

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

Differences between C++ and Python eGrabber

eGrabber classes

C++ Python
EGrabber<> EGrabber
EGrabber<CallbackOnDemand> EGrabber
EGrabber<CallbackSingleThread> -
EGrabber<CallbackMultiThread> -
Buffer Buffer
ScopedBuffer Buffer used in a with-block

EGrabber methods

In the C++ API, method names are written in camelCase. In Python, method names are written in lower_case. For example, the C++ reallocBuffers becomes realloc_buffers in Python.
Event notification via callback functions is not available in the current eGrabber Python bindings.
Other differences:
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)

where MODULE can be replaced by system, interface, device, stream, or remote.