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. Coaxlink 카드의 ID를 찾는 데 GenApi을 사용하십시오. 인터페이스 모듈의 답변을 원하므로 get이(가) grabber.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)

여기서 MODULEsystem, interface, device, stream 또는 remote(으)로 대체될 수 있습니다.