BioImager  3.9.1
A .NET microscopy imaging library. Supports various microscopes by using imported libraries & GUI automation. Supported libraries include PriorĀ® & ZeissĀ® & all devices supported by Micromanager 2.0 and python-microscope.
Loading...
Searching...
No Matches
microscope.cameras.picam.PiCamera Class Reference
Inheritance diagram for microscope.cameras.picam.PiCamera:
microscope.abc.Camera microscope.abc.TriggerTargetMixin microscope.abc.DataDevice microscope.abc.Device

Public Member Functions

def __init__ (self, *args, **kwargs)
 
def get_awb_mode (self)
 
def set_awb_mode (self, val)
 
def set_iso_mode (self, val)
 
def HW_trigger (self, channel)
 
def initialize (self)
 
def make_safe (self)
 
def abort (self)
 
None set_trigger (self, TriggerType ttype, TriggerMode tmode)
 
TriggerMode trigger_mode (self)
 
TriggerType trigger_type (self)
 
def setLED (self, state=False)
 
def set_exposure_time (self, value)
 
def get_exposure_time (self)
 
def get_cycle_time (self)
 
def soft_trigger (self)
 
- Public Member Functions inherited from microscope.abc.Camera
None __init__ (self, **kwargs)
 
def set_readout_mode (self, description)
 
def get_transform (self)
 
def set_transform (self, transform)
 
None set_exposure_time (self, float value)
 
float get_exposure_time (self)
 
float get_cycle_time (self)
 
typing.Tuple[int, int] get_sensor_shape (self)
 
microscope.Binning get_binning (self)
 
None set_binning (self, microscope.Binning binning)
 
microscope.ROI get_roi (self)
 
None set_roi (self, microscope.ROI roi)
 
- Public Member Functions inherited from microscope.abc.TriggerTargetMixin
microscope.TriggerMode trigger_mode (self)
 
microscope.TriggerType trigger_type (self)
 
None set_trigger (self, microscope.TriggerType ttype, microscope.TriggerMode tmode)
 
None trigger (self)
 
- Public Member Functions inherited from microscope.abc.DataDevice
None __init__ (self, int buffer_length=0, **kwargs)
 
def __del__ (self)
 
None abort (self)
 
None enable (self)
 
None disable (self)
 
None set_client (self, new_client)
 
None update_settings (self, settings, bool init=False)
 
None receiveClient (self, str client_uri)
 
def grab_next_data (self, bool soft_trigger=True)
 
None receiveData (self, data, timestamp)
 
- Public Member Functions inherited from microscope.abc.Device
None __init__ (self)
 
None __del__ (self)
 
bool get_is_enabled (self)
 
None disable (self)
 
None enable (self)
 
None initialize (self)
 
None shutdown (self)
 
None add_setting (self, name, dtype, get_func, set_func, values, typing.Optional[typing.Callable[[], bool]] readonly=None)
 
def get_setting (self, str name)
 
def get_all_settings (self)
 
None set_setting (self, str name, value)
 
def describe_setting (self, str name)
 
def describe_settings (self)
 
def update_settings (self, incoming, bool init=False)
 

Public Attributes

 camera
 
 roi
 
 exposure_time
 
 cycle_time
 
 camversion
 
- Public Attributes inherited from microscope.abc.DataDevice
 enabled
 
- Public Attributes inherited from microscope.abc.Device
 enabled
 

Additional Inherited Members

- Static Public Attributes inherited from microscope.abc.Camera
list ALLOWED_TRANSFORMS = [p for p in itertools.product(*3 * [[False, True]])]
 
- Static Public Attributes inherited from microscope.abc.DataDevice
 set_setting = keep_acquiring(Device.set_setting)
 

Detailed Description

Definition at line 50 of file picam.py.

Constructor & Destructor Documentation

◆ __init__()

def microscope.cameras.picam.PiCamera.__init__ (   self,
buffer_length,
**  kwargs 
)
Derived.__init__ must call this at some point.

Reimplemented from microscope.abc.Camera.

