Source code for colour_datasets.loaders.solomotav2023

"""
Camera Dataset - Solomatov and Akkaynak (2023)
==============================================

Defines the objects implementing support for *Solomatov and Akkaynak (2023)*
*Camera Dataset* dataset loading:

-   :class:`colour_datasets.loaders.DatasetLoader_Solomotav2023`
-   :func:`colour_datasets.loaders.build_Solomotav2023`

References
----------
-   :cite:`Solomotav2023` : Solomatov, G., & Akkaynak, D. (2023, July).
    Spectral sensitivity estimation without a camera. IEEE International
    Conference on Computational Photography (ICCP).
"""

from __future__ import annotations

import glob
import os

from colour.characterisation import RGB_CameraSensitivities
from colour.hints import Dict
from colour.io import read_sds_from_csv_file

from colour_datasets.loaders import AbstractDatasetLoader
from colour_datasets.records import datasets

__author__ = "Colour Developers"
__copyright__ = "Copyright 2019 Colour Developers"
__license__ = "BSD-3-Clause - https://opensource.org/licenses/BSD-3-Clause"
__maintainer__ = "Colour Developers"
__email__ = "colour-developers@colour-science.org"
__status__ = "Production"

__all__ = [
    "DatasetLoader_Solomotav2023",
    "build_Solomotav2023",
]


[docs] class DatasetLoader_Solomotav2023(AbstractDatasetLoader): """ Define the *Solomatov and Akkaynak (2023)* *Camera Dataset* dataset loader. Attributes ---------- - :attr:`colour_datasets.loaders.DatasetLoader_Solomotav2023.ID` Methods ------- - :meth:`colour_datasets.loaders.DatasetLoader_Solomotav2023.__init__` - :meth:`colour_datasets.loaders.DatasetLoader_Solomotav2023.load` References ---------- :cite:`Solomotav2023` """ ID: str = "8314702" """Dataset record id, i.e. the *Zenodo* record number.""" def __init__(self) -> None: super().__init__(datasets()[DatasetLoader_Solomotav2023.ID])
[docs] def load(self) -> Dict[str, Dict[str, RGB_CameraSensitivities]]: """ Sync, parse, convert and return the *Solomatov and Akkaynak (2023)* *Camera Dataset* dataset content. Returns ------- :class:`dict` *Solomatov and Akkaynak (2023)* *Camera Dataset* dataset content. Examples -------- >>> from colour_datasets.utilities import suppress_stdout >>> dataset = DatasetLoader_Solomotav2023() >>> with suppress_stdout(): ... dataset.load() >>> len(dataset.content.keys()) 2 >>> len(dataset.content["Estimated"].keys()) 1012 """ super().sync() self._content = {"Estimated": {}, "Ground Truth": {}} for key, path in [ ("Estimated", "csv"), ("Ground Truth", "ground-truths"), ]: csv_files = glob.glob( f'{os.path.join(self.record.repository, "dataset", path, path)}/' f"*.csv" ) for csv_file in csv_files: camera_name = os.path.splitext(os.path.basename(csv_file))[0].replace( "-", " " ) self._content[key][camera_name] = RGB_CameraSensitivities( read_sds_from_csv_file(csv_file), name=camera_name ) return self._content
_DATASET_LOADER_SOLOMOTAV2023: DatasetLoader_Solomotav2023 | None = None """ Singleton instance of the *Solomatov and Akkaynak (2023)* *Camera Dataset* dataset loader. """
[docs] def build_Solomotav2023(load: bool = True) -> DatasetLoader_Solomotav2023: """ Singleton factory that builds the *Solomatov and Akkaynak (2023)* *Camera Dataset* dataset loader. Parameters ---------- load Whether to load the dataset upon instantiation. Returns ------- :class:`colour_datasets.loaders.DatasetLoader_Solomotav2023` Singleton instance of the *Solomatov and Akkaynak (2023)* *Camera Dataset* dataset loader. References ---------- :cite:`Solomotav2023` """ global _DATASET_LOADER_SOLOMOTAV2023 # noqa: PLW0603 if _DATASET_LOADER_SOLOMOTAV2023 is None: _DATASET_LOADER_SOLOMOTAV2023 = DatasetLoader_Solomotav2023() if load: _DATASET_LOADER_SOLOMOTAV2023.load() return _DATASET_LOADER_SOLOMOTAV2023