import ch.psi.pshell.imaging.ImageBuffer as ImageBuffer import java.math.BigInteger as BigInteger import org.python.core.PyLong as PyLong import org.python.core.PyFloat as PyFloat import json import traceback import datetime import ch.psi.pshell.bs.PipelineServer as PipelineServer import ch.psi.pshell.imaging.Colormap as Colormap if get_exec_pars().source == CommandSource.ui: camera_name = "SARBD02-DSCR050" # "SLG-LCAM-C041_sp" #camera_name = "SARBD02-DSCR050_sp" # "SLG-LCAM-C041_sp" #camera_name = "simulation_sp" # "SLG-LCAM-C041_sp" shared = False images = 1 interval = -1 roi = "" #roi = "[300, 200]" #roi = "[540, 200, 430,100]" snapshot = False else: camera_name = args[0] shared = args[1].lower() == "true" images = int(args[2]) if len(args)>2 else 1 interval = int(args[3]) if len(args)>3 else -1 roi = args[4] if len(args)>4 else "" snapshot = args[5].lower() == "true" if len(args)>5 else False background = get_exec_pars().background run("Tools/CameraTools") set_exec_pars(name="camera_data") if background: _server = PipelineServer("pipeline_server", cam_server.url) _server.config.colormap = Colormap.Flame _server.config.colormapAutomatic = True _server.initialize() else: _server = cam_server try: _server.start(camera_name + "_sp1" if shared else camera_name, shared) if roi is not None and len(roi.strip())>0: roi = json.loads(roi) if len(roi) == 2: if _server.stream.take() == None: _server.waitNext(10000) while True: if json.loads(_server.stream.take()["processing_parameters"])["image_region_of_interest"] == None: break _server.resetRoi() _server.waitNext(10000) iw, ih, cx, cy = _server.getValue("width"), _server.getValue("height"), _server.getValue("x_fit_mean"), _server.getValue("y_fit_mean") xa, ya = _server.getValue("x_axis"), _server.getValue("y_axis") cx = (cx - xa[0]) / (xa[-1]-xa[0]) * iw cy = (cy - ya[0]) / (ya[-1]-ya[0]) * ih w, h = roi[0], roi[1] x, y = int(max(cx- (w/2), 0)), int(max(cy-(h/2), 0)) w, h = min(w, iw-x), min(h, ih-y) roi = [x, w, y, h] if (w<0) or (h<0): raise Exception("Invalid ROI: " + str(roi)) _server.setRoi(roi[0], roi[2], roi[1], roi[3]) elif len(roi) == 4: _server.setRoi(roi[0], roi[2], roi[1], roi[3]) else: raise Exception("Invalid ROI: " + str(roi)) while True: _server.waitNext(10000) r = json.loads(_server.stream.take()["processing_parameters"]) if roi == r["image_region_of_interest"]: break; else: _server.waitNext(10000) save_camera_data(_server, images, interval, parallel = True, pause=True) set_exec_pars(open = False) data_file = get_exec_pars().path if snapshot: format ="png" save_camera_snapshot(_server, data_file + "." + format, format) finally: if background: _server.close() else: _server.stop() set_return(data_file)