Definition at line 51 of file picam.py.

51 def __init__(self, *args, **kwargs):
52 super(PiCamera, self).__init__(**kwargs)
53 # example parameter to allow setting.
54 # self.add_setting('_error_percent', 'int',
55 # lambda: self._error_percent,
56 # self._set_error_percent,
57 # lambda: (0, 100))
58 self._acquiring = False
59 self._exposure_time = 0.1
60 self._triggered = False
61 self.camera = None
62 # Region of interest.
63 self.roi = ROI(None, None, None, None)
64 # Cycle time
65 self.exposure_time = 0.001 # in seconds
66 self.cycle_time = self.exposure_time
67 # initialise in soft trigger mode
68 self._trigger_type = TriggerType.SOFTWARE
69 # setup hardware triggerline
70 GPIO.setmode(GPIO.BCM)
71 # GPIO trigger line is an input
72 GPIO.setup(GPIO_Trigger, GPIO.IN)
73 # GPIO control over camera LED is an output
74 GPIO.setup(GPIO_CAMLED, GPIO.OUT)
75 # add trigger to settings
76 trg_source_names = [x.name for x in TrgSourceMap]
77 # set up queue to store images as they are acquired
78 self._queue = queue.Queue()
79 self._awb_modes = picamera.PiCamera.AWB_MODES
80 self._iso_modes = [0, 100, 200, 320, 400, 500, 640, 800]
81
82 def _trigger_source_setter(index: int) -> None:
83 trigger_type = TrgSourceMap[trg_source_names[index]].value
84 self.set_trigger(trigger_type, self.trigger_mode)
85
86 self.add_setting(
87 "trig source",
88 "enum",
89 lambda: TrgSourceMap(self._trigger_type).name,
90 _trigger_source_setter,
91 trg_source_names,
92 )
93 self.add_setting(
94 "AWB",
95 "enum",
96 lambda: self._awb_modes[self.get_awb_mode()],
97 lambda awb: self.set_awb_mode(awb),
98 values=(list(self._awb_modes.keys())),
99 )
100
101 self.add_setting(
102 "ISO",
103 "enum",
104 lambda: self._iso_modes.index(self.camera.iso),
105 lambda iso: self.set_iso_mode(iso),
106 values=(self._iso_modes),
107 )
108
109 # self.add_setting(
110 # "pixel size",
111 # "float",
112 # lambda: self._pixel_size,
113 # lambda pxsz: setattr(self, "_pixel_size", pxsz),
114 # # technically should be: (nextafter(0.0, inf), nextafter(inf, 0.0))
115 # values=(0.0, float("inf")),
116 # )
117 self.initialize()
118

References microscope.cameras.picam.PiCamera.__init__(), microscope.abc.DataDevice._acquiring, microscope.cameras.andorsdk3.AndorSDK3._acquiring(), microscope.cameras.atmcd.AndorAtmcd._acquiring(), microscope.cameras.picam.PiCamera._acquiring, microscope.cameras.pvcam.PVCamera._acquiring, microscope.cameras.ximea.XimeaCamera._acquiring, microscope.simulators.SimulatedCamera._acquiring, microscope.cameras.picam.PiCamera._awb_modes, microscope.cameras.andorsdk3.AndorSDK3._exposure_time, microscope.cameras.picam.PiCamera._exposure_time, microscope.simulators.SimulatedCamera._exposure_time, microscope.cameras.picam.PiCamera._iso_modes, microscope.cameras.picam.PiCamera._queue, microscope.testsuite.test_device_server.DeviceServerExceptionQueue._queue, microscope.cameras.picam.PiCamera._trigger_type, microscope.mirror.alpao.AlpaoDeformableMirror._trigger_type, microscope.cameras.picam.PiCamera._triggered, microscope.simulators.SimulatedCamera._triggered, microscope.simulators.stage_aware_camera.StageAwareCamera._triggered, microscope.abc.Device.add_setting(), microscope.cameras.picam.PiCamera.camera, microscope.cameras.picam.PiCamera.cycle_time, microscope.cameras.pvcam.PVCamera.cycle_time, microscope.cameras.picam.PiCamera.exposure_time, microscope.cameras.pvcam.PVCamera.exposure_time, microscope.cameras.picam.PiCamera.get_awb_mode(), microscope.abc.Device.initialize(), microscope.cameras.andorsdk3.AndorSDK3.initialize(), microscope.cameras.atmcd.AndorAtmcd.initialize(), microscope.cameras.picam.PiCamera.initialize(), microscope.cameras.pvcam.PVCamera.initialize(), microscope.cameras.ximea.XimeaCamera.initialize(), microscope.lights.cobolt.CoboltLaser.initialize(), microscope.lights.obis.ObisLaser.initialize(), microscope.lights.sapphire.SapphireLaser.initialize(), microscope.testsuite.devices.TestFloatingDevice.initialize(), microscope.cameras.picam.PiCamera.roi, microscope.cameras.pvcam.PVCamera.roi, microscope.cameras.picam.PiCamera.set_awb_mode(), microscope.cameras.picam.PiCamera.set_iso_mode(), microscope._utils.OnlyTriggersOnceOnSoftwareMixin.set_trigger(), microscope._utils.OnlyTriggersBulbOnSoftwareMixin.set_trigger(), microscope.abc.TriggerTargetMixin.set_trigger(), microscope.cameras.andorsdk3.AndorSDK3.set_trigger(), microscope.cameras.atmcd.AndorAtmcd.set_trigger(), microscope.cameras.pvcam.PVCamera.set_trigger(), microscope.cameras.ximea.XimeaCamera.set_trigger(), microscope.controllers.coolled._CoolLEDChannel.set_trigger(), microscope.controllers.toptica._iChromeLaser.set_trigger(), microscope.lights.deepstar.DeepstarLaser.set_trigger(), microscope.lights.obis.ObisLaser.set_trigger(), microscope.cameras.picam.PiCamera.set_trigger(), microscope.mirror.alpao.AlpaoDeformableMirror.set_trigger(), microscope._utils.OnlyTriggersOnceOnSoftwareMixin.trigger_mode(), microscope._utils.OnlyTriggersBulbOnSoftwareMixin.trigger_mode(), microscope.abc.TriggerTargetMixin.trigger_mode(), microscope.cameras.andorsdk3.AndorSDK3.trigger_mode(), microscope.cameras.atmcd.AndorAtmcd.trigger_mode(), microscope.cameras.picam.PiCamera.trigger_mode(), microscope.cameras.pvcam.PVCamera.trigger_mode(), microscope.cameras.ximea.XimeaCamera.trigger_mode(), microscope.controllers.coolled._CoolLEDChannel.trigger_mode(), microscope.controllers.toptica._iChromeLaser.trigger_mode(), microscope.lights.deepstar.DeepstarLaser.trigger_mode(), microscope.lights.obis.ObisLaser.trigger_mode(), and microscope.mirror.alpao.AlpaoDeformableMirror.trigger_mode().

Referenced by microscope.cameras.picam.PiCamera.__init__().

Member Function Documentation

◆ abort()

◆ get_awb_mode()

def microscope.cameras.picam.PiCamera.get_awb_mode (   self)

Definition at line 119 of file picam.py.

119 def get_awb_mode(self):
120 return self.camera.awb_mode
121

Referenced by microscope.cameras.picam.PiCamera.__init__().

◆ get_cycle_time()

def microscope.cameras.picam.PiCamera.get_cycle_time (   self)
Return the cycle time in seconds.

Reimplemented from microscope.abc.Camera.

Definition at line 247 of file picam.py.

247 def get_cycle_time(self):
248 # fudge to make it work initially
249 # exposure times are in us, so multiple by 1E-6 to get seconds.
250 return self.camera.exposure_speed * 1.0e-6 + 0.1
251

