This commit is contained in:
gobbo_a
2017-09-22 10:58:17 +02:00
parent 0c1d63ae9a
commit 5a7afde16f
40 changed files with 975 additions and 483 deletions

View File

@@ -278,6 +278,36 @@ avy = create_averager(comy, 5, 0.001)
###################################################################################################
# Camera server
###################################################################################################
def wait_cam_server_message(number_messages = 1, timeout = 10000):
for i in range (number_messages):
if not cam_server.stream.waitCacheChange(timeout):
raise Exception("Timeout receiving from camera server")
def get_cam_server_stats(number_images=1, async = True, interval=-1, good_region = False):
ret = []
wait_cam_server_message()
prefix = "gr_" if good_region else ""
for ident in [prefix+"x_center_of_mass", prefix+"y_center_of_mass", prefix+"x_rms", prefix+"y_rms"]:
child = cam_server.stream.getChild(ident)
av = create_averager(child, number_images, interval)
av.monitored = async
ret.append(av)
return ret
def wait_cam_server_background(background, timeout = 10000):
start = time.time()
while True:
processing_parameters = cam_server.getProcessingParameters()
if (processing_parameters is not None) and (str(background) == processing_parameters["image_background"]):
return
if (time.time()-start) > timeout/1000:
raise Exception("Timeout waiting for camera server background: " + str(background))
time.sleep(0.01)
###################################################################################################
# Camtool
###################################################################################################
def wait_camtool_message(number_messages = 1, timeout = 10000):
for i in range (number_messages):
if not camtool.stream.waitCacheChange(timeout):
@@ -340,7 +370,111 @@ def check_camtool():
raise Exception("Error starting camtool process")
time.sleep(3.0)
###################################################################################################
# Camera scans
###################################################################################################
# mode = "server", "camtool", "bpm" or "direct"
def setup_camera_scan():
global mode, camera_name, number_images, use_background, multiple_background, number_backgrounds, dry_run, laser_was_on
laser_was_on = is_laser_on()
multiple_background = multiple_background and use_background
if mode == "server":
cam_server.start(camera_name)
if use_background:
if not dry_run:
laser_off()
bg=cam_server.captureBackground(1 if multiple_background else number_backgrounds)
cam_server.setBackgroundSubtraction(True)
if not multiple_background: wait_cam_server_background(bg)
else:
cam_server.setBackgroundSubtraction(False)
elif mode == "camtool":
#kill_camtool()
check_camtool()
if use_background:
if not dry_run:
laser_off()
if not multiple_background:
camtool.stop()
camtool.grabBackground(camera_name, number_backgrounds)
camtool.start(camera_name, 0, use_background, None, 0.0, None)
else:
if source == "bpm":
run("Devices/BpmStats")
add_device(BpmStats("image_stats", camera_name), True)
multiple_background = False
use_background = False
else:
run("Devices/ImageStats")
add_device(ImageStats("image_stats", camera_name), True)
add_device(image_stats.source, True)
image_stats.enableBackground(use_background)
if use_background:
laser_off()
if not multiple_background:
image_stats.grabBackground(number_backgrounds)
image_stats.setNumberOfImages(max(number_images,1))
if not multiple_background:
if not dry_run:
laser_on()
def before_sample_camera_scan():
global mode, camera_name, number_images, use_background, multiple_background, number_backgrounds, dry_run
if mode == "server":
if multiple_background:
bg = cam_server.captureBackground(number_backgrounds)
wait_cam_server_background(bg)
wait_cam_server_message(number_images)
elif mode == "camtool":
if multiple_background:
camtool.stop()
camtool.grabBackground(camera_name, number_backgrounds)
camtool.start(camera_name, 0, use_background, None, 0.0, None)
if not dry_run:
laser_on()
wait_camtool_message(number_images) #Wait filing the averager cache
else:
if multiple_background:
image_stats.grabBackground(number_backgrounds)
laser_on()
image_stats.update()
def after_sample_camera_scan():
if multiple_background:
if not dry_run:
laser_off()
def get_camera_scan_sensors():
global mode, camera_name, number_images, use_background, multiple_background, number_backgrounds, dry_run
if mode == "server":
sensors = get_cam_server_stats(number_images, good_region=use_good_region)
if plot_image:
sensors.append(cam_server.getDataMatrix())
elif mode == "camtool":
sensors = get_camtool_stats(number_images, good_region=use_good_region)
if plot_image:
sensors.append(camtool.getDataMatrix())
else:
sensors = [image_stats.com_x_mean, image_stats.com_y_mean, image_stats.com_x_stdev, image_stats.com_y_stdev]
if plot_image and (source == "direct"):
sensors.append(image_stats.source.getDataMatrix())
return sensors
def end_camera_scan():
global mode, camera_name, number_images, use_background, multiple_background, number_backgrounds, dry_run, laser_was_on
#if mode == "server": cam_server.stop()
#elif mode == "camtool": camtool.stop()
#elif mode == "camtool": camtool.stop()
#else: image_stats.stop()
if not dry_run:
if laser_was_on:
laser_on()
else:
laser_off()
pass
###################################################################################################
#CAS
###################################################################################################