def run_all_calibration(sweep_config_json, **kwargs): ''' A Python based command line utility to run calibration for ADI TOF modules SWEEP_CONFIG_JSON: Specify the default sweep config json file. The default options can be overriden by explictly specifying the options on the command line ''' sweep_config_dict = {} if (sweep_config_json is not None): with open(sweep_config_json) as f: sweep_config_dict = json.load(f) for key, value in kwargs.items(): if value is not None: sweep_config_dict[key] = kwargs[key] if key in sweep_config_dict: if sweep_config_dict[key] is None: print( 'Need to specify %s either as a command line option or in the sweep config json file' ) raise SystemExit if sweep_config_dict['unique_id'] == None: unique_id = generate_unique_id() sweep_config_dict['unique_id'] = unique_id sweep_config_dict['unique_id_list'] = split_unique_id( sweep_config_dict['unique_id'], 4) ipString = '' if 'remote' in sweep_config_dict: ip = ipaddress.ip_address(sweep_config_dict['remote']) print('Running script for a camera connected over Ethernet at ip:', ip) ipString = sweep_config_dict['remote'] #Initialize tof class system = tof.System() status = system.initialize() logger.info("System Initialize: " + str(status)) # Get Camera and program firmware cam_handle = device.open_device2(system, ipString) firmware_path = sweep_config_dict['firmware_path'] device.program_firmware2(cam_handle, firmware_path) logger.info("Running Calibration") #Initialize Dataframes depth_stats_calibrated_df = pd.DataFrame([], columns=['NO DATA']) depth_stats_df = pd.DataFrame([], columns=['NO DATA']) linear_offset_df = pd.DataFrame([], columns=['NO DATA']) metrics_df = pd.DataFrame([], columns=['NO DATA']) # If using rail create handle and store handle in cfg rail_handle = None if (sweep_config_dict['calib_type'] == 'Rail' or sweep_config_dict['verification_type'] == 'Rail'): rail_handle = calib.initialize_rail(sweep_config_dict) latest, archive = save.make_results_dir(sweep_config_dict['results_path'], sweep_config_dict['unique_id'], mode=sweep_config_dict['mode']) t = time.time() d = 0 while d < sweep_config_dict['warmup_time']: d = time.time() - t if sweep_config_dict['calibrate']: if sweep_config_dict['calib_type'] == 'Sweep': linear_offset_df, depth_stats_df = calib.run_sweep_calibration( cam_handle=cam_handle, cfg=sweep_config_dict, firmware_path=firmware_path) elif sweep_config_dict['calib_type'] == 'Rail': logger.info("Running Rail Calibration") # Run Rail calibration and store lf files linear_offset_df, depth_stats_df = calib.run_rail_calibration( cam_handle=cam_handle, rail_handle=rail_handle, cfg=sweep_config_dict, firmware_path=firmware_path) save.save_lf_files(latest, archive, firmware_path) write_lf.write_linear_offset_to_lf2(firmware_path, os.path.join(latest, 'lf_files'), sweep_config_dict, linear_offset_df) depth_stats_calibrated_df = pd.DataFrame() if sweep_config_dict['verify_sweep']: if sweep_config_dict['verification_type'] == 'Sweep': logger.info("Verifying Sweep") _, depth_stats_calibrated_df = calib.verify_sweep( cam_handle, sweep_config_dict, os.path.join(latest, 'lf_files')) elif sweep_config_dict['verification_type'] == 'Rail': logger.info("Verifying Sweeap") device.program_firmware2(cam_handle, os.path.join(latest, 'lf_files')) #_, depth_stats_calibrated_df = calib.rail_verify(cam_handle, rail_handle, sweep_config_dict, os.path.join(latest, 'lf_files')) cfg = sweep_config_dict frame_count = cfg['frame_count'] window = {} window['X'] = cfg['window_x'] window['Y'] = cfg['window_y'] frame = {} frame['height'] = cfg['frame_height'] frame['width'] = cfg['frame_width'] raw_frame = {} raw_frame['height'] = cfg['raw_frame_height'] raw_frame['width'] = cfg['raw_frame_width'] repeat_num_file = os.path.join(firmware_path, cfg['repeat_num_filename']) hpt_data_file = os.path.join(firmware_path, cfg['hpt_data_filename']) data_file = os.path.join(firmware_path, cfg['data_filename']) seq_file = os.path.join(firmware_path, cfg['seq_info_filename']) min_dist = cfg['rail_min_dist'] max_dist = cfg['rail_max_dist'] dist_step = cfg['rail_dist_step'] depth_conv_gain = cfg['depth_conv_gain'] sw_gain = cfg['sw_gain'] sw_offset = cfg['sw_offset'] depth_stats_calibrated_df = sc.rail_stats( min_dist, max_dist, dist_step, raw_frame, frame, frame_count, window, sw_gain, sw_offset, rail_handle, cam_handle) logger.info("Calculating Metrics") metrics_df = pd.DataFrame() #if sweep_config_dict['verify_sweep'] and sweep_config_dict['calculate_metrics']: # metrics_df = metcalc.calculate_metrics(depth_stats_df, depth_stats_calibrated_df) logger.info("writing to calibration json files") cal_json = os.path.join(firmware_path, 'linear_cal.json') output_cal_dict = write_to_cal_json(cal_json, sweep_config_dict) save.save_results(latest, archive, depth_stats_df, depth_stats_calibrated_df, linear_offset_df, sweep_config_dict, firmware_path, metrics_df, output_cal_dict) camera_results_path = save.get_results_path(sweep_config_json, sweep_config_dict['unique_id']) logger.info('camera results path %s', camera_results_path) return linear_offset_df
elif station == 'warm1': logger.info("warming up for far mode") sweep_config_json = os.path.join( 'config/BM_Kit/Far/sweep_config_far.json') warmup(sweep_config_json, dev_handle, 150) elif station == 'far': msg = "\nSelected: FAR\n" sweep_config_json = os.path.join( 'config/BM_Kit/Far/sweep_config_far.json') print(msg) lin_offset_df, dev, cfg = run_all_calibration( sweep_config_json, dev_handle, unique_id) elif station == 'save': sweep_config_json = os.path.join( 'config/BM_Kit/Far/sweep_config_far.json') camera_results_path = save.get_results_path( sweep_config_json, unique_id) logger.info('camera results path %s', camera_results_path) write_verify_eeprom(camera_results_path, dev_handle) publish.push_to_host(camera_results_path) logger.info("Results written to host: Camera Unique ID: %s", unique_id) else: logger.error("UNIQUE ID INPUT REQUIRED FIRST") if station == 'exit': logger.info("Results written to host: Camera Unique ID: %s", unique_id) break else: print("Unsupported option... Aborting...\n")