Python

eGrabber也可以在Python中使用。

安装

eGrabber安装目录1python子目录中,Python wheel安装包(.whl文件)中提供了用于eGrabber的Python绑定。根据您的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

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
当前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可以替换为systeminterfacedevicestreamremote