OCR / scripts /validate_ocr.py
Zeyadmohamed21's picture
Deploy with CPU-only fix for ZeroGPU compatibility
a39757f verified
Raw History Blame Contribute Delete
2.28 kB
import os
import sys
# Auto-relaunch inside virtualenv if executed with global python
_root_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
_venv_python = os.path.join(_root_dir, "venv", "Scripts", "python.exe")
if os.path.exists(_venv_python) and os.path.abspath(sys.executable).lower() != os.path.abspath(_venv_python).lower():
import subprocess
sys.exit(subprocess.run([_venv_python] + sys.argv).returncode)
import json
# Fix Windows console UTF-8 encoding for Arabic characters
if sys.platform == "win32":
try:
sys.stdout.reconfigure(encoding="utf-8")
sys.stderr.reconfigure(encoding="utf-8")
except Exception:
pass
# Ensure app can be imported
sys.path.append(_root_dir)
from app.infrastructure.ocr.easyocr_engine import EasyOCREngine
import cv2
def run_validation():
print("Initializing EasyOCR Engine...")
engine = EasyOCREngine()
test_dir = os.path.join(_root_dir, 'tests')
images = ['ENGLISH.webp', 'ARABIC.jpg', 'arabic3.jpeg', 'test_id.jpg']
for img_name in images:
img_path = os.path.join(test_dir, img_name)
if not os.path.exists(img_path):
print(f"Skipping {img_name}: File not found.")
continue
print(f"\n{'='*50}\nTesting Image: {img_name}\n{'='*50}")
image = cv2.imread(img_path)
if image is None:
print(f"Failed to read image {img_name}")
continue
result = engine.process_image(image)
# We need to test the extraction logic as well
from app.services.structured_extraction import extract_id_fields
text_str = "\n".join([b.text for b in result.blocks])
fields = extract_id_fields(text_str)
print(f"Found {len(result.blocks)} text blocks.")
print(f"Average Confidence: {result.average_confidence:.4f}")
print(f"Total Time: {result.total_time_ms:.2f} ms")
print("\nExtracted Fields:")
print(json.dumps(fields, indent=2, ensure_ascii=False))
print("\nText Blocks:")
for idx, b in enumerate(result.blocks):
print(f" [{idx}] {b.text} (Conf: {b.confidence:.2f})")
if __name__ == "__main__":
run_validation()