Skip to content

Commit ce98b2f

Browse files
author
Ian Dobbie
committed
added auto white balance and iso settings, set to full res of v1 picamera
1 parent b99d23e commit ce98b2f

File tree

1 file changed

+49
-7
lines changed

1 file changed

+49
-7
lines changed

microscope/cameras/picam.py

Lines changed: 49 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -78,20 +78,58 @@ def __init__(self, *args, **kwargs):
7878
trg_source_names = [x.name for x in TrgSourceMap]
7979
#set up queue to store images as they are acquired
8080
self._queue = queue.Queue()
81-
81+
self._awb_modes= picamera.PiCamera.AWB_MODES
82+
self._iso_modes=[0, 100, 200, 320, 400, 500, 640, 800]
8283
def _trigger_source_setter(index: int) -> None:
8384
trigger_type = TrgSourceMap[trg_source_names[index]].value
8485
self.set_trigger(trigger_type, self.trigger_mode)
8586

8687
self.add_setting(
87-
"trigger source",
88+
"trig source",
8889
"enum",
8990
lambda: TrgSourceMap(self._trigger_type).name,
9091
_trigger_source_setter,
9192
trg_source_names,
9293
)
94+
self.add_setting(
95+
"AWB",
96+
"enum",
97+
lambda: self._awb_modes[self.get_awb_mode()],
98+
lambda awb: self.set_awb_mode(awb),
99+
values=(list(self._awb_modes.keys())),
100+
)
101+
102+
self.add_setting(
103+
"ISO",
104+
"enum",
105+
lambda: self._iso_modes.index(self.camera.iso),
106+
lambda iso: self.set_iso_mode(iso),
107+
values=(self._iso_modes),
108+
)
109+
110+
111+
# self.add_setting(
112+
# "pixel size",
113+
# "float",
114+
# lambda: self._pixel_size,
115+
# lambda pxsz: setattr(self, "_pixel_size", pxsz),
116+
# # technically should be: (nextafter(0.0, inf), nextafter(inf, 0.0))
117+
# values=(0.0, float("inf")),
118+
# )
93119
self.initialize()
94120

121+
def get_awb_mode(self):
122+
return(self.camera.awb_mode)
123+
124+
def set_awb_mode(self,val):
125+
for key , value in self._awb_modes.items():
126+
if value == val:
127+
self.camera.awb_mode= key
128+
129+
def set_iso_mode(self,val):
130+
self.camera.iso= self._iso_modes[val]
131+
132+
95133

96134
def HW_trigger(self,channel):
97135
'''Function called by GPIO interupt, needs to trigger image capture'''
@@ -118,11 +156,16 @@ def initialize(self):
118156
except:
119157
raise Exception("Problem opening camera.")
120158
_logger.info('Initializing camera.')
159+
self.camversion=self.camera.revision
160+
_logger.info('cam version '+self.camversion)
161+
121162
#create img buffer to hold images.
122163
#disable camera LED by default
123164
self.setLED(False)
165+
self.set_awb_mode(0) # set auto white balance to off
124166
self._get_sensor_shape()
125167

168+
126169
def make_safe(self):
127170
if self._acquiring:
128171
self.abort()
@@ -213,7 +256,10 @@ def get_cycle_time(self):
213256

214257

215258
def _get_sensor_shape(self):
216-
res=self.camera.resolution
259+
if self.camversion=='ov5647': #picam version 1
260+
self.camera.resolution=(2592,1944)
261+
#faqll back to defualt if not set above.
262+
res=self.camera.resolution
217263
self._set_roi(0,0,res[0],res[1])
218264
return (res)
219265
def _do_trigger(self):
@@ -229,10 +275,6 @@ def soft_trigger(self):
229275

230276

231277

232-
def HWtrigger(self, pin):
233-
_logger.info('HWTrigger received')
234-
235-
236278
#ongoing implemetation notes
237279

238280
#should be able to use rotation and hflip to set specific output image

0 commit comments

Comments
 (0)