ITS: 1x correction on test_exposure.py if needed
Other changes:
Use f-strings for clarity
Create variable for plot names
Add logging in capture_request_utils for tonemap
Correct 'exposure' variable to 'exp_sens_prod' in target_exposure_utils
Files affected:
test_exposure.py
capture_request_utils.py
target_exposure_utils.py
bug: 226647031
Change-Id: I22fb88499b10922e78252fc76a36e30ea26e29ae
diff --git a/apps/CameraITS/utils/target_exposure_utils.py b/apps/CameraITS/utils/target_exposure_utils.py
index 65e53ec..c50ceee 100644
--- a/apps/CameraITS/utils/target_exposure_utils.py
+++ b/apps/CameraITS/utils/target_exposure_utils.py
@@ -56,85 +56,82 @@
if its_session is None:
with its_session_utils.ItsSession() as cam:
- exposure = get_target_exposure(target_config_filename, cam)
+ exp_sens_prod = get_target_exposure(target_config_filename, cam)
props = cam.get_camera_properties()
props = cam.override_with_hidden_physical_camera_props(props)
else:
- exposure = get_target_exposure(target_config_filename, its_session)
+ exp_sens_prod = get_target_exposure(target_config_filename, its_session)
props = its_session.get_camera_properties()
props = its_session.override_with_hidden_physical_camera_props(props)
- sens_range = props['android.sensor.info.sensitivityRange']
- exp_time_range = props['android.sensor.info.exposureTimeRange']
+ sens_range = props['android.sensor.info.sensitivityRange']
+ exp_time_range = props['android.sensor.info.exposureTimeRange']
+ logging.debug('Target exposure*sensitivity: %d', exp_sens_prod)
+ logging.debug('sensor exp time range: %s', str(exp_time_range))
+ logging.debug('sensor sensitivity range: %s', str(sens_range))
- # Combo 1: smallest legal exposure time.
- e1_expt = exp_time_range[0]
- e1_sens = int(exposure / e1_expt)
- if e1_sens > sens_range[1]:
- e1_sens = sens_range[1]
- e1_expt = int(exposure / e1_sens)
- e1_logging = (f'MinExp exp: {e1_expt}, sens: {e1_sens}')
- logging.debug('%s', e1_logging)
+ # Combo 1: smallest legal exposure time.
+ e1_expt = exp_time_range[0]
+ e1_sens = int(exp_sens_prod / e1_expt)
+ if e1_sens > sens_range[1]:
+ e1_sens = sens_range[1]
+ e1_expt = int(exp_sens_prod / e1_sens)
+ logging.debug('minExposureTime e: %d, s: %d', e1_expt, e1_sens)
- # Combo 2: largest legal exposure time.
- e2_expt = exp_time_range[1]
- e2_sens = int(exposure / e2_expt)
- if e2_sens < sens_range[0]:
- e2_sens = sens_range[0]
- e2_expt = int(exposure / e2_sens)
- e2_logging = (f'MaxExp exp: {e2_expt}, sens: {e2_sens}')
- logging.debug('%s', e2_logging)
+ # Combo 2: largest legal exposure time.
+ e2_expt = exp_time_range[1]
+ e2_sens = int(exp_sens_prod / e2_expt)
+ if e2_sens < sens_range[0]:
+ e2_sens = sens_range[0]
+ e2_expt = int(exp_sens_prod / e2_sens)
+ logging.debug('maxExposureTime e: %d, s: %d', e2_expt, e2_sens)
- # Combo 3: smallest legal sensitivity.
- e3_sens = sens_range[0]
- e3_expt = int(exposure / e3_sens)
- if e3_expt > exp_time_range[1]:
- e3_expt = exp_time_range[1]
- e3_sens = int(exposure / e3_expt)
- e3_logging = (f'MinISO exp: {e3_expt}, sens: {e3_sens}')
- logging.debug('%s', e3_logging)
+ # Combo 3: smallest legal sensitivity.
+ e3_sens = sens_range[0]
+ e3_expt = int(exp_sens_prod / e3_sens)
+ if e3_expt > exp_time_range[1]:
+ e3_expt = exp_time_range[1]
+ e3_sens = int(exp_sens_prod / e3_expt)
+ logging.debug('minSensitivity e: %d, s: %d', e3_expt, e3_sens)
- # Combo 4: largest legal sensitivity.
- e4_sens = sens_range[1]
- e4_expt = int(exposure / e4_sens)
- if e4_expt < exp_time_range[0]:
- e4_expt = exp_time_range[0]
- e4_sens = int(exposure / e4_expt)
- e4_logging = (f'MaxISO exp: {e4_expt}, sens: {e4_sens}')
- logging.debug('%s', e4_logging)
+ # Combo 4: largest legal sensitivity.
+ e4_sens = sens_range[1]
+ e4_expt = int(exp_sens_prod / e4_sens)
+ if e4_expt < exp_time_range[0]:
+ e4_expt = exp_time_range[0]
+ e4_sens = int(exp_sens_prod / e4_expt)
+ logging.debug('maxSensitivity e: %d, s: %d', e4_expt, e4_sens)
- # Combo 5: middle exposure time.
- e5_expt = int((exp_time_range[0] + exp_time_range[1]) / 2.0)
- e5_sens = int(exposure / e5_expt)
- if e5_sens > sens_range[1]:
- e5_sens = sens_range[1]
- e5_expt = int(exposure / e5_sens)
- if e5_sens < sens_range[0]:
- e5_sens = sens_range[0]
- e5_expt = int(exposure / e5_sens)
- e5_logging = (f'MidExp exp: {e5_expt}, sens: {e5_sens}')
- logging.debug('%s', e5_logging)
+ # Combo 5: middle exposure time.
+ e5_expt = int((exp_time_range[0] + exp_time_range[1]) / 2.0)
+ e5_sens = int(exp_sens_prod / e5_expt)
+ if e5_sens > sens_range[1]:
+ e5_sens = sens_range[1]
+ e5_expt = int(exp_sens_prod / e5_sens)
+ if e5_sens < sens_range[0]:
+ e5_sens = sens_range[0]
+ e5_expt = int(exp_sens_prod / e5_sens)
+ logging.debug('midExposureTime e: %d, s: %d', e5_expt, e5_sens)
- # Combo 6: middle sensitivity.
- e6_sens = int((sens_range[0] + sens_range[1]) / 2.0)
- e6_expt = int(exposure / e6_sens)
- if e6_expt > exp_time_range[1]:
- e6_expt = exp_time_range[1]
- e6_sens = int(exposure / e6_expt)
- if e6_expt < exp_time_range[0]:
- e6_expt = exp_time_range[0]
- e6_sens = int(exposure / e6_expt)
- e6_logging = (f'MidISO exp: {e6_expt}, sens: {e6_sens}')
- logging.debug('%s', e6_logging)
+ # Combo 6: middle sensitivity.
+ e6_sens = int((sens_range[0] + sens_range[1]) / 2.0)
+ e6_expt = int(exp_sens_prod / e6_sens)
+ if e6_expt > exp_time_range[1]:
+ e6_expt = exp_time_range[1]
+ e6_sens = int(exp_sens_prod / e6_expt)
+ if e6_expt < exp_time_range[0]:
+ e6_expt = exp_time_range[0]
+ e6_sens = int(exp_sens_prod / e6_expt)
+ logging.debug('midSensitivity e: %d, s: %d', e6_expt, e6_sens)
- return {
- 'minExposureTime': (e1_expt, e1_sens),
- 'maxExposureTime': (e2_expt, e2_sens),
- 'minSensitivity': (e3_expt, e3_sens),
- 'maxSensitivity': (e4_expt, e4_sens),
- 'midExposureTime': (e5_expt, e5_sens),
- 'midSensitivity': (e6_expt, e6_sens)
- }
+ return {
+ 'minExposureTime': (e1_expt, e1_sens),
+ 'maxExposureTime': (e2_expt, e2_sens),
+ 'minSensitivity': (e3_expt, e3_sens),
+ 'maxSensitivity': (e4_expt, e4_sens),
+ 'midExposureTime': (e5_expt, e5_sens),
+ 'midSensitivity': (e6_expt, e6_sens)
+ }
def get_target_exposure(target_config_filename, its_session=None):
@@ -149,7 +146,7 @@
its_session: Optional, holding an open device session.
Returns:
- The target exposure value.
+ The target exposure*sensitivity value.
"""
cached_exposure = None
for s in sys.argv[1:]:
@@ -257,6 +254,7 @@
cap)
tile = image_processing_utils.get_image_patch(yimg, 0.45, 0.45, 0.1, 0.1)
luma_mean = image_processing_utils.compute_image_means(tile)
+ logging.debug('Target exposure cap luma: %.4f', luma_mean[0])
# Compute the exposure value that would result in a luma of 0.5.
return sens * exp_time * 0.5 / luma_mean[0]