Files
sf-op/script/Tools/save_camera_data.py
root 8d9794c431
2017-11-27 08:31:31 +01:00

97 lines
3.3 KiB
Python

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)