References microscope.abc.DataDevice._acquiring, microscope.cameras.andorsdk3.AndorSDK3._acquiring(), microscope.cameras.atmcd.AndorAtmcd._acquiring(), microscope.cameras.picam.PiCamera._acquiring, microscope.cameras.pvcam.PVCamera._acquiring, microscope.cameras.ximea.XimeaCamera._acquiring, microscope.simulators.SimulatedCamera._acquiring, microscope.cameras.picam.PiCamera._queue, microscope.testsuite.test_device_server.DeviceServerExceptionQueue._queue, microscope.cameras.picam.PiCamera._set_roi(), microscope.abc.Camera._set_roi(), microscope.cameras.ximea.XimeaCamera._set_roi(), microscope.cameras.andorsdk3.AndorSDK3._set_roi(), microscope.cameras.atmcd.AndorAtmcd._set_roi(), microscope.cameras.pvcam.PVCamera._set_roi(), microscope.simulators.SimulatedCamera._set_roi(), microscope.cameras.picam.PiCamera.camera, microscope.cameras.picam.PiCamera.camversion, microscope.cameras.andorsdk3.AndorSDK3.soft_trigger(), microscope.cameras.atmcd.AndorAtmcd.soft_trigger(), microscope.cameras.picam.PiCamera.soft_trigger(), microscope.cameras.pvcam.PVCamera.soft_trigger(), microscope.cameras.ximea.XimeaCamera.soft_trigger(), and microscope.simulators.SimulatedCamera.soft_trigger().

◆ get_exposure_time()

def microscope.cameras.picam.PiCamera.get_exposure_time (   self)
Return the current exposure time in seconds.

Reimplemented from microscope.abc.Camera.

Definition at line 243 of file picam.py.

243 def get_exposure_time(self):
244 # exposure times are in us, so multiple by 1E-6 to get seconds.
245 return self.camera.exposure_speed * 1.0e-6
246

References microscope.cameras.picam.PiCamera.camera.

◆ HW_trigger()

def microscope.cameras.picam.PiCamera.HW_trigger (   self,
  channel 
)
Function called by GPIO interupt, needs to trigger image capture

Definition at line 130 of file picam.py.

130 def HW_trigger(self, channel):
131 """Function called by GPIO interupt, needs to trigger image capture"""
132 with picamera.array.PiYUVArray(self.camera) as output:
133 self.camera.capture(output, format="yuv", use_video_port=False)
134 self._queue.put(output.array[:, :, 0])
135

References microscope.cameras.picam.PiCamera._queue, microscope.testsuite.test_device_server.DeviceServerExceptionQueue._queue, and microscope.cameras.picam.PiCamera.camera.

Referenced by microscope.cameras.picam.PiCamera.set_trigger().

◆ initialize()

def microscope.cameras.picam.PiCamera.initialize (   self)
Initialise the Pi Camera camera.
Open the connection, connect properties and populate settings dict.

Reimplemented from microscope.abc.Device.

Definition at line 144 of file picam.py.

144 def initialize(self):
145 """Initialise the Pi Camera camera.
146 Open the connection, connect properties and populate settings dict.
147 """
148 if not self.camera:
149 try:
150 # initialise camera in still image mode.
151 self.camera = picamera.PiCamera(sensor_mode=2)
152 except:
153 raise Exception("Problem opening camera.")
154 _logger.info("Initializing camera.")
155 self.camversion = self.camera.revision
156 _logger.info("cam version " + self.camversion)
157
158 # create img buffer to hold images.
159 # disable camera LED by default
160 self.setLED(False)
161 self.set_awb_mode(0) # set auto white balance to off
162 self._get_sensor_shape()
163

