document-image-extractor/main.py

80 lines
2.5 KiB
Python

import logging
from pathlib import Path
from document_image_extractor.cli import parse_args, apply_cli_overrides
from document_image_extractor.config import load_config
from document_image_extractor.logging_setup import setup_logging
from document_image_extractor.pipeline import list_input_files, process_file, SUPPORTED_EXTS
from document_image_extractor.report import log_file_report, accumulate_totals, log_summary
from document_image_extractor.utils.files import ensure_dir
logger = logging.getLogger("document_image_extractor")
def main():
args = parse_args()
cfg = load_config(Path(args.config_path))
cfg = apply_cli_overrides(cfg, args)
setup_logging(cfg)
paths = cfg["paths"]
runtime = cfg["runtime"]
input_path = Path(runtime["input_path"])
output_dir = Path(paths["output_dir"])
temp_dir = Path(paths["temp_dir"])
recursive = bool(runtime["recursive"])
if not input_path.exists():
if runtime.get("input_was_provided"):
logger.error("La ruta de entrada no existe: %s", input_path)
return
ensure_dir(input_path)
ensure_dir(output_dir)
ensure_dir(temp_dir)
logger.debug("Input path: %s", input_path.resolve())
logger.debug("Output dir: %s", output_dir.resolve())
logger.debug("Temp dir: %s", temp_dir.resolve())
logger.debug("Recursive: %s", recursive)
logger.debug("Supported extensions: %s", ", ".join(sorted(SUPPORTED_EXTS)))
logger.debug(
"Filters: min_kb=%s, min_width=%s, min_height=%s",
cfg["filters"]["min_kb"],
cfg["filters"]["min_width"],
cfg["filters"]["min_height"],
)
logger.debug("Output format: %s", cfg["output"]["format"])
logger.debug("Dedup enabled: %s", cfg["dedup"]["enabled"])
files = list_input_files(input_path, recursive=recursive)
if not files:
logger.warning(
"No se encontraron archivos soportados (%s) en: %s",
", ".join(sorted(SUPPORTED_EXTS)),
input_path.resolve(),
)
return
total = {"found": 0, "saved": 0, "duplicates": 0, "filtered_small": 0, "filtered_dims": 0, "errors": 0}
skipped = 0
failed = 0
for f in files:
stats = process_file(f, cfg)
log_file_report(f.name, stats)
if stats.get("skipped"):
skipped += 1
continue
if "error" in stats:
failed += 1
continue
accumulate_totals(total, stats)
log_summary(files=len(files), skipped=skipped, failed=failed, total=total)
if __name__== "__main__":
main()