|  | @@ -0,0 +1,222 @@
 | 
	
		
			
				|  |  | +#===========================================================================#
 | 
	
		
			
				|  |  | +#                                                                           #
 | 
	
		
			
				|  |  | +#  Copyright (C) 2006 - 2018                                                #
 | 
	
		
			
				|  |  | +#  IDS Imaging Development Systems GmbH                                     #
 | 
	
		
			
				|  |  | +#  Dimbacher Str. 6-8                                                       #
 | 
	
		
			
				|  |  | +#  D-74182 Obersulm, Germany                                                #
 | 
	
		
			
				|  |  | +#                                                                           #
 | 
	
		
			
				|  |  | +#  The information in this document is subject to change without notice     #
 | 
	
		
			
				|  |  | +#  and should not be construed as a commitment by IDS Imaging Development   #
 | 
	
		
			
				|  |  | +#  Systems GmbH. IDS Imaging Development Systems GmbH does not assume any   #
 | 
	
		
			
				|  |  | +#  responsibility for any errors that may appear in this document.          #
 | 
	
		
			
				|  |  | +#                                                                           #
 | 
	
		
			
				|  |  | +#  This document, or source code, is provided solely as an example          #
 | 
	
		
			
				|  |  | +#  of how to utilize IDS software libraries in a sample application.        #
 | 
	
		
			
				|  |  | +#  IDS Imaging Development Systems GmbH does not assume any responsibility  #
 | 
	
		
			
				|  |  | +#  for the use or reliability of any portion of this document or the        #
 | 
	
		
			
				|  |  | +#  described software.                                                      #
 | 
	
		
			
				|  |  | +#                                                                           #
 | 
	
		
			
				|  |  | +#  General permission to copy or modify, but not for profit, is hereby      #
 | 
	
		
			
				|  |  | +#  granted, provided that the above copyright notice is included and        #
 | 
	
		
			
				|  |  | +#  reference made to the fact that reproduction privileges were granted     #
 | 
	
		
			
				|  |  | +#  by IDS Imaging Development Systems GmbH.                                 #
 | 
	
		
			
				|  |  | +#                                                                           #
 | 
	
		
			
				|  |  | +#  IDS Imaging Development Systems GmbH cannot assume any responsibility    #
 | 
	
		
			
				|  |  | +#  for the use or misuse of any portion of this software for other than     #
 | 
	
		
			
				|  |  | +#  its intended diagnostic purpose in calibrating and testing IDS           #
 | 
	
		
			
				|  |  | +#  manufactured cameras and software.                                       #
 | 
	
		
			
				|  |  | +#                                                                           #
 | 
	
		
			
				|  |  | +#===========================================================================#
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Developer Note: I tried to let it as simple as possible.
 | 
	
		
			
				|  |  | +# Therefore there are no functions asking for the newest driver software or freeing memory beforehand, etc.
 | 
	
		
			
				|  |  | +# The sole purpose of this program is to show one of the simplest ways to interact with an IDS camera via the uEye API.
 | 
	
		
			
				|  |  | +# (XS cameras are not supported)
 | 
	
		
			
				|  |  | +#---------------------------------------------------------------------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#Libraries
 | 
	
		
			
				|  |  | +from ctypes import *
 | 
	
		
			
				|  |  | +from pyueye import ueye
 | 
	
		
			
				|  |  | +import numpy as np
 | 
	
		
			
				|  |  | +import cv2
 | 
	
		
			
				|  |  | +import sys
 | 
	
		
			
				|  |  | +import ctypes
 | 
	
		
			
				|  |  | +import struct
 | 
	
		
			
				|  |  | +import threading
 | 
	
		
			
				|  |  | +#---------------------------------------------------------------------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#Variables
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +hCam = ueye.HIDS(0)             #0: first available camera;  1-254: The camera with the specified camera ID
 | 
	
		
			
				|  |  | +sInfo = ueye.SENSORINFO()
 | 
	
		
			
				|  |  | +cInfo = ueye.CAMINFO()
 | 
	
		
			
				|  |  | +pcImageMemory = ueye.c_mem_p()
 | 
	
		
			
				|  |  | +MemID = ueye.int()
 | 
	
		
			
				|  |  | +rectAOI = ueye.IS_RECT()
 | 
	
		
			
				|  |  | +pitch = ueye.INT()
 | 
	
		
			
				|  |  | +nBitsPerPixel = ueye.INT(24)    #24: bits per pixel for color mode; take 8 bits per pixel for monochrome
 | 
	
		
			
				|  |  | +channels = 3                    #3: channels for color mode(RGB); take 1 channel for monochrome
 | 
	
		
			
				|  |  | +m_nColorMode = ueye.INT()		# Y8/RGB16/RGB24/REG32
 | 
	
		
			
				|  |  | +bytes_per_pixel = int(nBitsPerPixel / 8)
 | 
	
		
			
				|  |  | +formatInfo=ueye.IMAGE_FORMAT_INFO()
 | 
	
		
			
				|  |  | +now=ctypes.c_uint()
 | 
	
		
			
				|  |  | +m_pcSeqImgMem=[]
 | 
	
		
			
				|  |  | +m_lSeqMemId=[]
 | 
	
		
			
				|  |  | +nNum=ueye.INT()
 | 
	
		
			
				|  |  | +pcMem=ueye.c_mem_p()
 | 
	
		
			
				|  |  | +pcMemLast=ueye.c_mem_p()
 | 
	
		
			
				|  |  | +ImageFileParams=ueye.IMAGE_FILE_PARAMS()
 | 
	
		
			
				|  |  | +#---------------------------------------------------------------------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +print("START")
 | 
	
		
			
				|  |  | +print()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Starts the driver and establishes the connection to the camera
 | 
	
		
			
				|  |  | +nRet = ueye.is_InitCamera(hCam, None)
 | 
	
		
			
				|  |  | +if nRet != ueye.IS_SUCCESS:
 | 
	
		
			
				|  |  | +    print("is_InitCamera ERROR")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +ueye.is_ParameterSet(hCam,ueye.IS_PARAMETERSET_CMD_LOAD_EEPROM,None,0)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Reads out the data hard-coded in the non-volatile camera memory and writes it to the data structure that cInfo points to
 | 
	
		
			
				|  |  | +nRet = ueye.is_GetCameraInfo(hCam, cInfo)
 | 
	
		
			
				|  |  | +if nRet != ueye.IS_SUCCESS:
 | 
	
		
			
				|  |  | +    print("is_GetCameraInfo ERROR")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# You can query additional information about the sensor type used in the camera
 | 
	
		
			
				|  |  | +nRet = ueye.is_GetSensorInfo(hCam, sInfo)
 | 
	
		
			
				|  |  | +if nRet != ueye.IS_SUCCESS:
 | 
	
		
			
				|  |  | +    print("is_GetSensorInfo ERROR")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Set display mode to DIB
 | 
	
		
			
				|  |  | +nRet = ueye.is_SetDisplayMode(hCam, ueye.IS_SET_DM_DIB)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Set the right color mode
 | 
	
		
			
				|  |  | +if int.from_bytes(sInfo.nColorMode.value, byteorder='big') == ueye.IS_COLORMODE_BAYER:
 | 
	
		
			
				|  |  | +    # setup the color depth to the current windows setting
 | 
	
		
			
				|  |  | +    ueye.is_GetColorDepth(hCam, nBitsPerPixel, m_nColorMode)
 | 
	
		
			
				|  |  | +    bytes_per_pixel = int(nBitsPerPixel / 8)
 | 
	
		
			
				|  |  | +    print("IS_COLORMODE_BAYER: ", )
 | 
	
		
			
				|  |  | +    print("\tm_nColorMode: \t\t", m_nColorMode)
 | 
	
		
			
				|  |  | +    print("\tnBitsPerPixel: \t\t", nBitsPerPixel)
 | 
	
		
			
				|  |  | +    print("\tbytes_per_pixel: \t\t", bytes_per_pixel)
 | 
	
		
			
				|  |  | +    print()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +elif int.from_bytes(sInfo.nColorMode.value, byteorder='big') == ueye.IS_COLORMODE_CBYCRY:
 | 
	
		
			
				|  |  | +    # for color camera models use RGB32 mode
 | 
	
		
			
				|  |  | +    m_nColorMode = ueye.IS_CM_BGR8_PACKED
 | 
	
		
			
				|  |  | +    nBitsPerPixel = ueye.INT(24)
 | 
	
		
			
				|  |  | +    bytes_per_pixel = int(nBitsPerPixel / 8)
 | 
	
		
			
				|  |  | +    print("IS_COLORMODE_CBYCRY: ", )
 | 
	
		
			
				|  |  | +    print("\tm_nColorMode: \t\t", m_nColorMode)
 | 
	
		
			
				|  |  | +    print("\tnBitsPerPixel: \t\t", nBitsPerPixel)
 | 
	
		
			
				|  |  | +    print("\tbytes_per_pixel: \t\t", bytes_per_pixel)
 | 
	
		
			
				|  |  | +    print()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +elif int.from_bytes(sInfo.nColorMode.value, byteorder='big') == ueye.IS_COLORMODE_MONOCHROME:
 | 
	
		
			
				|  |  | +    # for color camera models use RGB32 mode
 | 
	
		
			
				|  |  | +    m_nColorMode = ueye.IS_CM_MONO8
 | 
	
		
			
				|  |  | +    nBitsPerPixel = ueye.INT(8)
 | 
	
		
			
				|  |  | +    bytes_per_pixel = int(nBitsPerPixel / 8)
 | 
	
		
			
				|  |  | +    print("IS_COLORMODE_MONOCHROME: ", )
 | 
	
		
			
				|  |  | +    print("\tm_nColorMode: \t\t", m_nColorMode)
 | 
	
		
			
				|  |  | +    print("\tnBitsPerPixel: \t\t", nBitsPerPixel)
 | 
	
		
			
				|  |  | +    print("\tbytes_per_pixel: \t\t", bytes_per_pixel)
 | 
	
		
			
				|  |  | +    print()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +else:
 | 
	
		
			
				|  |  | +    # for monochrome camera models use Y8 mode
 | 
	
		
			
				|  |  | +    m_nColorMode = ueye.IS_CM_MONO8
 | 
	
		
			
				|  |  | +    nBitsPerPixel = ueye.INT(8)
 | 
	
		
			
				|  |  | +    bytes_per_pixel = int(nBitsPerPixel / 8)
 | 
	
		
			
				|  |  | +    print("else")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +ueye.is_SetColorMode(hCam,ueye.IS_CM_BGRA8_PACKED)
 | 
	
		
			
				|  |  | +nBitsPerPixel=ueye.INT(32)
 | 
	
		
			
				|  |  | +# Can be used to set the size and position of an "area of interest"(AOI) within an image
 | 
	
		
			
				|  |  | +nRet = ueye.is_AOI(hCam, ueye.IS_AOI_IMAGE_GET_AOI, rectAOI, ueye.sizeof(rectAOI))
 | 
	
		
			
				|  |  | +if nRet != ueye.IS_SUCCESS:
 | 
	
		
			
				|  |  | +    print("is_AOI ERROR")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +width =rectAOI.s32Width
 | 
	
		
			
				|  |  | +height =rectAOI.s32Height
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Prints out some information about the camera and the sensor
 | 
	
		
			
				|  |  | +print("Camera model:\t\t", sInfo.strSensorName.decode('utf-8'))
 | 
	
		
			
				|  |  | +print("Camera serial no.:\t", cInfo.SerNo.decode('utf-8'))
 | 
	
		
			
				|  |  | +print("Maximum image width:\t", width)
 | 
	
		
			
				|  |  | +print("Maximum image height:\t", height)
 | 
	
		
			
				|  |  | +print()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#---------------------------------------------------------------------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +for i in range(1,5):
 | 
	
		
			
				|  |  | +# Allocates an image memory for an image having its dimensions defined by width and height and its color depth defined by nBitsPerPixel
 | 
	
		
			
				|  |  | +    nRet = ueye.is_AllocImageMem(hCam, width, height, nBitsPerPixel, pcImageMemory, MemID)
 | 
	
		
			
				|  |  | +   # m_pcSeqImgMem.append(pcImageMemory)
 | 
	
		
			
				|  |  | +   # m_lSeqMemId.append(MemID)
 | 
	
		
			
				|  |  | +    ueye.is_AddToSequence(hCam,pcImageMemory,MemID)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +#path=ueye.c_wchar_p()
 | 
	
		
			
				|  |  | +#print(type(path))
 | 
	
		
			
				|  |  | +#nRet = ueye.is_ParameterSet(hCam, ueye.IS_PARAMETERSET_CMD_LOAD_FILE, path, 0)
 | 
	
		
			
				|  |  | +    
 | 
	
		
			
				|  |  | +# Activates the camera's live video mode (free run mode)
 | 
	
		
			
				|  |  | +nRet = ueye.is_CaptureVideo(hCam, ueye.IS_DONT_WAIT)
 | 
	
		
			
				|  |  | +if nRet != ueye.IS_SUCCESS:
 | 
	
		
			
				|  |  | +    print("is_CaptureVideo ERROR")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +nRet = ueye.is_InquireImageMem(hCam, pcImageMemory, MemID, width, height, nBitsPerPixel, pitch)
 | 
	
		
			
				|  |  | +if nRet != ueye.IS_SUCCESS:
 | 
	
		
			
				|  |  | +    print("is_InquireImageMem ERROR")
 | 
	
		
			
				|  |  | +else:
 | 
	
		
			
				|  |  | +    print("Press q to leave the programm")
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +Count=0
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +while(nRet == ueye.IS_SUCCESS):
 | 
	
		
			
				|  |  | + 
 | 
	
		
			
				|  |  | +    ueye.is_GetActSeqBuf(hCam, nNum, pcMem, pcMemLast)
 | 
	
		
			
				|  |  | +    array = ueye.get_data(pcMemLast, width, height, nBitsPerPixel, pitch, copy=False)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    bytes_per_pixel = int(nBitsPerPixel / 8) 
 | 
	
		
			
				|  |  | +    # ...reshape it in an numpy array...
 | 
	
		
			
				|  |  | +    frame = np.reshape(array,(height.value, width.value, bytes_per_pixel))
 | 
	
		
			
				|  |  | +    # ...resize the image by a half
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    frame = cv2.resize(frame,(0,0),fx=0.5, fy=0.5)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +      #---------------------------------------------------------------------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +    #Include image data processing here
 | 
	
		
			
				|  |  | +    if cv2.waitKey(2) & 0xFF == ord('p'):
 | 
	
		
			
				|  |  | +        Count=Count+1
 | 
	
		
			
				|  |  | +        ImageFileParams.pwchFileName = ueye.c_wchar_p('C:\\Users\\User\\Desktop\\test\\1.png')
 | 
	
		
			
				|  |  | +    #ImageFileParams.pnImageID = &nID; 
 | 
	
		
			
				|  |  | +    #ImageFileParams.ppcImageMem = &pcMemory;
 | 
	
		
			
				|  |  | +        ImageFileParams.nFileType = ueye.IS_IMG_PNG
 | 
	
		
			
				|  |  | +    #ImageFileParams.ppcImageMem = pcMemLast;  
 | 
	
		
			
				|  |  | +        ImageFileParams.nQuality = 75
 | 
	
		
			
				|  |  | +        nRet = ueye.is_ImageFile(hCam, ueye.IS_IMAGE_FILE_CMD_SAVE, ImageFileParams, ueye.sizeof(ImageFileParams));
 | 
	
		
			
				|  |  | +        print(Count)
 | 
	
		
			
				|  |  | +        print(nRet)
 | 
	
		
			
				|  |  | +#---------------------------------------------------------------------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +    #...and finally display it
 | 
	
		
			
				|  |  | +    cv2.imshow("SimpleLive_Python_uEye_OpenCV", frame)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +    # Press q if you want to end the loop
 | 
	
		
			
				|  |  | +    if cv2.waitKey(1) & 0xFF == ord('q'):
 | 
	
		
			
				|  |  | +        break
 | 
	
		
			
				|  |  | +#---------------------------------------------------------------------------------------------------------------------------------------
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Releases an image memory that was allocated using is_AllocImageMem() and removes it from the driver management
 | 
	
		
			
				|  |  | +ueye.is_FreeImageMem(hCam, pcImageMemory, MemID)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Disables the hCam camera handle and releases the data structures and memory areas taken up by the uEye camera
 | 
	
		
			
				|  |  | +ueye.is_ExitCamera(hCam)
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +# Destroys the OpenCv windows
 | 
	
		
			
				|  |  | +cv2.destroyAllWindows()
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +print()
 | 
	
		
			
				|  |  | +print("END")
 |