Apply suggestions from code review of branch jpeg-capture-in-stacking
Co-authored-by: Beth Probert <beth_probert@outlook.com>
This commit is contained in:
parent
0751457ed3
commit
83e0e08ccc
3 changed files with 17 additions and 16 deletions
|
|
@ -250,6 +250,7 @@ class BaseCamera(Thing):
|
|||
try:
|
||||
image.save(jpeg_path, quality=95, subsampling=0)
|
||||
try:
|
||||
# Load EXIF metadata from image so it can be added to.
|
||||
exif_dict = piexif.load(jpeg_path)
|
||||
exif_dict["Exif"][piexif.ExifIFD.UserComment] = json.dumps(
|
||||
metadata
|
||||
|
|
|
|||
|
|
@ -152,7 +152,7 @@ class StreamingPiCamera2(BaseCamera):
|
|||
tolerance of current value. This allows ignoring small changes
|
||||
"""
|
||||
if key not in self.persistent_control_tolerances:
|
||||
# Not tolerance range set, so it is not within tollerance
|
||||
# Not tolerance range set, so it is not within tolerance
|
||||
return False
|
||||
|
||||
difference = np.abs(self.persistent_controls[key] - value)
|
||||
|
|
@ -419,7 +419,7 @@ class StreamingPiCamera2(BaseCamera):
|
|||
)
|
||||
|
||||
@thing_action
|
||||
def stop_streaming(self, stop_web_stream=True) -> None:
|
||||
def stop_streaming(self, stop_web_stream: bool = True) -> None:
|
||||
"""
|
||||
Stop the MJPEG stream
|
||||
"""
|
||||
|
|
@ -617,7 +617,7 @@ class StreamingPiCamera2(BaseCamera):
|
|||
self.update_persistent_controls()
|
||||
|
||||
@thing_action
|
||||
def calibrate_lens_shading(self):
|
||||
def calibrate_lens_shading(self) -> None:
|
||||
"""Take an image and use it for flat-field correction.
|
||||
|
||||
This method requires an empty (i.e. bright) field of view. It will take
|
||||
|
|
@ -643,7 +643,7 @@ class StreamingPiCamera2(BaseCamera):
|
|||
)
|
||||
|
||||
@colour_correction_matrix.setter # type: ignore
|
||||
def colour_correction_matrix(self, value):
|
||||
def colour_correction_matrix(self, value) -> None:
|
||||
self.thing_settings["colour_correction_matrix"] = value
|
||||
self.calibrate_colour_correction(value)
|
||||
|
||||
|
|
@ -664,14 +664,14 @@ class StreamingPiCamera2(BaseCamera):
|
|||
self.colour_correction_matrix = c
|
||||
|
||||
@thing_action
|
||||
def calibrate_colour_correction(self, c: tuple):
|
||||
def calibrate_colour_correction(self, c: tuple) -> None:
|
||||
"""Overwrite the colour correction matrix in camera tuning"""
|
||||
with self.picamera(pause_stream=True):
|
||||
recalibrate_utils.set_static_ccm(self.tuning, c)
|
||||
self.initialise_picamera()
|
||||
|
||||
@thing_action
|
||||
def set_static_green_equalisation(self, offset: int = 65535):
|
||||
def set_static_green_equalisation(self, offset: int = 65535) -> None:
|
||||
"""Set the green equalisation to a static value.
|
||||
|
||||
Green equalisation avoids the debayering algorithm becoming confused
|
||||
|
|
@ -686,7 +686,7 @@ class StreamingPiCamera2(BaseCamera):
|
|||
self.initialise_picamera()
|
||||
|
||||
@thing_action
|
||||
def full_auto_calibrate(self):
|
||||
def full_auto_calibrate(self) -> None:
|
||||
"""Perform a full auto-calibration
|
||||
|
||||
This function will call the other calibration actions in sequence:
|
||||
|
|
@ -704,7 +704,7 @@ class StreamingPiCamera2(BaseCamera):
|
|||
self.calibrate_white_balance()
|
||||
|
||||
@thing_action
|
||||
def flat_lens_shading(self):
|
||||
def flat_lens_shading(self) -> None:
|
||||
"""Disable flat-field correction
|
||||
|
||||
This method will set a completely flat lens shading table. It is not the
|
||||
|
|
@ -786,7 +786,7 @@ class StreamingPiCamera2(BaseCamera):
|
|||
)
|
||||
|
||||
@thing_action
|
||||
def flat_lens_shading_chrominance(self):
|
||||
def flat_lens_shading_chrominance(self) -> None:
|
||||
"""Disable flat-field correction
|
||||
|
||||
This method will set the chrominance of the lens shading table to be
|
||||
|
|
@ -801,7 +801,7 @@ class StreamingPiCamera2(BaseCamera):
|
|||
self.initialise_picamera()
|
||||
|
||||
@thing_action
|
||||
def reset_lens_shading(self):
|
||||
def reset_lens_shading(self) -> None:
|
||||
"""Revert to default lens shading settings
|
||||
|
||||
This method will restore the default "adaptive" lens shading method used
|
||||
|
|
|
|||
|
|
@ -69,13 +69,13 @@ def load_default_tuning(cam: Picamera2) -> dict:
|
|||
tuning_dir = "/usr/share/libcamera/ipa/raspberrypi"
|
||||
# from picamera2 v0.3.9
|
||||
# The directory above has been removed from the search path seems
|
||||
# find odd - as that's where the files currently are on a default
|
||||
# odd - as that's where the files currently are on a default
|
||||
# Raspbian image. This may need updating if the files have moved
|
||||
# in future updates to the system libcamera package
|
||||
return cam.load_tuning_file(fname, dir=tuning_dir)
|
||||
|
||||
|
||||
def set_minimum_exposure(camera: Picamera2):
|
||||
def set_minimum_exposure(camera: Picamera2) -> None:
|
||||
"""Enable manual exposure, with low gain and shutter speed
|
||||
|
||||
We set exposure mode to manual, analog and digital gain
|
||||
|
|
@ -135,7 +135,7 @@ def test_exposure_settings(camera: Picamera2, percentile: float) -> ExposureTest
|
|||
return result
|
||||
|
||||
|
||||
def check_convergence(test: ExposureTest, target: int, tolerance: float):
|
||||
def check_convergence(test: ExposureTest, target: int, tolerance: float) -> bool:
|
||||
"""Check whether the brightness is within the specified target range"""
|
||||
return abs(test.level - target) < target * tolerance
|
||||
|
||||
|
|
@ -222,7 +222,7 @@ def adjust_shutter_and_gain_from_raw(
|
|||
|
||||
# Check the gain is still changing - if not, we have probably hit the maximum
|
||||
if camera.capture_metadata()["AnalogueGain"] == test.analog_gain:
|
||||
logging.info(f"Gain has maxed out. at {test.analog_gain}")
|
||||
logging.info(f"Gain has maxed out at {test.analog_gain}")
|
||||
break
|
||||
|
||||
if check_convergence(test, target_white_level, tolerance):
|
||||
|
|
@ -504,7 +504,7 @@ def index_of_algorithm(algorithms: list[dict], algorithm: str) -> int:
|
|||
raise ValueError(f"Algorithm {algorithm} is not available.")
|
||||
|
||||
|
||||
def copy_alsc_section(from_tuning: dict, to_tuning: dict):
|
||||
def copy_alsc_section(from_tuning: dict, to_tuning: dict) -> None:
|
||||
"""Copy the `rpi.alsc` algorithm from one tuning to another.
|
||||
|
||||
This is done in-place, i.e. modifying to_tuning.
|
||||
|
|
@ -544,7 +544,7 @@ def raw_channels_from_camera(camera: Picamera2) -> LensShadingTables:
|
|||
return channels_from_bayer_array(raw_image)
|
||||
|
||||
|
||||
def recreate_camera_manager():
|
||||
def recreate_camera_manager() -> None:
|
||||
"""Delete and recreate the camera manager.
|
||||
|
||||
This is necessary to ensure the tuning file is re-read.
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue