[PATCH v1 08/11] libtuning: module: awb: Add bayes AWB support
Paul Elder
paul.elder at ideasonboard.com
Tue Jan 14 01:22:49 CET 2025
On Mon, Jan 13, 2025 at 06:14:09PM -0600, Paul Elder wrote:
> On Thu, Jan 09, 2025 at 12:53:59PM +0100, Stefan Klug wrote:
> > To support the bayesian AWB algorithm in libtuning, the necessary data
> > needs to be collected and written to the tuning file.
> >
> > Prior probabilities and AwbModes are defined by the user and therefore
> > added to the example config file.
> >
> > Extend the output to also contain the necessary data for the bayesian
> > AWB algorithm.
> >
> > Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> > ---
> > utils/tuning/config-example.yaml | 34 +++++++++++++++++++-
> > utils/tuning/libtuning/modules/awb/awb.py | 16 +++++----
> > utils/tuning/libtuning/modules/awb/rkisp1.py | 21 ++++++++----
> > 3 files changed, 58 insertions(+), 13 deletions(-)
> >
> > diff --git a/utils/tuning/config-example.yaml b/utils/tuning/config-example.yaml
> > index 1b7f52cd2fff..30e88341df01 100644
> > --- a/utils/tuning/config-example.yaml
> > +++ b/utils/tuning/config-example.yaml
> > @@ -5,7 +5,39 @@ general:
> > do_alsc_colour: 1
> > luminance_strength: 0.5
> > awb:
> > - greyworld: 0
> > + # Algorithm can be either 'grey' or 'bayes'
> > + algorithm: bayes
> > + # priors is only used for the bayes algorithm
> > + priors:
> > + - lux: 0
> > + ct: [ 2000, 13000]
>
> I think s/]/ ]/ would be nicer.
>
> > + probability: [ 1.0, 1.0 ]
> > + AwbMode:
> > + AwbAuto:
> > + lo: 2500
> > + hi: 8000
> > + AwbIncandescent:
> > + lo: 2500
> > + hi: 3000
> > + AwbTungsten:
> > + lo: 3000
> > + hi: 3500
> > + AwbFluorescent:
> > + lo: 4000
> > + hi: 4700
> > + AwbIndoor:
> > + lo: 3000
> > + hi: 5000
> > + AwbDaylight:
> > + lo: 5500
> > + hi: 6500
> > + AwbCloudy:
> > + lo: 6500
> > + hi: 8000
> > + # One custom mode can be defined if needed
> > + #AwbCustom:
> > + # lo: 2000
> > + # hi: 1300
> > macbeth:
> > small: 1
> > show: 0
> > diff --git a/utils/tuning/libtuning/modules/awb/awb.py b/utils/tuning/libtuning/modules/awb/awb.py
> > index c154cf3b8609..0dc4f59dcb26 100644
> > --- a/utils/tuning/libtuning/modules/awb/awb.py
> > +++ b/utils/tuning/libtuning/modules/awb/awb.py
> > @@ -27,10 +27,14 @@ class AWB(Module):
> >
> > imgs = [img for img in images if img.macbeth is not None]
> >
> > - gains, _, _ = awb(imgs, None, None, False)
> > - gains = np.reshape(gains, (-1, 3))
> > + ct_curve, transverse_pos, transverse_neg = awb(imgs, None, None, False)
> > + ct_curve = np.reshape(ct_curve, (-1, 3))
> > + gains = [{
> > + 'ct': int(v[0]),
> > + 'gains': [float(1.0 / v[1]), float(1.0 / v[2])]
> > + } for v in ct_curve]
> > +
> > + return {'colourGains': gains,
> > + 'transversePos': transverse_pos,
> > + 'transverseNeg': transverse_neg}
>
> I don't think we use transversePos and transverseNeg?
>
>
> Paul
>
> >
> > - return [{
> > - 'ct': int(v[0]),
> > - 'gains': [float(1.0 / v[1]), float(1.0 / v[2])]
> > - } for v in gains]
> > diff --git a/utils/tuning/libtuning/modules/awb/rkisp1.py b/utils/tuning/libtuning/modules/awb/rkisp1.py
> > index 0c95843b83d3..d562d26eb8cc 100644
> > --- a/utils/tuning/libtuning/modules/awb/rkisp1.py
> > +++ b/utils/tuning/libtuning/modules/awb/rkisp1.py
> > @@ -6,9 +6,6 @@
> >
> > from .awb import AWB
> >
> > -import libtuning as lt
> > -
> > -
> > class AWBRkISP1(AWB):
> > hr_name = 'AWB (RkISP1)'
> > out_name = 'Awb'
> > @@ -20,8 +17,20 @@ class AWBRkISP1(AWB):
> > return True
> >
> > def process(self, config: dict, images: list, outputs: dict) -> dict:
> > - output = {}
> > -
> > - output['colourGains'] = self.do_calculation(images)
> > + if not 'awb' in config['general']:
> > + raise ValueError('AWB configuration missing')
> > + awb_config = config['general']['awb']
> > + algorithm = awb_config['algorithm']
> > +
> > + output = {'algorithm': algorithm}
> > + data = self.do_calculation(images)
> > + if algorithm == 'grey':
> > + output['colourGains'] = data['colourGains']
> > + elif algorithm == 'bayes':
> > + output['AwbMode'] = awb_config['AwbMode']
> > + output['priors'] = awb_config['priors']
> > + output.update(data)
Oh nvm I found it :)
Reviewed-by: Paul Elder <paul.elder at ideasonboard.com>
> > + else:
> > + raise ValueError(f"Unknown AWB algorithm {output['algorithm']}")
> >
> > return output
> > --
> > 2.43.0
> >
More information about the libcamera-devel
mailing list