Coder Social home page Coder Social logo

pymba's Introduction

pymba

pymba is a Python wrapper for the Allied Vision Technologies (AVT) Vimba C API. It wraps the VimbaC.dll file included in the AVT Vimba installation to provide a simple Python interface for AVT cameras. It currently supports most of the functionality provided by VimbaC.dll.

Installation

Install the Vimba SDK from AVT to the default directory.

Run the AVTDriverInstaller tool and install the AVT Vimba SDK drivers.

Install pymba.

Usage

Testing installation

If Vimba and pymba are installed correctly, then the following code examples should give the installed Vimba version. No camera is needed.

Checking the version using a context manager:

from pymba import *

with Vimba() as vimba:
    print vimba.getVersion()

Or without using a context manager:

from pymba import *

vimba = Vimba()
vimba.startup()
print vimba.getVersion()
vimba.shutdown()

Interacting with cameras

Discover, open, manipulate, and capture frames from a camera.

from pymba import *
import time

# start Vimba
with Vimba() as vimba:
    # get system object
    system = vimba.getSystem()
    
    # list available cameras (after enabling discovery for GigE cameras)
    if system.GeVTLIsPresent:
        system.runFeatureCommand("GeVDiscoveryAllOnce")
        time.sleep(0.2)
    cameraIds = vimba.getCameraIds()
    for cameraId in cameraIds:
        print 'Camera ID:', cameraId
    
    # get and open a camera
    camera0 = vimba.getCamera(cameraIds[0])
    camera0.openCamera()
    
    # list camera features
    cameraFeatureNames = camera0.getFeatureNames()
    for name in cameraFeatureNames:
        print 'Camera feature:', name
    
    # get the value of a feature
    print camera0.AcquisitionMode
    
    # set the value of a feature
    camera0.AcquisitionMode = 'SingleFrame'
    
    # create new frames for the camera
    frame0 = camera0.getFrame()    # creates a frame
    frame1 = camera0.getFrame()    # creates a second frame
    
    # announce frame
    frame0.announceFrame()
    
    # capture a camera image
    camera0.startCapture()
    frame0.queueFrameCapture()
    camera0.runFeatureCommand('AcquisitionStart')
    camera0.runFeatureCommand('AcquisitionStop')
    frame0.waitFrameCapture()
    
    # get image data...
    imgData = frame0.getBufferByteData()
    
    # ...or use NumPy for fast image display (for use with OpenCV, etc)
    import numpy as np
    moreUsefulImgData = np.ndarray(buffer = frame0.getBufferByteData(),
                                   dtype = np.uint8,
                                   shape = (frame0.height,
                                            frame0.width,
                                            1))
    
    # clean up after capture
    camera0.endCapture()
    camera0.revokeAllFrames()
    
    # close camera

Interacting with the Vimba system

Get a reference to the Vimba system object and list available system features.

from pymba import *

with Vimba() as vimba:
    # get system object
    system = vimba.getSystem()
    
    # list system features
    for featureName in system.getFeatureNames():
        print 'System feature:', featureName

Interacting with transport layer interfaces

Get a reference to an interface object and list available interface features.

from pymba import *

with Vimba() as vimba:
    # get list of available interfaces
    interfaceIds = vimba.getInterfaceIds()
    for interfaceId in interfaceIds:
        print 'Interface ID:', interfaceId
    
    # get interface object and open it
    interface0 = vimba.getInterface(interfaceIds[0])
    interface0.openInterface()
    
    # list interface features
    interfaceFeatureNames = interface0.getFeatureNames()
    for name in interfaceFeatureNames:
        print 'Interface feature:', name
    
    # close interface
    interface0.closeInterface()

Handling Vimba exceptions

from pymba import *

try:
    with Vimba() as vimba:
except VimbaException as e:
    print e.message

Known issues

  • Not all API functions are wrapped (most are). For full list see vimbadll.py.
  • The path to VimbaC.dll has been hardcoded in vimbadll.py. It should be easy to change if needed.

pymba's People

Contributors

derricw avatar fmder avatar jayich avatar morefigs avatar tribeiro avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.