Source code for src.cli

"""
Author: André Felipe da Silva Fernandes and Leonardo de Sousa Marques
Affiliation: Embedded Computing Lab (ECL), Federal University of Santa Catarina (UFSC)

Description:
    This module provides a command-line interface for executing the complete
    light field processing pipeline including format conversion, encoding,
    quality metrics computation, and visualization.
"""

import argparse

from lfc_toolkit.src import (
    compute_quality_metrics,
    equivalence_check,
    generate_heatmaps,
    generate_rd_plots,
    run_codecs,
    yuv_and_pgx_from_ppm,
)
from lfc_toolkit.src.configuration.configuration_reader import ConfigurationReader


[docs] def main() -> None: """Execute the complete light field processing pipeline via CLI. Provides command-line interface for running all processing scripts: 1. Converts light fields to YUV and PGX formats 2. Encodes light fields using specified codecs 3. Performs equivalence checks 4. Computes quality metrics 5. Generates rate-distortion plots 6. Generates quality heatmaps Supports command-line overrides for configuration paths. :return: None :rtype: None """ # Configuration argparser = argparse.ArgumentParser( description="LFC Toolkit CLI to run all scripts." ) argparser.add_argument( "--configuration", "-c", type=str, help="Path to the configuration file to be used.", ) argparser.add_argument( "--raw-path", "-raw", type=str, help="Path in which the RAW light fields will be or are stored. This path can also be set in the configuration file.", ) argparser.add_argument( "--ce-path", "-ce", type=str, help="Path in which the experiment results, codecs and other outputs will be stored. This path can also be set in the configuration file.", ) argparser.add_argument( "--lightfields", "-lfs", nargs="+", help="Specify which light fields to process, separating by space. This overrides the light fields specified in the configuration file.", ) argparser.add_argument( "--fulldocker", "-fulldocker", action="store_true", help="Disable Internal Docker for building and running codecs. This overrides the setting in the configuration file.", ) # Scripts argparser.add_argument( "--all", "-a", action="store_true", help="Run all scripts." ) argparser.add_argument( "--yuv-and-pgx-from-ppm", "-convert", action="store_true", help="Enable yuv_and_pgx_from_ppm.py script.", ) argparser.add_argument( "--run-codecs", "-codecs", action="store_true", help="Enable run_codecs.py script.", ) argparser.add_argument( "--quality-metrics", "-metrics", action="store_true", help="Enable compute_quality_metrics.py script.", ) argparser.add_argument( "--equivalence-check", "-equivalence", action="store_true", help="Enable equivalence_check.py script.", ) argparser.add_argument( "--generate-rd-plots", "-rd-plots", action="store_true", help="Enable generate_rd_plots.py script.", ) argparser.add_argument( "--generate-heatmaps", "-heatmaps", action="store_true", help="Enable generate_heatmaps.py script.", ) args = argparser.parse_args() if not args.configuration: argparser.error( "You must provide a configuration file using the --configuration (or -cfg) option." ) # Define aliases and lightfields aliases = {} lightfields = [] if args.raw_path: aliases["raw-path"] = args.raw_path if args.ce_path: aliases["ce-path"] = args.ce_path if args.lightfields: lightfields = args.lightfields # Pass aliases when creating the ConfigurationReader configuration = ConfigurationReader( user_configuration_filename=args.configuration, aliases=aliases, lightfields=lightfields ) # Determine which scripts to run # If no specific script is provided, default to --all script_flags = [ args.yuv_and_pgx_from_ppm, args.run_codecs, args.equivalence_check, args.quality_metrics, args.generate_rd_plots, args.generate_heatmaps, ] if not any(script_flags) and not args.all: args.all = True # If --all is set and no specific scripts are enabled, run all if args.all and not any(script_flags): args.yuv_and_pgx_from_ppm = True args.run_codecs = True args.equivalence_check = True args.quality_metrics = True args.generate_rd_plots = True args.generate_heatmaps = True # Execute only the enabled scripts if args.yuv_and_pgx_from_ppm: yuv_and_pgx_from_ppm.main(configuration) if args.run_codecs: run_codecs.main(configuration=configuration, fulldocker=args.fulldocker if args.fulldocker else None) if args.equivalence_check: equivalence_check.main(configuration) if args.quality_metrics: compute_quality_metrics.main(configuration) if args.generate_rd_plots: generate_rd_plots.main(configuration) if args.generate_heatmaps: generate_heatmaps.main(configuration) print("All scripts executed successfully.")
if __name__ == "__main__": main()