مستودع OCR المشترك — محرك قواعد "ميثاق الأدلة البصرية" (18 قاعدة) + تصحيحات طبية عربية + محركات OCR + معالجة مسبقة/لاحقة + معايير قياس.
- هيكل المستودع (stage 2)
- نقل محرك القواعد (stage 3)
- التصحيحات العربية (stage 4)
- محرك Tesseract (stage 5)
- محرك PaddleOCR منقول من omni-medical-suite — extra:
pip install .[paddle] - محرك EasyOCR منقول من omni-medical-suite — extra:
pip install .[easyocr] - EnsembleEngine + EngineRouter + telemetry (PR #6)
- Preprocess (scanner_fixer) (PR #6) — extra:
pip install .[preprocess] - Postprocess طبي: normalization / field_extractor / deduplication (PR #6)
- Benchmarks: suite كاملة + ci_suite (بوابات CER/WER، A/B) (PR #6)
- التكامل مع marathon_ted_pipeline (PR #14 مدموج — shim + pin)
- التكامل الكامل مع omni-medical-suite (استهلاك ocr-core بدل المكررات)
- خط الأنابيب الموحد ست المراحل + إعادة التعرف الانتقائي (clean-room — docs/research/abbyy_features.md)
- Medical Region Editor UI (PR in progress) — optional PySide6 extra:
pip install -e ".[ui]" - نظام الأوامر الموحد (Command Pattern — 34 أمرًا في 8 فئات + CLI) — docs/commands.md
- كشف كلمات الخط اليدوي: word_detector (ONNX/projection/heuristic) + line_grouper (RTL) — extra:
pip install .[word-detect]— docs/word_detection.md - محرك jina-ocr-v1 (VLM للمستندات الكاملة) — extra:
pip install .[jina]—⚠️ الأوزان CC BY-NC 4.0 — docs/jina_ocr_v1.md
| المسار | الوظيفة |
|---|---|
ocr_core.rules |
محرك قواعد الميثاق — الافتراضي المدمج: ocr_core/config/marathon_ocr_rules.yaml (ميثاق v2) مع pre-pass شقيق text_normalization_rules.yaml (18 قاعدة) |
ocr_core.engines |
base (OCREngine/OCRResult) + tesseract + paddle + easyocr + ensemble + router |
ocr_core.preprocess |
crop/deskew/rotate/enhance/normalize/dedup/text_dedup/pipeline |
ocr_core.postprocess |
corrections_ar (311 زوجًا) + normalization + field_extractor + deduplication + medical_terms.json |
ocr_core.benchmarks |
suite القياس الكاملة + ci_suite (threshold_checker + ab_testing) |
ocr_core.pipeline |
خط الأنابيب الموحد: Preprocess → Layout → Recognition → Page Synthesis → Document Synthesis → Export — أوضاع التخطيط simple/complex/tables/auto |
ocr_core.regional |
إعادة التعرف الانتقائي على منطقة محددة (bbox بصيغتي xywh وxyxy) |
ocr_core.postprocess.arabic_rtl |
نقطة ربط RTL/العربية لخط الأنابيب (تفويض حرفي لـ rtl_utils) |
ocr_core.rtl_utils |
معالجة العربية RTL (خرائط مبنية وقت الاستيراد) |
ocr_core.telemetry |
سجل قرارات مهيكل (بديل decision_log) |
ocr_core.commands |
نظام الأوامر الموحد: Command/Registry/Executor/Pipeline/ExecutionContext — 34 أمرًا (io, preprocess, ocr, postprocess, export, benchmark, detect, vlm) + محوّل CLI (ocr-core list/describe/run/pipeline) |
ocr_core.preprocess.word_detector |
كشف كلمات الخط اليدوي: OnnxWordDetector (xournalpp-htr) / ProjectionDetector / HeuristicDetector + مصنع create_detector |
ocr_core.preprocess.line_grouper |
تجميع الكلمات في سطور بترتيب القراءة (RTL/LTR) |
ocr_core.engines.jina_vlm |
محرك jina-ocr-v1 (VLM end-to-end → Markdown/LaTeX/HTML — بلا bounding boxes). تحميل كسول؛ الأوزان CC BY-NC 4.0 |
سياسة الثقة: الثقة 0.0 = مجهولة — لا تُختلق أبدًا (engines/base.py). المحركات تبلّغ الأخطاء عبر OCRResult.error ولا ترفع استثناءات.
pip install -e ".[dev,preprocess,benchmarks]" # لتشغيل مجموعة الاختبارات كاملة (كما في CI)
# optional engines / modules
pip install -e ".[tesseract]" # pytesseract
pip install -e ".[paddle]" # PaddleOCR
pip install -e ".[easyocr]" # EasyOCR
pip install -e ".[preprocess]" # opencv-headless + imagehash + rapidfuzz
pip install -e ".[benchmarks]" # rapidfuzz + click + rich
pip install -e ".[all]" # الكلfrom ocr_core.rules.engine import OCRProcessor
p = OCRProcessor() # الافتراضي: ocr_core/config/marathon_ocr_rules.yaml (ميثاق v2)
# التجاوز: OCRProcessor(rules_file=...) أو المتغير البيئي MARATHON_OCR_RULES
from ocr_core.engines.paddle import PaddleEngine
r = PaddleEngine().process_image("scan.png") # r.error عند غياب paddleocr
from ocr_core.engines.tesseract import TesseractEngine
from ocr_core.engines.ensemble import EnsembleEngine
ens = EnsembleEngine({"tesseract": TesseractEngine(), "paddle": PaddleEngine()})
best = ens.process_image("scan.png") # أفضل نتيجة: ثقة×طول×صلاحية
from ocr_core.preprocess import fix_scan
fixed = fix_scan("scan.png") # crop → deskew → rotate → denoise → enhance
from ocr_core.postprocess.field_extractor import ArabicMedicalFieldExtractor
fields = ArabicMedicalFieldExtractor().extract_fields(fixed_text)معظم الوحدات منقولة من omni-medical-suite (MIT) مع انحرافات موثقة داخل docstrings كل وحدة — التفاصيل في PR #6.
إذا كان هدفك هو فهم كيفية عمل خوارزميات OCR العربية والإنجليزية لأغراض تعليمية أو بحثية، فإن المجتمع مفتوح المصدر يوفر أدوات ممتازة يمكنك دراستها، تفكيكها، وتعديل كودها المصدري بشكل قانوني تماماً:
- المحرك الأكثر شهرة ومفتوح المصدر (ترخيص Apache 2.0).
- يمكنك دراسة الكود المصدري لكيفية معالجة الصور، وتقسيم الصفحات، وخوارزميات التعرف (LSTM).
- يدعم اللغة العربية بشكل جيد، ويمكنك فحص ملفات تدريب اللغة العربية (
.traineddata) وفهم هيكلتها.
- مشروع مفتوح المصدر قوي جداً من Baidu (ترخيص Apache 2.0).
- يوفر بنية معمارية حديثة تعتمد على الشبكات العصبية (مثل DBNet للكشف عن النصوص، و CRNN/SVTR للتعرف عليها).
- الكود مفتوح بالكامل، ويحتوي على نماذج مدربة مسبقاً للغة العربية يمكنك دراستها وتحليل أدائها.
- بدلاً من محاولة استخراج خوارزميات مغلقة، يمكنك البحث في منصات مثل arXiv عن أوراق بحثية حول "Arabic OCR Deep Learning" أو "Scene Text Recognition". هذه الأوراق تشرح الخوارزميات الرياضية والمعمارية بدقة وتفصيل علمي.