Startup
This commit is contained in:
134
script/local.py
134
script/local.py
@@ -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
|
||||
###################################################################################################
|
||||
|
||||
Reference in New Issue
Block a user