import sys
import os
import fg
try:
import numpy as np
import cv2 as cv
except:
raise RuntimeError("OpenCV not found, run 'apt install --no-install-recommends python3-opencv'")
def live(arg):
if arg == None:
print("Detecting camera...")
fg.install_camera(fg.CAMERA_TYPE.Vxx_AUTO)
print("Found {}".format(fg.get_camera_type().name))
elif os.path.exists(arg):
print("Installing BMP file camera using directory '{}'...".format(arg))
fg.install_camera(fg.CAMERA_TYPE.FILE_BMP)
fg.set_special_option("FilePath:{}".format(arg), 0)
print("{} BMP files found".format(fg.get_special_option("FileCount")))
else:
print("Installing GigE camera using IP address {}...".format(arg))
import socket
fg.install_camera(fg.CAMERA_TYPE.GigE_AUTO, socket.inet_aton(arg))
result = fg.get_scan_param()
width = result[2];
height = result[3] * result[4];
print("Image size: {} x {}".format(width, height))
print("Pixel type: {}".format(result[5].name))
if (result[5] == fg.PIXEL_TYPE.RGBX_32):
print(" switching to RGB_24...")
fg.set_scan_param(result[0], result[1], result[2], result[3], result[4], fg.PIXEL_TYPE.RGB_24)
pixel_order = fg.get_pixel_order()
print("Pixel order: {}".format(pixel_order.name))
imageList = []
for i in range(4):
imageList.append(fg.alloc_image())
for image in imageList:
fg.append_image(image)
fg.set_trigger_mode(fg.TRIGGER_MODE.FREERUN)
cv.namedWindow("Camera", cv.WINDOW_NORMAL | cv.WINDOW_KEEPRATIO)
scale = int(width/1024) + 1;
cv.resizeWindow("Camera", int(width/scale), int(height/scale))
print("\nOpenCV window keys:")
if fg.get_camera_type() != fg.CAMERA_TYPE.FILE_BMP:
print(" '+': Increase exposure time")
print(" '-': Decrease exposure time")
print(" 'q': Exit")
while True:
key = cv.waitKey(1)
if key == ord('q'):
break
elif key == ord('+'):
try:
fg.set_shutter_time(fg.get_shutter_time() + 100)
except:
pass
print("Exposure: {} us".format(fg.get_shutter_time()))
elif key == ord('-'):
try:
fg.set_shutter_time(fg.get_shutter_time() - 100)
except:
pass
print("Exposure: {} us".format(fg.get_shutter_time()))
result = fg.get_image(1000)
error = result[0]
if error == fg.ERROR_CODE.NoError:
ptr = result[1]
image_number = result[2]
if (pixel_order == fg.PIXEL_ORDER.RGB):
image = np.ndarray((height, width, 3), dtype=np.uint8, buffer=ptr)
image = cv.cvtColor(image, cv.COLOR_BGR2RGB)
elif (pixel_order == fg.PIXEL_ORDER.BGR):
image = np.ndarray((height, width, 3), dtype=np.uint8, buffer=ptr)
image = image.copy()
else:
image = np.ndarray((height, width), dtype=np.uint8, buffer=ptr)
if pixel_order == fg.PIXEL_ORDER.Y:
image = image.copy()
if pixel_order == fg.PIXEL_ORDER.RG:
image = cv.cvtColor(image, cv.COLOR_BayerRG2RGB)
elif pixel_order == fg.PIXEL_ORDER.BG:
image = cv.cvtColor(image, cv.COLOR_BayerBG2RGB)
elif pixel_order == fg.PIXEL_ORDER.GR:
image = cv.cvtColor(image, cv.COLOR_BayerGR2RGB)
elif pixel_order == fg.PIXEL_ORDER.GB:
image = cv.cvtColor(image, cv.COLOR_BayerGB2RGB)
cv.putText(image, "Frame: {}".format(image_number), (30, 50),
cv.FONT_HERSHEY_SIMPLEX, 1.4, (128, 255, 128), 2, cv.LINE_AA)
cv.imshow("Camera", image)
fg.append_image(ptr);
elif error == fg.ERROR_CODE.BrokenImage:
print("get_image() returned a broken image")
ptr = result[1]
fg.append_image(ptr);
elif error == fg.ERROR_CODE.GrabTimeOut:
print("get_image() timeout occured")
else:
print("get_image() failed, error code: {}".format(error))
fg.stop_image()
for image in imageList:
fg.free_image(image)
fg.uninstall_camera()
cv.destroyAllWindows()
print("End.")
if __name__ == "__main__":
arg = None
if len(sys.argv) > 1:
arg = sys.argv[1]
live(arg)