openflexure-microscope-server/hardware-specific-tests/picamera2/test_calibration.py
2025-12-02 16:26:15 +00:00

68 lines
3.1 KiB
Python

"""Test data collection from the Raspberry Picamera."""
import tempfile
from copy import deepcopy
from .cam_test_utils import camera_test_client
def test_calibration(picamera_thing, picamera_client):
"""Check that full auto calibrate completes and set the expected values."""
# Check the calibration_required property used by the calibration wizard
assert picamera_thing.calibration_required
# Save copy of default tuning file for end of test
original_default = deepcopy(picamera_thing.default_tuning)
# Tuning should start the same as the server is loading with no settings.
assert picamera_thing.default_tuning == picamera_thing.tuning
# The background detector isn't ready as there is no background image.
assert not picamera_thing.background_detector_status.ready
# Run full auto calibrate
picamera_client.full_auto_calibrate()
# After calibration it should report that calibration is no longer required
assert not picamera_thing.calibration_required
# The tuning files should be different
assert picamera_thing.default_tuning != picamera_thing.tuning
# The default should be unchanged
assert picamera_thing.default_tuning == original_default
assert picamera_thing.background_detector_status.ready
def test_tuning_is_persistent():
"""Check that tuning file adjustments are persistent."""
# First check full auto-calibrate is persistent if same save dir is used.
with tempfile.TemporaryDirectory() as tmpdir:
with camera_test_client(settings_folder=tmpdir) as client:
initial_tuning = deepcopy(client.tuning)
client.full_auto_calibrate()
calibrated_tuning = deepcopy(client.tuning)
# Full auto calibrate should have saved the tuning.
assert initial_tuning != calibrated_tuning
# Reload the camera and server from scratch
with camera_test_client(settings_folder=tmpdir) as client:
initial_tuning = deepcopy(client.tuning)
# On reload the initial tuning is as it was when calibrated last run
assert initial_tuning == calibrated_tuning
# Set the lens shading to be flat
client.flat_lens_shading()
flat_tuning = deepcopy(client.tuning)
assert flat_tuning != calibrated_tuning
# Reload to check the flat lst persists
with camera_test_client(settings_folder=tmpdir) as client:
initial_tuning = deepcopy(client.tuning)
# On reload the initial tuning the flat tuning
assert initial_tuning == flat_tuning
# Reset the lens shading to what is in the default tuning file
client.reset_lens_shading()
flat_tuning = deepcopy(client.tuning)
assert flat_tuning != calibrated_tuning
# Reload the one more time to check the reset lst persists
with camera_test_client(settings_folder=tmpdir) as client:
initial_tuning = deepcopy(client.tuning)
# On reload the initial tuning the flat tuning
assert initial_tuning == flat_tuning