utils: raspberrypi: ctt: Add alsc_only method

The ctt would not work if only passed alsc images.

Add alsc_only.py to run alsc calibration only, and modify check_imgs
to allow for no macbeth chart images.

Example usage would be ./alsc_only.py -i tuning-images/ -o sensor.json
with the same optional arguments as the original ctt.

Signed-off-by: William Vinnicombe <william.vinnicombe@raspberrypi.com>
Reviewed-by: David Plowman <david.plowman@raspberrypi.com>
Reviewed-by: Naushir Patuck <naush@raspberrypi.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
William Vinnicombe 2022-07-11 11:26:27 +01:00 committed by Laurent Pinchart
parent 91cf84fd4e
commit 79b4c1c51e
2 changed files with 46 additions and 5 deletions

View file

@ -0,0 +1,34 @@
#!/usr/bin/env python3
#
# SPDX-License-Identifier: BSD-2-Clause
#
# Copyright (C) 2022, Raspberry Pi (Trading) Limited
#
# alsc_only.py - alsc tuning tool
from ctt import *
if __name__ == '__main__':
"""
initialise calibration
"""
if len(sys.argv) == 1:
print("""
Pisp Camera Tuning Tool version 1.0
Required Arguments:
'-i' : Calibration image directory.
'-o' : Name of output json file.
Optional Arguments:
'-c' : Config file for the CTT. If not passed, default parameters used.
'-l' : Name of output log file. If not passed, 'ctt_log.txt' used.
""")
quit(0)
else:
"""
parse input arguments
"""
json_output, directory, config, log_output = parse_input()
run_ctt(json_output, directory, config, log_output, alsc_only=True)

View file

@ -668,7 +668,7 @@ class Camera:
- incorrect filename/extension - incorrect filename/extension
- images from different cameras - images from different cameras
""" """
def check_imgs(self): def check_imgs(self, macbeth=True):
self.log += '\n\nImages found:' self.log += '\n\nImages found:'
self.log += '\nMacbeth : {}'.format(len(self.imgs)) self.log += '\nMacbeth : {}'.format(len(self.imgs))
self.log += '\nALSC : {} '.format(len(self.imgs_alsc)) self.log += '\nALSC : {} '.format(len(self.imgs_alsc))
@ -676,10 +676,14 @@ class Camera:
""" """
check usable images found check usable images found
""" """
if len(self.imgs) == 0: if len(self.imgs) == 0 and macbeth:
print('\nERROR: No usable macbeth chart images found') print('\nERROR: No usable macbeth chart images found')
self.log += '\nERROR: No usable macbeth chart images found' self.log += '\nERROR: No usable macbeth chart images found'
return 0 return 0
elif len(self.imgs) == 0 and len(self.imgs_alsc) == 0:
print('\nERROR: No usable images found')
self.log += '\nERROR: No usable images found'
return 0
""" """
Double check that every image has come from the same camera... Double check that every image has come from the same camera...
""" """
@ -708,7 +712,7 @@ class Camera:
return 0 return 0
def run_ctt(json_output, directory, config, log_output): def run_ctt(json_output, directory, config, log_output, alsc_only=False):
""" """
check input files are jsons check input files are jsons
""" """
@ -770,6 +774,8 @@ def run_ctt(json_output, directory, config, log_output):
try: try:
Cam = Camera(json_output) Cam = Camera(json_output)
Cam.log_user_input(json_output, directory, config, log_output) Cam.log_user_input(json_output, directory, config, log_output)
if alsc_only:
disable = set(Cam.json.keys()).symmetric_difference({"rpi.alsc"})
Cam.disable = disable Cam.disable = disable
Cam.plot = plot Cam.plot = plot
Cam.add_imgs(directory, mac_config, blacklevel) Cam.add_imgs(directory, mac_config, blacklevel)
@ -783,8 +789,9 @@ def run_ctt(json_output, directory, config, log_output):
ccm also technically does an awb but it measures this from the macbeth ccm also technically does an awb but it measures this from the macbeth
chart in the image rather than using calibration data chart in the image rather than using calibration data
""" """
if Cam.check_imgs(): if Cam.check_imgs(macbeth=not alsc_only):
Cam.json['rpi.black_level']['black_level'] = Cam.blacklevel_16 if not alsc_only:
Cam.json['rpi.black_level']['black_level'] = Cam.blacklevel_16
Cam.json_remove(disable) Cam.json_remove(disable)
print('\nSTARTING CALIBRATIONS') print('\nSTARTING CALIBRATIONS')
Cam.alsc_cal(luminance_strength, do_alsc_colour) Cam.alsc_cal(luminance_strength, do_alsc_colour)