[PATCH v1 5/6] libtuning: Add initial AWB module
Kieran Bingham
kieran.bingham at ideasonboard.com
Tue Aug 6 10:56:56 CEST 2024
Quoting Stefan Klug (2024-08-06 07:53:40)
> Hi Kieran,
>
> Thank you for the review.
>
> On Mon, Aug 05, 2024 at 02:50:54PM +0100, Kieran Bingham wrote:
> > Quoting Stefan Klug (2024-08-05 13:05:06)
> > > This AWB modules uses the awb function from Raspberry Pi to calculate
> > > the needed white balance gains per colour temperature. It stores these
> > > gains in the tuning file. Currently they are only used for the manual
> > > colour temperature control. It is likely that they will be used with
> > > more complex awb algorithms.
> > >
> > > Signed-off-by: Stefan Klug <stefan.klug at ideasonboard.com>
> > > ---
> > > .../tuning/libtuning/modules/awb/__init__.py | 6 +++
> > > utils/tuning/libtuning/modules/awb/awb.py | 42 +++++++++++++++++++
> > > utils/tuning/libtuning/modules/awb/rkisp1.py | 27 ++++++++++++
> > > 3 files changed, 75 insertions(+)
> > > create mode 100644 utils/tuning/libtuning/modules/awb/__init__.py
> > > create mode 100644 utils/tuning/libtuning/modules/awb/awb.py
> > > create mode 100644 utils/tuning/libtuning/modules/awb/rkisp1.py
> > >
> > > diff --git a/utils/tuning/libtuning/modules/awb/__init__.py b/utils/tuning/libtuning/modules/awb/__init__.py
> > > new file mode 100644
> > > index 000000000000..2d67f10cfc4f
> > > --- /dev/null
> > > +++ b/utils/tuning/libtuning/modules/awb/__init__.py
> > > @@ -0,0 +1,6 @@
> > > +# SPDX-License-Identifier: GPL-2.0-or-later
> > > +#
> > > +# Copyright (C) 2024, Ideas On Board
> > > +
> > > +from libtuning.modules.awb.awb import AWB
> > > +from libtuning.modules.awb.rkisp1 import AWBRkISP1
> > > diff --git a/utils/tuning/libtuning/modules/awb/awb.py b/utils/tuning/libtuning/modules/awb/awb.py
> > > new file mode 100644
> > > index 000000000000..5680a44fd3e3
> > > --- /dev/null
> > > +++ b/utils/tuning/libtuning/modules/awb/awb.py
> > > @@ -0,0 +1,42 @@
> > > +# SPDX-License-Identifier: GPL-2.0-or-later
> > > +#
> > > +# Copyright (C) 2024, Ideas On Board
> > > +
> > > +import logging
> > > +
> > > +from ..module import Module
> > > +
> > > +from libtuning.ctt_awb import awb
> > > +import numpy as np
> > > +
> > > +logger = logging.getLogger(__name__)
> > > +
> > > +
> > > +class AWB(Module):
> > > + type = 'awb'
> > > + hr_name = 'AWB (Base)'
> > > + out_name = 'GenericAWB'
> > > +
> > > + def __init__(self, *,
> > > + debug: list):
> > > + super().__init__()
> > > +
> > > + self.debug = debug
> > > +
> > > + def do_calculation(self, images):
> > > + logger.info('Starting AWB calculation')
> > > +
> > > + imgs = [img for img in images if img.macbeth is not None]
> > > +
> > > + gains, _, _ = awb(imgs, None, None, False)
> > > + gains = np.array(gains)
> > > + gains = gains.reshape(-1, 3)
> > > +
> > > + res = []
> > > + for v in gains:
> > > + res.append({
> > > + 'ct': int(v[0]),
> > > + 'gains': [float(1.0 / v[1]), float(1.0 / v[2])]
> > > + })
> > > +
> > > + return res
> > > diff --git a/utils/tuning/libtuning/modules/awb/rkisp1.py b/utils/tuning/libtuning/modules/awb/rkisp1.py
> > > new file mode 100644
> > > index 000000000000..e3ddeb50c9a1
> > > --- /dev/null
> > > +++ b/utils/tuning/libtuning/modules/awb/rkisp1.py
> > > @@ -0,0 +1,27 @@
> > > +# SPDX-License-Identifier: GPL-2.0-or-later
> > > +#
> > > +# Copyright (C) 2024, Ideas On Board
> > > +#
> > > +# AWB module for tuning rkisp1
> >
> > I think I'm not familiar enough yet with how we're handling platform
> > specific details here.
> >
> > Is there anything in this that is RkISP1 specific? Or will it be ?
> > It feels like these are generic so far...
>
> Valid point. At the moment I just follow the structure that was there
> before. On the other hand we do not yet know exactly where we end up
> (The Raspberry Pi awb section looks quite different from this one.) So
> maybe there is also a benefit in keeping it separate for now and to see
> which parts settle on a common denominator.
>
> I can merge it into one class if you like that more. Maybe Paul has an
> opinion on that.
I'll leave that to your discretion ... as long as we're considering
things!
Reviewed-by: Kieran Bingham <kieran.bingham at ideasonboard.com>
>
> Best regards,
> Stefan
>
> > > +
> > > +from .awb import AWB
> > > +
> > > +import libtuning as lt
> > > +
> > > +
> > > +class AWBRkISP1(AWB):
> > > + hr_name = 'AWB (RkISP1)'
> > > + out_name = 'Awb'
> > > +
> > > + def __init__(self, **kwargs):
> > > + super().__init__(**kwargs)
> > > +
> > > + def validate_config(self, config: dict) -> bool:
> > > + return True
> > > +
> > > + def process(self, config: dict, images: list, outputs: dict) -> dict:
> > > + output = {}
> > > +
> > > + output['gains'] = self.do_calculation(images)
> > > +
> > > + return output
> > > --
> > > 2.43.0
> > >
More information about the libcamera-devel
mailing list