SimpleCircNumpyArr.py#

#############################################################
 # 
 # FILE:        SimpleCircNumpy.py
 # DATE:        04/28/2022
 # COMPANY:     BitFlow, Inc.
 # DESCRIPTION: A simple example of capturing data 
 #              into a Numpy array from a single frame grabber 
 #              board.
 #
#############################################################

import platform

if(platform.system() == 'Windows'):
    import sys
    import msvcrt

    if (sys.version_info.major >= 3 and sys.version_info.minor >= 8):
        import os
        #Following lines specifying, the location of DLLs, are required for Python Versions 3.8 and greater
        os.add_dll_directory("C:\BitFlow SDK 6.5\Bin64")
        os.add_dll_directory("C:\Program Files\CameraLink\Serial")

import BFModule.BufferAcquisition as Buf

import cv2
import numpy as np
import time

from datetime import datetime

# The main function
def main():
    
    numBuffers = 10

    print('Circular Acquisition Example')
    print('---------------------------------')

    #CirAq = Buf.clsCircularAcquisition(Buf.ErrorMode.ErIgnore)
    CirAq = Buf.clsCircularAcquisition()

    #Call Open board function by showing the Board select dialog
    
    CirAq.Open()
    #CirAq.Open(0) # Use this to open board 0 without displaying the board select dialog

    #Setup the buffers using the numpy array
    BufArray = CirAq.BufferSetup(numBuffers)
    
    #Setup acquisition using the default options
    CirAq.AqSetup(Buf.SetupOptions.setupDefault)

    cv2.namedWindow("Image Window")

    #Start Acquisition
    CirAq.AqControl(Buf.AcqCommands.Start, Buf.AcqControlOptions.Wait)
    print("Acquisition Started.")

    print("\nHit q to exit.\n")

    keepUpdating = True

    while keepUpdating:        
        try:
            if(CirAq.GetAcqStatus().Start == True):
                CurBuf = CirAq.WaitForFrame(1000)
                #converting to 16 bits, as OpenCV imshow does not support uint32 images
                img = BufArray[CurBuf.BufferNumber].astype(np.uint16)
                cv2.imshow("Image Window", img)
                if cv2.waitKey(1) & 0xFF == ord('q'):
                    keepUpdating = False
                    break
        except Exception as e:
            print(e)
            pass

    # destroy the OpenCV image window
    cv2.destroyAllWindows()

    #Cleanup acquisition
    CirAq.AqCleanup()

    #Free allocated resources
    CirAq.BufferCleanup()

    #Close the board
    CirAq.Close()


if __name__ == "__main__":
    main()