مهايئ RapidOCR للنماذج المحلية

للاستدلال داخل العملية (in-process) عبر ONNX مع تخزين مؤقت، استخدم مهايئ RapidOCR لمكتبة DLL الأصلية مع HPDFCreateRapidOCRDLLOCREngine وTHPDFRapidOCRDLLOptions

يوفّر المهايئ الأصلي إعدادات THPDFRapidOCRDLLOptions.ForLanguage الجاهزة للصينية المبسطة والتقليدية والإنجليزية واللغات اللاتينية واليابانية والكورية واللغات السيريلية بما فيها الروسية واللغات العربية واللغات الديفاناغارية

يوفر HPDFRapidOCRRecognition مهايئ عمليات على Windows ينفّذ IHPDFOCREngine في بنيات Delphi و C++Builder و FPC/Lazarus لـ Win32 و Win64

جهّز Python مع حزمتي rapidocr وonnxruntime، وجسر tools/OCR/rapidocr_tsv.py المرفق، ونماذج ONNX محلية متوافقة؛ والمهايئ لا يثبّت الحزم ولا يُنزّل النماذج أو القواميس أو الخطوط

يعمل Python في عملية خفية منفصلة، لذا قد تختلف بنيته عن بنية التطبيق المستدعي؛ ويجب أن تطابق حزمة ONNX Runtime لديه بنية Python نفسه

النسخ الزائدة للمصنع

function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
  ModelDirectory: string; TimeoutMilliseconds: Cardinal = 60000): IHPDFOCREngine; overload;
function HPDFCreateRapidOCREngine(const PythonExecutable, BridgeScript,
  ModelDirectory: string; const Options: THPDFRapidOCROptions): IHPDFOCREngine; overload;

تبقى نسخة المهلة الأصلية متوافقة مع بروتوكول الجسر الحالي وتستخدم أسماء ملفات نماذج PP-OCRv4 الثلاثة الافتراضية؛ وتتحقق من مسارات الملف التنفيذي والسكربت والدليل عند الإنشاء، ومن توفر النماذج لدى العامل (worker)

تتحقق نسخة الخيارات من كل نموذج مطلوب ومن قاموس اختياري ومن الخط المحلي قبل إعادة المهايئ؛ والملفات المفقودة أو الخيارات غير الصالحة ترفع EArgumentException قبل بدء التعرف

تُفسَّر مسارات النماذج والقواميس والخطوط النسبية بالنسبة إلى ModelDirectory؛ ويمكن للمسارات المطلقة أن تشير إلى ملفات مُجهَّزة بشكل منفصل

استخدم نماذج متوافقة مع خط أنابيب RapidOCR للكشف والتصنيف والتعرف بـ CTC؛ والنموذج القادم من خط أنابيب OCR آخر قد يتطلب معالجة مسبقة مختلفة، ولا يصح اختياره لمجرد أنه بصيغة ONNX

اختيار النماذج حسب اللغة

يظل مهايئ عمليات Python يستخدم مسارات THPDFRapidOCROptions الصريحة؛ وForLanguage ينتمي إلى record خيارات مكتبة DLL الأصلية وليس تابعًا لمهايئ Python

جهّز نماذج اللغات والقواميس محليًا بالأمر tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic، أو اختر -Language All لتثبيت ملفات اللغات التسعة كلها

يتحقق المساعد من بصمات SHA256 المثبتة مسبقًا ويضع كل مُعرِّف في <profile>/recognition.onnx مع <profile>/dictionary.txt المطابق له؛ ويبقى التعرف وقت التشغيل دون اتصال دون تنزيلات تلقائية

للروسية استخدم cyrillic/recognition.onnx وcyrillic/dictionary.txt؛ والصينية المبسطة تستخدم الملف الجانبي ch بينما تستخدم التقليدية chinese_cht

Models := THPDFRapidOCROptions.Default;
Models.DetectionModel := 'ch_PP-OCRv3_det_infer.onnx';
Models.RecognitionModel := 'cyrillic/recognition.onnx';
Models.CharacterDictionary := 'cyrillic/dictionary.txt';
Models.ClassificationModel := 'ch_ppocr_mobile_v2.0_cls_infer.onnx';

أسماء الملفات الجذرية للكاشف والمصنِّف أعلاه تطابق النماذج المشتركة لدى مساعد التجهيز؛ ووفّر نموذج التعرف والقاموس المتطابقين معًا، واختر محركًا منفصلًا للصفحات أو المناطق التي تحتاج نظام كتابة آخر

الخيارات والقيم الافتراضية

THPDFRapidOCROptions = record
  DetectionModel: string;
  RecognitionModel: string;
  ClassificationModel: string;
  CharacterDictionary: string;
  FontPath: string;
  UseAngleClassifier: Boolean;
  IntraOpThreads: Integer;
  InterOpThreads: Integer;
  MaxPixels: Integer;
  TimeoutMilliseconds: Cardinal;
  class function Default: THPDFRapidOCROptions; static;
end;

هيّئ الـ record بالقيمة THPDFRapidOCROptions.Default قبل تعديل الحقول

