Spaces:
Running
Running
File size: 1,944 Bytes
497c3ef | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 | """Run the structural OCR eval harness over a directory of saved outputs.
Each input is a saved provider response (a ``*.json`` file containing a
``document_annotation``), as produced by ``main.py``. Usage::
python scripts/run_eval.py path/to/outputs
python scripts/run_eval.py path/to/outputs --json report.json
"""
from __future__ import annotations
import argparse
import json
from pathlib import Path
from bl_ocr.eval.harness import evaluate_directory
PROJECT_ROOT = Path(__file__).resolve().parents[1]
DEFAULT_SCHEMA = PROJECT_ROOT / "schema.json"
def main(argv: list[str] | None = None) -> int:
parser = argparse.ArgumentParser(description=__doc__)
parser.add_argument("outputs_dir", help="Directory of saved OCR output JSON files.")
parser.add_argument("--schema", default=str(DEFAULT_SCHEMA), help="Path to schema.json.")
parser.add_argument("--json", dest="json_out", help="Optional path to write the full JSON report.")
args = parser.parse_args(argv)
summary = evaluate_directory(Path(args.outputs_dir), Path(args.schema))
data = summary.as_dict()
if args.json_out:
Path(args.json_out).write_text(json.dumps(data, ensure_ascii=False, indent=2), encoding="utf-8")
rates = data["rates"]
print(f"files evaluated: {data['total']}")
print(f" parse_pass: {data['parse_pass']}/{data['total']} ({rates['parse_pass']:.0%})")
print(f" schema_pass: {data['schema_pass']}/{data['total']} ({rates['schema_pass']:.0%})")
print(f" schema errors: {data['schema_error_total']}")
print(f" row_count_pass: {data['row_count_pass']}/{data['total']} ({rates['row_count_pass']:.0%})")
print(f" arithmetic_pass: {data['arithmetic_pass']}/{data['total']} ({rates['arithmetic_pass']:.0%})")
print(f" critical: {data['critical']}/{data['total']} ({rates['critical']:.0%})")
return 0
if __name__ == "__main__":
raise SystemExit(main())
|