Python
eGrabber也可以在Python中使用。
安装
在eGrabber安装目录1的python
子目录中,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
可以替换为system
、interface
、device
、stream
或remote
。