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.modules.lsc import LSCRkISP1
|
||||
from libtuning.modules.agc import AGCRkISP1
|
||||
from libtuning.modules.ccm import CCMRkISP1
|
||||
|
||||
|
||||
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),
|
||||
))
|
||||
tuner.add(AGCRkISP1(debug=[lt.Debug.Plot]))
|
||||
tuner.add(CCMRkISP1(debug=[lt.Debug.Plot]))
|
||||
tuner.set_input_parser(YamlParser())
|
||||
tuner.set_output_formatter(YamlOutput())
|
||||
tuner.set_output_order([AGCRkISP1, LSCRkISP1])
|
||||
tuner.set_output_order([AGCRkISP1, CCMRkISP1, LSCRkISP1])
|
||||
|
||||
if __name__ == '__main__':
|
||||
sys.exit(tuner.run(sys.argv))
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue