Python

eGrabber也可以在Python中使用。

安装

用于eGrabber的Python绑定在位于pythoneGrabber安装目录1的子目录中的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
                

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