References microscope.abc.DataDevice._acquiring, microscope.cameras.andorsdk3.AndorSDK3._acquiring(), microscope.cameras.atmcd.AndorAtmcd._acquiring(), microscope.cameras.picam.PiCamera._acquiring, microscope.cameras.pvcam.PVCamera._acquiring, microscope.cameras.ximea.XimeaCamera._acquiring, microscope.simulators.SimulatedCamera._acquiring, microscope.abc.Device._do_disable(), microscope.cameras.andorsdk3.AndorSDK3._do_disable(), microscope.cameras.atmcd.AndorAtmcd._do_disable(), microscope.cameras.picam.PiCamera._do_disable(), microscope.cameras.pvcam.PVCamera._do_disable(), microscope.cameras.ximea.XimeaCamera._do_disable(), microscope.controllers.toptica._iChromeLaser._do_disable(), microscope.controllers.zaber._ZaberLED._do_disable(), microscope.filterwheels.aurox.Clarity._do_disable(), microscope.lights.deepstar.DeepstarLaser._do_disable(), microscope.lights.obis.ObisLaser._do_disable(), microscope.simulators.SimulatedCamera._do_disable(), microscope.simulators.SimulatedLightSource._do_disable(), microscope.abc.Camera._get_sensor_shape(), microscope.cameras.andorsdk3.AndorSDK3._get_sensor_shape(), microscope.cameras.atmcd.AndorAtmcd._get_sensor_shape(), microscope.cameras.picam.PiCamera._get_sensor_shape(), microscope.cameras.pvcam.PVCamera._get_sensor_shape(), microscope.cameras.ximea.XimeaCamera._get_sensor_shape(), microscope.simulators.SimulatedCamera._get_sensor_shape(), microscope.abc.DataDevice.abort(), microscope.cameras.andorsdk3.AndorSDK3.abort(), microscope.cameras.atmcd.AndorAtmcd.abort(), microscope.cameras.picam.PiCamera.abort(), microscope.cameras.pvcam.PVCamera.abort(), microscope.cameras.ximea.XimeaCamera.abort(), microscope.simulators.SimulatedCamera.abort(), microscope.cameras.picam.PiCamera.camera, microscope.cameras.picam.PiCamera.camversion, microscope.abc.Device.initialize(), microscope.cameras.andorsdk3.AndorSDK3.initialize(), microscope.cameras.atmcd.AndorAtmcd.initialize(), microscope.cameras.picam.PiCamera.initialize(), microscope.cameras.pvcam.PVCamera.initialize(), microscope.cameras.ximea.XimeaCamera.initialize(), microscope.lights.cobolt.CoboltLaser.initialize(), microscope.lights.obis.ObisLaser.initialize(), microscope.lights.sapphire.SapphireLaser.initialize(), microscope.testsuite.devices.TestFloatingDevice.initialize(), microscope.cameras.picam.PiCamera.set_awb_mode(), and microscope.cameras.picam.PiCamera.setLED().

Referenced by microscope.cameras.picam.PiCamera.__init__(), microscope.cameras.ximea.XimeaCamera.__init__(), and microscope.cameras.picam.PiCamera.initialize().

◆ make_safe()

def microscope.cameras.picam.PiCamera.make_safe (   self)

Definition at line 164 of file picam.py.

164 def make_safe(self):
165 if self._acquiring:
166 self.abort()
167

◆ set_awb_mode()

def microscope.cameras.picam.PiCamera.set_awb_mode (   self,
  val 
)

Definition at line 122 of file picam.py.

122 def set_awb_mode(self, val):
123 for key, value in self._awb_modes.items():
124 if value == val:
125 self.camera.awb_mode = key
126

Referenced by microscope.cameras.picam.PiCamera.__init__(), and microscope.cameras.picam.PiCamera.initialize().

◆ set_exposure_time()

def microscope.cameras.picam.PiCamera.set_exposure_time (   self,
  value 
)
Set the exposure time on the device in seconds.

Reimplemented from microscope.abc.Camera.

Definition at line 239 of file picam.py.

239 def set_exposure_time(self, value):
240 # exposure times are set in us.
241 self.camera.shutter_speed = int(value * 1.0e6)
242

References microscope.cameras.picam.PiCamera.camera.

◆ set_iso_mode()

def microscope.cameras.picam.PiCamera.set_iso_mode (   self,
  val 
)

Definition at line 127 of file picam.py.

