def from_units_to_volts(self, value, dev): units = Q_(dev.properties['calibration']['units']) slope = dev.properties['calibration']['slope'] * units offset = dev.properties['calibration']['offset'] * units value = value.to(units) value = value.m slope = slope.m offset = offset.m return (value - offset) / slope
def configure(self, properties: dict): self.logger.info('Updating config') update_cam = False update_roi = False update_exposure = False update_binning = False for k, new_prop in properties.items(): self.logger.debug('Updating {} to {}'.format(k, new_prop)) update_cam = True if k in self.config: old_prop = self.config[k] if new_prop != old_prop: update_cam = True else: update_cam = True if update_cam: if k in ['roi_x1', 'roi_x2', 'roi_y1', 'roi_y2']: update_roi = True elif k == 'exposure_time': update_exposure = True elif k in ['binning_x', 'binning_y']: update_binning = True if update_cam: if update_roi: X = sorted([properties['roi_x1'], properties['roi_x2']]) Y = sorted([properties['roi_y1'], properties['roi_y2']]) self.set_ROI(X, Y) self.config.update({ 'roi_x1': X[0], 'roi_x2': X[1], 'roi_y1': Y[0], 'roi_y2': Y[1] }) if update_exposure: exposure = properties['exposure_time'] if isinstance(exposure, str): exposure = Q_(exposure) new_exp = self.set_exposure(exposure) self.config['exposure_time'] = new_exp if update_binning: self.set_binning(properties['binning_x'], properties['binning_y']) self.config.update({ 'binning_x': properties['binning_x'], 'binning_y': properties['binning_y'] })
def __init__(self, camera): super().__init__(camera) self.running = False self.xsize = 1080 self.ysize = 720 self.sb = SimBrownian((self.xsize, self.ysize)) self.maxX = 1800 self.maxY = 720 self.exposure = Q_('10ms') self.X = [0, self.maxX-1] self.Y = [0, self.maxY-1] self.logger = get_logger(name=__name__)
def analog_output_dc(self, conditions): """ Sets the analog output of the NI card. For the time being is thought as a DC constant value. :param dict conditions: specifies DEV and Value :return: """ dev = conditions['dev'] port = "Dev%s/ao%s" % (self.daq_num, dev.properties['port']) units = Q_(dev.properties['calibration']['units']) min_value = Q_(dev.properties['limits']['min']).to(units) max_value = Q_(dev.properties['limits']['max']).to(units) # Convert values to volts: value = conditions['value'].to(units) V = self.from_units_to_volts(value, dev) min_V = self.from_units_to_volts(min_value, dev) max_V = self.from_units_to_volts(max_value, dev) t = nidaq.Task() t.CreateAOVoltageChan(port, None, min_V, max_V, nidaq.DAQmx_Val_Volts, None) t.WriteAnalogScalarF64(nidaq.bool32(True), 0, V, None) t.StopTask() t.ClearTask()
def configure(self, properties): self.logger.info('Updating config') update_cam = False update_roi = False update_exposure = False update_binning = True for k in properties: new_prop = properties[k] self.logger.debug('Updating {} to {}'.format(k, new_prop)) update_cam = True if k in self.config: old_prop = self.config[k] if new_prop != old_prop: update_cam = True else: update_cam = True if update_cam: if k in ['roi_x1', 'roi_x2', 'roi_y1', 'roi_y2']: update_roi = True elif k == 'exposure_time': update_exposure = True elif k in ['binning_x', 'binning_y']: update_binning = True if update_cam: if update_roi: X = np.sort([properties['roi_x1'], properties['roi_x2']]) Y = np.sort([properties['roi_y1'], properties['roi_y2']]) self.setROI(X, Y) self.config.update({ 'roi_x1': X[0], 'roi_x2': X[1], 'roi_y1': Y[0], 'roi_y2': Y[1] }) if update_exposure: exposure = Q_(properties['exposure_time']) new_exp = self.setExposure(exposure) self.config['exposure_time'] = new_exp if update_binning: self.setBinning(properties['binning_x'], properties['binning_y']) self.config.update({ 'binning_x': properties['binning_x'], 'binning_y': properties['binning_y'] })
def get_exposure(self) -> Q_: self.exposure = float(self.camera.ExposureTime.ToString()) * Q_('us') return self.exposure
self.camera.AcquisitionStop.Execute() def __str__(self): return self.friendly_name def __del__(self): self.camera.Close() if __name__ == '__main__': from time import sleep logger.setLevel(logging.DEBUG) ch = logging.StreamHandler() ch.setLevel(logging.DEBUG) formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s') ch.setFormatter(formatter) logger.addHandler(ch) logger.info('Starting Basler') basler = Camera(0) basler.initialize() basler.set_acquisition_mode(basler.MODE_SINGLE_SHOT) basler.set_exposure(Q_('.02s')) basler.trigger_camera() print(len(basler.read_camera())) basler.set_acquisition_mode(basler.MODE_CONTINUOUS) basler.trigger_camera() sleep(1) imgs = basler.read_camera() print(len(imgs))