Jul 10th 2018 #1 Python # IMPORT print('Importing SiSo Wrapper') try: import SiSoPyInterface as s except ImportError: raise ImportError('SiSo module not loaded successfully') print('Runtime Version', s.Fg_getSWVersion()) # IMPORT additional modules import sys import time # for "s.getArrayFrom", to handle grabbed image as NumPy array print('Importing NumPy', end='') import numpy as np print('Version', np.__version__) # Additional Class definition # Data for APC Callback class MyApcData: fg = None port = 0 mem = None displayid = 0 def __init__(self, fg, port, mem, displayid): self.fg = fg self.port = port self.mem = mem self.displayid = displayid global_imgNr = -1 # Callback function definition def apcCallback(imgNr, userData): s.DrawBuffer(userData.displayid, s.Fg_getImagePtrEx(userData.fg, imgNr, userData.port, userData.mem), imgNr, "") return 0 # MAIN # Board and applet selection boardId = 0 if boardId < 0: exit(1) # definition of resolution width = 512 height = 512 samplePerPixel = 1 bytePerSample = 1 isSlave = False useCameraSimulator = True camPort = s.PORT_A # number of buffers for acquisition nbBuffers = 10 totalBufferSize = width * height * samplePerPixel * bytePerSample * nbBuffers # number of image to acquire nrOfPicturesToGrab = 10 frameRate = 100 # Get Loaded Applet applet = "My_Applet.hap" if applet == None: exit(0) # INIT FRAMEGRABBER print('Initializing Board ..', end='') if isSlave: fg = s.Fg_InitEx(applet, boardId, 1); else: fg = s.Fg_InitEx(applet, boardId, 0); # error handling err = s.Fg_getLastErrorNumber(fg) mes = s.Fg_getErrorDescription(err) if err < 0: print("Error", err, ":", mes) sys.exit() else: print("ok") # allocating memory memHandle = s.Fg_AllocMemEx(fg, totalBufferSize, nbBuffers) # Set Applet Parameters err = s.Fg_setParameterWithInt(fg, s.FG_WIDTH, width, camPort) if (err < 0): print("Fg_setParameter(FG_WIDTH) failed: ", s.Fg_getLastErrorDescription(fg)) s.Fg_FreeMemEx(fg, memHandle) s.Fg_FreeGrabber(fg) exit(err) err = s.Fg_setParameterWithInt(fg, s.FG_HEIGHT, height, camPort) if (err < 0): print("Fg_setParameter(FG_HEIGHT) failed: ", s.Fg_getLastErrorDescription(fg)) s.Fg_FreeMemEx(fg, memHandle) s.Fg_FreeGrabber(fg) exit(err) err = s.Fg_setParameterWithInt(fg, s.FG_BITALIGNMENT, s.FG_LEFT_ALIGNED, camPort) if (err < 0): print("Fg_setParameter(FG_BITALIGNMENT) failed: ", s.Fg_getLastErrorDescription(fg)) #s.Fg_FreeMemEx(fg, memHandle) #s.Fg_FreeGrabber(fg) #exit(err) if useCameraSimulator: # Start Generator s.Fg_setParameterWithInt(fg, s.FG_GEN_ENABLE, s.FG_GENERATOR, camPort) # s.Fg_setParameterWithInt(fg, s.FG_GEN_ROLL, 1, camPort) else: s.Fg_setParameterWithInt(fg, s.FG_GEN_ENABLE, s.FG_CAMPORT, camPort) # Read back settings (err, oWidth) = s.Fg_getParameterWithInt(fg, s.FG_WIDTH, camPort) if (err == 0): print('Width =', oWidth) (err, oHeight) = s.Fg_getParameterWithInt(fg, s.FG_HEIGHT, camPort) if (err == 0): print('Height =', oHeight) (err, oString) = s.Fg_getParameterWithString(fg, s.FG_HAP_FILE, camPort) if (err == 0): print('Hap File =', oString) # create a display window dispId0 = s.CreateDisplay(8 * bytePerSample * samplePerPixel, width, height) s.SetBufferWidth(dispId0, width, height) # Register acquisition call back #Define FgApcControl instance to handle the callback apcCtrl = s.FgApcControl(5, s.FG_APC_DEFAULTS) data = MyApcData(fg, camPort, memHandle, dispId0) s.setApcCallbackFunction(apcCtrl, apcCallback, data) #Register the FgApcControl instance to the Fg_Struct instance err = s.Fg_registerApcHandler(fg, camPort, apcCtrl, s.FG_APC_CONTROL_BASIC) if err != s.FG_OK: print("registering APC handler failed:", s.Fg_getErrorDescription(err)) s.Fg_FreeMemEx(fg, memHandle) s.CloseDisplay(dispId0) s.Fg_FreeGrabber(fg) exit(err) # Start acquisition print("Acquisition started") err = s.Fg_AcquireEx(fg, camPort, nrOfPicturesToGrab, s.ACQ_STANDARD, memHandle) if (err != 0): print('Fg_AcquireEx() failed:', s.Fg_getLastErrorDescription(fg)) s.Fg_FreeMemEx(fg, memHandle) s.CloseDisplay(dispId0) s.Fg_FreeGrabber(fg) exit(err) time.sleep(5); s.CloseDisplay(dispId0) print("Acquisition stopped") # Clean up if (fg != None): s.Fg_registerApcHandler(fg, camPort, None, s.FG_APC_CONTROL_BASIC); s.Fg_stopAcquire(fg, camPort) s.Fg_FreeMemEx(fg, memHandle) s.Fg_FreeGrabber(fg) print("Exited.") Display More