80 lines
2.5 KiB
Python
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() |