libtuning: Improve filename parsing

In the tuning datasets, the files had names like
'imx335_1600l_3000k_1.dng'. That failed on the old filename parsing
function. As there is no need to dictate the order of the tags, split
the big regex into chunks and parse them one by one. This also makes
the code easier to digest.

Signed-off-by: Stefan Klug <stefan.klug@ideasonboard.com>
Reviewed-by: Paul Elder <paul.elder@ideasonboard.com>
Reviewed-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
This commit is contained in:
Stefan Klug 2024-06-11 09:09:40 +02:00
parent 22c7c1e560
commit 797f598502

View file

@ -43,16 +43,30 @@ def _list_image_files(directory):
def _parse_image_filename(fn: Path): def _parse_image_filename(fn: Path):
result = re.search(r'^(alsc_)?(\d+)[kK]_(\d+)?[lLuU]?.\w{3,4}$', fn.name) lsc_only = False
if result is None: color_temperature = None
logger.error(f'The file name of {fn.name} is incorrectly formatted') lux = None
return None, None, None
color = int(result.group(2)) parts = fn.stem.split('_')
lsc_only = result.group(1) is not None for part in parts:
lux = None if lsc_only else int(result.group(3)) if part == 'alsc':
lsc_only = True
continue
r = re.match(r'(\d+)[kK]', part)
if r:
color_temperature = int(r.group(1))
continue
r = re.match(r'(\d+)[lLuU]', part)
if r:
lux = int(r.group(1))
return color, lux, lsc_only if color_temperature is None:
logger.error(f'The file name of "{fn.name}" does not contain a color temperature')
if lux is None and lsc_only is False:
logger.error(f'The file name of "{fn.name}" must either contain alsc or a lux level')
return color_temperature, lux, lsc_only
# \todo Implement this from check_imgs() in ctt.py # \todo Implement this from check_imgs() in ctt.py