الحقلالافتراضيالمعنى
DetectionModelch_PP-OCRv4_det_mobile.onnxنموذج الكشف المحلي
RecognitionModelch_PP-OCRv4_rec_mobile.onnxنموذج التعرف المحلي
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxمطلوب فقط عند تفعيل تصنيف الزوايا
CharacterDictionaryفارغاستخدم بيانات المحارف الفوقية المضمّنة في نموذج التعرف؛ ووفّر قاموسًا محليًا عندما يفتقد النموذج تلك البيانات
FontPathفارغيُفسَّر إلى %WINDIR%\Fonts\arial.ttf لحاوية نتائج RapidOCR
UseAngleClassifierTrueتفعيل تصنيف زاوية النص؛ وعند تعطيله لا يُطلب نموذج تصنيف ولا يُمرَّر
IntraOpThreads1خيوط ONNX داخل العملية الواحدة، من 1 إلى 64، بسقف يساوي عدد معالجات CPU المنطقية لدى العامل
InterOpThreads1خيوط ONNX بين العمليات بالحدود نفسها
MaxPixels16777216ميزانية بكسلات المُدخل، من 1 إلى 67,108,864
TimeoutMilliseconds60000الموعد النهائي الكلي للطلبية، من 1 إلى 3,600,000 ميلي ثانية

يختار الجسر صراحةً واجهة CPU في ONNX Runtime لكل المراحل ويعطّل التنزيلات التلقائية؛ وغياب قاموس المحارف المضمّن يستلزم توفير CharacterDictionary محلي

مثال بنماذج مختارة صراحةً

uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;

procedure AddLocalRapidOCRText(PDF: THotPDF);
var
  Engine: IHPDFOCREngine;
  Models: THPDFRapidOCROptions;
  Layer: THPDFOCRTextLayerOptions;
  Info: THPDFOCRTextLayerInfo;
begin
  Models := THPDFRapidOCROptions.Default;
  Models.DetectionModel := 'PP-OCRv6_det_small.onnx';
  Models.RecognitionModel := 'PP-OCRv6_rec_small.onnx';
  Models.UseAngleClassifier := False;
  Engine := HPDFCreateRapidOCREngine(
    'C:\OCR\Python\python.exe',
    'C:\HotPDF\tools\OCR\rapidocr_tsv.py',
    'C:\OCR\models', Models);
  Layer := THPDFOCRTextLayerOptions.Default;
  if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
    raise Exception.Create('Local RapidOCR text layer was not added');
end;

النتائج والميزانيات والإلغاء

تُسلسل كل طلبية الـbitmap المُستعار في دليل مؤقت خاص، وتشغّل عامل Python محليًا، وتنظف مقابض العملية والملفات المؤقتة عند انتهاء الطلبية

تتحقق نسخة الخيارات من MaxPixels قبل تسلسل الـbitmap؛ ويتحقق العامل أيضًا من أبعاد المُدخل قبل تحميل النماذج ويتلقى حدي MaxWords وMaxTextCodeUnits الخاصين بالطلبية

يطلب الجسر إحداثيات المحارف ويتحقق من هندسة كل محرف ودرجة ثقته وتغطيته للنص، ثم يُصدر كل سطر مكتمل التعرف بمسافاته الداخلية وعلامات ترقيمه الأصلية وبحدود محيطة ببكسلات الصورة الأصلية وبمتوسط ثقة في المدى من 0 إلى 1

يستهلك كل سطر مُصدَر مقعدًا واحدًا من MaxWords؛ وتُحتسب المسافات الداخلية ضمن MaxTextCodeUnits، ونشر السطر كاملًا يمنع طبقة النص من الخلط بين تباعد الحروف وتباعد الكلمات

تُحفظ المسافات من نص السطر لدى المُعرِّف؛ والنص الذي يقسّمه الكشف إلى صناديق منفصلة يبقى متوقفًا على استنتاج فجوات الكلمات مكانيًا، وقد تعيد برامج قراءة PDF الخارجية بناء المسافات المتكررة أو ضغطها أثناء الاستخراج

تستهلك المحارف التكميلية وحدتي UTF-16؛ والإحداثيات غير الصالحة أو الثقة أو محارف التحكم أو الميزانيات المستنفَدة تجعل التعرف يفشل وتمسح النتائج الجزئية

تنجح الصفحة الفارغة بمصفوفة كلمات فارغة؛ ولا يُوفَّر خط أساس أصلي، فتعتمد طبقة النص على بديل الهندسة الحالي لديها

تُستطلع حالة الإلغاء والمهلة وأحجام المخرجات كل 25 ميلي ثانية؛ وتحيط مهمة Windows بالعامل وبعمليات المفسّر الابنة، وينتظر الإنهاء حتى خمس ثوانٍ إضافية لتنظيف العمليات

تنشر ApplyLoadedOCRTextLayer كل الصفحات المختارة ذريًا بعد نجاح التعرف

يقتصر خرج TSV على 64 MiB والخرج التشخيصي على 1 MiB؛ وميزانيات المُدخل والمخرج لا تفرض سقفًا صارمًا على ذاكرة نموذج ONNX أو الاستدلال

تجري تهيئة النموذج في عملية Python جديدة لكل طلبية، وتُحتسب ضمن الموعد النهائي

التحقق

تغطي مشغّلات المهايئات المشتركة لـ Delphi و FPC فحص النماذج المسبق والمسارات المخصصة والتصنيف الاختياري وUnicode والميزانيات وفشل العامل والإلغاء والمهلة؛ ومعاملات RapidOCR الاختيارية لديها تتيح تعرفًا حقيقيًا وفحوص ذهاب وإياب لملف PDF قابل للبحث

استخدم Tests/Delphi/Run-TesseractRecognitionTests.ps1 أو Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 مع -RapidOCRPython و-RapidOCRModelDirectory و-RapidOCRDetectionModel و-RapidOCRRecognitionModel

راجع طبقات نص OCR القابلة للبحث لخيارات الرسم وربط نص Unicode بـ PDF وتجميع المحتوى الاختياري وحدود المطابقة