مهايئ 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 قبل تعديل الحقول
| الحقل | الافتراضي | المعنى |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | نموذج الكشف المحلي |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | نموذج التعرف المحلي |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | مطلوب فقط عند تفعيل تصنيف الزوايا |
CharacterDictionary | فارغ | استخدم بيانات المحارف الفوقية المضمّنة في نموذج التعرف؛ ووفّر قاموسًا محليًا عندما يفتقد النموذج تلك البيانات |
FontPath | فارغ | يُفسَّر إلى %WINDIR%\Fonts\arial.ttf لحاوية نتائج RapidOCR |
UseAngleClassifier | True | تفعيل تصنيف زاوية النص؛ وعند تعطيله لا يُطلب نموذج تصنيف ولا يُمرَّر |
IntraOpThreads | 1 | خيوط ONNX داخل العملية الواحدة، من 1 إلى 64، بسقف يساوي عدد معالجات CPU المنطقية لدى العامل |
InterOpThreads | 1 | خيوط ONNX بين العمليات بالحدود نفسها |
MaxPixels | 16777216 | ميزانية بكسلات المُدخل، من 1 إلى 67,108,864 |
TimeoutMilliseconds | 60000 | الموعد النهائي الكلي للطلبية، من 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 وتجميع المحتوى الاختياري وحدود المطابقة