| |
| """ |
| Quick OCR test — verify the ONNX engine works on sample images. |
| |
| Usage: |
| python tools/test_quick.py # test all images in working_space/input/ |
| python tools/test_quick.py path/to/image.png # test single image |
| """ |
|
|
| import sys |
| import time |
| from pathlib import Path |
|
|
| from PIL import Image |
|
|
| sys.path.insert(0, str(Path(__file__).parent.parent)) |
| from ocr.engine_onnx import OcrEngineOnnx |
|
|
|
|
| def test_image(engine: OcrEngineOnnx, path: Path) -> bool: |
| """Run OCR on one image and print results.""" |
| img = Image.open(path) |
| t0 = time.perf_counter() |
| result = engine.recognize_pil(img) |
| elapsed = (time.perf_counter() - t0) * 1000 |
|
|
| status = "OK" if result.text.strip() else "EMPTY" |
| text_short = result.text.replace("\n", " | ")[:80] |
|
|
| print(f" [{status}] {path.name:30s} {elapsed:6.0f}ms " |
| f"L={len(result.lines):2d} C={result.average_confidence:.0%} " |
| f'"{text_short}"') |
| return bool(result.text.strip()) |
|
|
|
|
| def main(): |
| if len(sys.argv) > 1: |
| paths = [Path(p) for p in sys.argv[1:]] |
| else: |
| input_dir = Path("working_space/input") |
| if not input_dir.exists(): |
| print(f"No images found. Place .png files in {input_dir}") |
| return |
| paths = sorted(input_dir.glob("*.png")) |
|
|
| if not paths: |
| print("No images to test.") |
| return |
|
|
| print(f"Testing {len(paths)} image(s)...\n") |
| engine = OcrEngineOnnx() |
|
|
| ok = sum(test_image(engine, p) for p in paths) |
| print(f"\n Result: {ok}/{len(paths)} images produced text") |
|
|
|
|
| if __name__ == "__main__": |
| main() |
|
|