127 def set_iso_mode(self, val):
128 self.camera.iso = self._iso_modes[val]
129

Referenced by microscope.cameras.picam.PiCamera.__init__().

◆ set_trigger()

None microscope.cameras.picam.PiCamera.set_trigger (   self,
TriggerType  ttype,
TriggerMode   tmode 
)
Set device for a specific trigger.

Reimplemented from microscope.abc.TriggerTargetMixin.

Definition at line 191 of file picam.py.

193 ) -> None:
194 if ttype == self._trigger_type:
195 return
196 elif ttype == TriggerType.SOFTWARE:
197 GPIO.remove_event_detect(GPIO_Trigger)
198 self._trigger_type = TriggerType.SOFTWARE
199 elif ttype == TriggerType.RISING_EDGE:
200 GPIO.add_event_detect(
201 GPIO_Trigger,
202 GPIO.RISING,
203 callback=self.HW_trigger,
204 bouncetime=10,
205 )
206 self._trigger_type = TriggerType.RISING_EDGE
207

References microscope.cameras.picam.PiCamera._trigger_type, microscope.mirror.alpao.AlpaoDeformableMirror._trigger_type, microscope.cameras.picam.PiCamera.HW_trigger(), microscope.cameras.picam.PiCamera.roi, and microscope.cameras.pvcam.PVCamera.roi.

Referenced by microscope.cameras.picam.PiCamera.__init__(), microscope.cameras.ximea.XimeaCamera.__init__(), and microscope.cameras.ximea.XimeaCamera.initialize().

◆ setLED()

def microscope.cameras.picam.PiCamera.setLED (   self,
  state = False 
)

Definition at line 236 of file picam.py.

236 def setLED(self, state=False):
237 GPIO.output(GPIO_CAMLED, state)
238

Referenced by microscope.cameras.picam.PiCamera.initialize().

◆ soft_trigger()

def microscope.cameras.picam.PiCamera.soft_trigger (   self)

Definition at line 263 of file picam.py.

263 def soft_trigger(self):
264 _logger.info(
265 "Trigger received; self._acquiring is %s." % self._acquiring
266 )
267 if self._acquiring:
268 with picamera.array.PiYUVArray(self.camera) as output:
269 self.camera.capture(output, format="yuv", use_video_port=False)
270 self._queue.put(output.array[:, :, 0])
271
272
273# ongoing implemetation notes
274
275# should be able to use rotation and hflip to set specific output image
276# rotations
277
278# roi's can be set with the zoom function, default is (0,0,1,1) meaning all the data.
279
280# Need to setup a buffer for harware triggered data aquisition so we can
281# call the acquisition and then download the data at our leasure

Referenced by microscope.cameras.picam.PiCamera.get_cycle_time().

◆ trigger_mode()

TriggerMode microscope.cameras.picam.PiCamera.trigger_mode (   self)

Reimplemented from microscope.abc.TriggerTargetMixin.

Definition at line 209 of file picam.py.

209 def trigger_mode(self) -> TriggerMode:
210 # if self._trigger_type==devices.TRIGGER_BEFORE:
211 return TriggerMode.ONCE
212

Referenced by microscope.cameras.picam.PiCamera.__init__(), and microscope.cameras.ximea.XimeaCamera.__init__().

◆ trigger_type()

TriggerType microscope.cameras.picam.PiCamera.trigger_type (   self)

Reimplemented from microscope.abc.TriggerTargetMixin.

Definition at line 217 of file picam.py.

217 def trigger_type(self) -> TriggerType:
218 return self._trigger_type
219

Referenced by microscope.cameras.ximea.XimeaCamera.__init__(), microscope.abc.DeformableMirror.apply_pattern(), and microscope.abc.TriggerTargetMixin.trigger().

Member Data Documentation

◆ camera

◆ camversion

microscope.cameras.picam.PiCamera.camversion

◆ cycle_time

microscope.cameras.picam.PiCamera.cycle_time

◆ exposure_time

◆ roi


The documentation for this class was generated from the following file: