libtuning: modules: Add initial CCM module
Implement a minimal ccm calibration module. For now it doesn't take the results from lsc into account and supports rkisp1 only. Signed-off-by: Paul Elder <paul.elder@ideasonboard.com> Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com> Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com> Reviewed-by: Daniel Scally <dan.scally@ideasonboard.com>
This commit is contained in:
parent
64d4e596a4
commit
721b976928
4 changed files with 78 additions and 1 deletions
6
utils/tuning/libtuning/modules/ccm/__init__.py
Normal file
6
utils/tuning/libtuning/modules/ccm/__init__.py
Normal file
|
@ -0,0 +1,6 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
#
|
||||||
|
# Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
|
||||||
|
|
||||||
|
from libtuning.modules.ccm.ccm import CCM
|
||||||
|
from libtuning.modules.ccm.rkisp1 import CCMRkISP1
|
41
utils/tuning/libtuning/modules/ccm/ccm.py
Normal file
41
utils/tuning/libtuning/modules/ccm/ccm.py
Normal file
|
@ -0,0 +1,41 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
#
|
||||||
|
# Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
|
||||||
|
# Copyright (C) 2024, Ideas on Board
|
||||||
|
#
|
||||||
|
# Base Ccm tuning module
|
||||||
|
|
||||||
|
from ..module import Module
|
||||||
|
|
||||||
|
from libtuning.ctt_ccm import ccm
|
||||||
|
import logging
|
||||||
|
|
||||||
|
logger = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
|
||||||
|
class CCM(Module):
|
||||||
|
type = 'ccm'
|
||||||
|
hr_name = 'CCM (Base)'
|
||||||
|
out_name = 'GenericCCM'
|
||||||
|
|
||||||
|
def __init__(self, debug: list):
|
||||||
|
super().__init__()
|
||||||
|
|
||||||
|
self.debug = debug
|
||||||
|
|
||||||
|
def do_calibration(self, images):
|
||||||
|
logger.info('Starting CCM calibration')
|
||||||
|
|
||||||
|
imgs = [img for img in images if img.macbeth is not None]
|
||||||
|
|
||||||
|
# todo: Take LSC calibration results into account.
|
||||||
|
cal_cr_list = None
|
||||||
|
cal_cb_list = None
|
||||||
|
|
||||||
|
try:
|
||||||
|
ccms = ccm(imgs, cal_cr_list, cal_cb_list)
|
||||||
|
except ArithmeticError:
|
||||||
|
logger.error('CCM calibration failed')
|
||||||
|
return None
|
||||||
|
|
||||||
|
return ccms
|
28
utils/tuning/libtuning/modules/ccm/rkisp1.py
Normal file
28
utils/tuning/libtuning/modules/ccm/rkisp1.py
Normal file
|
@ -0,0 +1,28 @@
|
||||||
|
# SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
#
|
||||||
|
# Copyright (C) 2024, Paul Elder <paul.elder@ideasonboard.com>
|
||||||
|
# Copyright (C) 2024, Ideas on Board
|
||||||
|
#
|
||||||
|
# Ccm module for tuning rkisp1
|
||||||
|
|
||||||
|
from .ccm import CCM
|
||||||
|
|
||||||
|
|
||||||
|
class CCMRkISP1(CCM):
|
||||||
|
hr_name = 'Crosstalk Correction (RkISP1)'
|
||||||
|
out_name = 'Ccm'
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
super().__init__(**kwargs)
|
||||||
|
|
||||||
|
# We don't need anything from the config file.
|
||||||
|
def validate_config(self, config: dict) -> bool:
|
||||||
|
return True
|
||||||
|
|
||||||
|
def process(self, config: dict, images: list, outputs: dict) -> dict:
|
||||||
|
output = {}
|
||||||
|
|
||||||
|
ccms = self.do_calibration(images)
|
||||||
|
output['ccms'] = ccms
|
||||||
|
|
||||||
|
return output
|
|
@ -14,6 +14,7 @@ from libtuning.parsers import YamlParser
|
||||||
from libtuning.generators import YamlOutput
|
from libtuning.generators import YamlOutput
|
||||||
from libtuning.modules.lsc import LSCRkISP1
|
from libtuning.modules.lsc import LSCRkISP1
|
||||||
from libtuning.modules.agc import AGCRkISP1
|
from libtuning.modules.agc import AGCRkISP1
|
||||||
|
from libtuning.modules.ccm import CCMRkISP1
|
||||||
|
|
||||||
|
|
||||||
coloredlogs.install(level=logging.INFO, fmt='%(name)s %(levelname)s %(message)s')
|
coloredlogs.install(level=logging.INFO, fmt='%(name)s %(levelname)s %(message)s')
|
||||||
|
@ -39,9 +40,10 @@ tuner.add(LSCRkISP1(
|
||||||
smoothing_function=lt.smoothing.MedianBlur(3),
|
smoothing_function=lt.smoothing.MedianBlur(3),
|
||||||
))
|
))
|
||||||
tuner.add(AGCRkISP1(debug=[lt.Debug.Plot]))
|
tuner.add(AGCRkISP1(debug=[lt.Debug.Plot]))
|
||||||
|
tuner.add(CCMRkISP1(debug=[lt.Debug.Plot]))
|
||||||
tuner.set_input_parser(YamlParser())
|
tuner.set_input_parser(YamlParser())
|
||||||
tuner.set_output_formatter(YamlOutput())
|
tuner.set_output_formatter(YamlOutput())
|
||||||
tuner.set_output_order([AGCRkISP1, LSCRkISP1])
|
tuner.set_output_order([AGCRkISP1, CCMRkISP1, LSCRkISP1])
|
||||||
|
|
||||||
if __name__ == '__main__':
|
if __name__ == '__main__':
|
||||||
sys.exit(tuner.run(sys.argv))
|
sys.exit(tuner.run(sys.argv))
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue