Deleted obsolete functions
This commit is contained in:
parent
414fd55c5b
commit
3b435ab2ee
1 changed files with 20 additions and 91 deletions
|
|
@ -50,97 +50,6 @@ def adjust_exposure_to_setpoint(camera: PiCamera, setpoint: int):
|
||||||
print("done")
|
print("done")
|
||||||
|
|
||||||
|
|
||||||
def adjust_exposure_and_gain(
|
|
||||||
camera: PiCamera, target_white_level: int = 700, max_iterations: int = 99
|
|
||||||
):
|
|
||||||
"""Adjust exposure and analog gain based on raw images.
|
|
||||||
|
|
||||||
This routine is slow but effective. It uses raw images, so we
|
|
||||||
are not affected by white balance or digital gain.
|
|
||||||
"""
|
|
||||||
# Start by setting fully manual exposure.
|
|
||||||
camera.exposure_mode = "off"
|
|
||||||
camera.iso = 0 # We must set ISO=0 (auto) or we can't set gain
|
|
||||||
camera.analog_gain = 1
|
|
||||||
camera.digital_gain = 1
|
|
||||||
camera.shutter_speed = 1 # This is not valid - we'll get the minimum
|
|
||||||
time.sleep(0.5)
|
|
||||||
|
|
||||||
# We start with very low exposure settings and work up in coarse steps
|
|
||||||
# until either the brightness is high enough, or we can't increase the
|
|
||||||
# shutter speed any more.
|
|
||||||
iterations = 0
|
|
||||||
while True:
|
|
||||||
iterations += 1
|
|
||||||
if iterations > max_iterations:
|
|
||||||
logging.warning(
|
|
||||||
f"Auto exposure is stopping after {max_iterations} "
|
|
||||||
"but it has not converged."
|
|
||||||
)
|
|
||||||
break
|
|
||||||
|
|
||||||
with PiBayerArray(camera) as a:
|
|
||||||
camera.capture(a, format="jpeg", bayer=True)
|
|
||||||
max_brightness = np.max(a.array)
|
|
||||||
|
|
||||||
if max_brightness > target_white_level:
|
|
||||||
break
|
|
||||||
|
|
||||||
previous_shutter_speed = camera.shutter_speed
|
|
||||||
camera.shutter_speed = previous_shutter_speed * 2
|
|
||||||
time.sleep(0.5)
|
|
||||||
current_shutter_speed = camera.shutter_speed
|
|
||||||
# NB we save this in a variable in case it changes between
|
|
||||||
# here and the next loop
|
|
||||||
logging.info(
|
|
||||||
f"Max brightness {max_brightness} < {target_white_level}. "
|
|
||||||
f"Attempting to double exposure from "
|
|
||||||
f"{previous_shutter_speed} to {current_shutter_speed}"
|
|
||||||
)
|
|
||||||
if current_shutter_speed == previous_shutter_speed:
|
|
||||||
logging.info("Shutter speed has saturated, stopping.")
|
|
||||||
break
|
|
||||||
|
|
||||||
if max_brightness > target_white_level:
|
|
||||||
logging.info("Brightness is high enough, fine-tuning")
|
|
||||||
camera.shutter_speed = int(
|
|
||||||
current_shutter_speed * target_white_level / max_brightness
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
def auto_expose_and_freeze_settings(camera: PiCamera):
|
|
||||||
"""Freeze the settings after auto-exposing to white illumination"""
|
|
||||||
logging.info("Allowing the camera to auto-expose")
|
|
||||||
if "greyworld" in camera.AWB_MODES:
|
|
||||||
logging.info("Calibrating with greyworld AWB")
|
|
||||||
camera.awb_mode = "greyworld"
|
|
||||||
else:
|
|
||||||
logging.warning("Calibrating with auto AWB as greyworld is missing")
|
|
||||||
camera.awb_mode = "auto"
|
|
||||||
camera.exposure_mode = "auto"
|
|
||||||
camera.iso = (
|
|
||||||
0 # This is important, if it's on a fixed ISO, gain might not set properly.
|
|
||||||
)
|
|
||||||
for _ in range(6):
|
|
||||||
print(".", end="")
|
|
||||||
time.sleep(0.5)
|
|
||||||
logging.info("done")
|
|
||||||
|
|
||||||
logging.info("Freezing the camera settings...")
|
|
||||||
camera.shutter_speed = camera.exposure_speed
|
|
||||||
logging.info("Shutter speed = %s", (camera.shutter_speed))
|
|
||||||
camera.exposure_mode = "off"
|
|
||||||
logging.info("Auto exposure disabled")
|
|
||||||
g: Tuple[Fraction, Fraction] = camera.awb_gains
|
|
||||||
camera.awb_mode = "off"
|
|
||||||
camera.awb_gains = g
|
|
||||||
logging.info("Auto white balance disabled, gains are %s", (g))
|
|
||||||
logging.info(
|
|
||||||
"Analogue gain: %s, Digital gain: %s", camera.analog_gain, camera.digital_gain
|
|
||||||
)
|
|
||||||
adjust_exposure_to_setpoint(camera, 215)
|
|
||||||
|
|
||||||
|
|
||||||
def adjust_shutter_and_gain_from_raw(
|
def adjust_shutter_and_gain_from_raw(
|
||||||
camera: PiCamera,
|
camera: PiCamera,
|
||||||
target_white_level: int = 700,
|
target_white_level: int = 700,
|
||||||
|
|
@ -152,6 +61,26 @@ def adjust_shutter_and_gain_from_raw(
|
||||||
|
|
||||||
This routine is slow but effective. It uses raw images, so we
|
This routine is slow but effective. It uses raw images, so we
|
||||||
are not affected by white balance or digital gain.
|
are not affected by white balance or digital gain.
|
||||||
|
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
target_white_level:
|
||||||
|
The raw, 10-bit value we aim for. The brightest pixels
|
||||||
|
should be approximately this bright. Maximum possible
|
||||||
|
is 1023, 700 is reasonable.
|
||||||
|
max_iterations:
|
||||||
|
We will terminate once we perform this many iterations,
|
||||||
|
whether or not we converge. More than 10 shouldn't happen.
|
||||||
|
tolerance:
|
||||||
|
How close to the target value we consider "done". Expressed
|
||||||
|
as a fraction of the ``target_white_level`` so 0.05 means
|
||||||
|
+/- 5%
|
||||||
|
percentile:
|
||||||
|
Rather then use the maximum value for each channel, we
|
||||||
|
calculate a percentile. This makes us robust to single
|
||||||
|
pixels that are bright/noisy. 99.9% still picks the top
|
||||||
|
of the brightness range, but seems much more reliable
|
||||||
|
than just ``np.max()``.
|
||||||
"""
|
"""
|
||||||
# Start by setting fully manual exposure.
|
# Start by setting fully manual exposure.
|
||||||
camera.exposure_mode = "off"
|
camera.exposure_mode = "off"
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue