مهايئ RapidOCR لمكتبة DLL الأصلية
يكشف HPDFRapidOCRRecognition واجهة IHPDFOCREngine داخل العملية مدعومةً بمكتبة HotPDFRapidOCR.dll، وبالواجهة العامة نفسها في بنيات Delphi و C++Builder و FPC/Lazarus على Windows لـ Win32 و Win64
تجري المكتبة استدلال ONNX على CPU مباشرةً فوق لقطات الذاكرة، وتحتفظ بالنماذج المهيأة حتى تُحرَّر واجهة المحرك؛ ونشر وقت التشغيل يتكون من مكتبة DLL الأصلية المطابقة ونماذج محلية وقاموس متوافقين
يبقى مهايئ عمليات Python متاحًا بنسخ مصنعه الأصلية
المصنع والخيارات
function HPDFCreateRapidOCRDLLOCREngine(const LibraryPath,
ModelDirectory: string): IHPDFOCREngine; overload;
function HPDFCreateRapidOCRDLLOCREngine(const LibraryPath,
ModelDirectory: string; const Options: THPDFRapidOCRDLLOptions): IHPDFOCREngine; overload;
THPDFRapidOCRDLLOptions = record
DetectionModel: string;
RecognitionModel: string;
ClassificationModel: string;
CharacterDictionary: string;
UseAngleClassifier: Boolean;
RightToLeft: Boolean;
Threads: Integer;
MaxPixels: Integer;
TimeoutMilliseconds: Cardinal;
class function Default: THPDFRapidOCRDLLOptions; static;
class function ForLanguage(const Language: string): THPDFRapidOCRDLLOptions; static;
end;
هيّئ الخيارات بالقيمة THPDFRapidOCRDLLOptions.Default؛ وتستخدم القيم الافتراضية الملفات المحلية التالية
| الحقل | الافتراضي | المعنى |
|---|---|---|
DetectionModel | ch_PP-OCRv3_det_infer.onnx | نموذج كشف DB |
RecognitionModel | ch_PP-OCRv3_rec_infer.onnx | نموذج تعرف CTC متوافق مع PP-OCRv3 أو PP-OCRv4 |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_infer.onnx | نموذج اختياري لاتجاه النص |
CharacterDictionary | ppocr_keys_v1.txt | قاموس UTF-8 بلا BOM، بترتيب محارف النموذج |
UseAngleClassifier | True | عند تعطيله لا يُطلب نموذج تصنيف ولا تُجرى تهيئة له |
RightToLeft | False | ترتيب الصناديق المكتشفة من اليمين إلى اليسار داخل الصفوف الأفقية؛ ويفعّله الإعداد الجاهز للعربية |
Threads | 1 | عدد خيوط ONNX على CPU من 1 إلى 64، بسقف يساوي عدد المعالجات المنطقية |
MaxPixels | 16777216 | حد بكسلات المُدخل، من 1 إلى 67,108,864 |
TimeoutMilliseconds | 60000 | الموعد النهائي التعاوني للتعرف، من 1 إلى 3,600,000 ميلي ثانية |
تُفسَّر أسماء الملفات النسبية بالنسبة إلى ModelDirectory؛ وقد تختار المسارات المطلقة ملفات مُجهَّزة بشكل منفصل
يتحقق المصنع من توفر الملفات ومن الخيارات ومن الـexports المطلوبة ومن إصدار ABI قبل تهيئة النماذج؛ والإعدادات غير الصالحة ترفع EArgumentException، وتعذّر تحميل النماذج يرفع EInvalidOperation مع تشخيص أصلي
تجري تهيئة النموذج داخل المصنع وتقع خارج الموعد النهائي للتعرف؛ ويجب أن يطابق عدد فئات القاموس نموذج التعرف، وتساوي أعداد الفئات وحده لا يثبت أن ترتيب المحارف أو المعالجة المسبقة متوافق
يستخدم خط الأنابيب المرفق كشف DB بجانب كشف أقصى 1,024 بكسل وحشو أبيض بمقدار 50 بكسل؛ ويقبل المُعرِّف نماذج NCHW متوافقة بارتفاع مُدخل ثابت 32 أو 48، ويعتمد 48 للارتفاع الديناميكي
يحافظ التعرف على نسبة الأبعاد للنماذج ذات العرض الديناميكي ويطوّع المُدخلات المحشوّة بعرض أدنى 320؛ والنموذج ذو العرض الثابت يضع سقفًا لعرض القصاصة بعد تغيير الحجم، مما قد يضغط سطر نص طويلًا
يجب أن يطابق القاموس ترتيب محارف النموذج وعدد فئات مخرجه؛ وتُقبل نهايات أسطر CRLF في القاموس، أما BOM الخاص بـ UTF-8 فيُرفض
يحافظ تصنيف الزوايا على نسبة أبعاد القصاصة ضمن عرض مُدخل النموذج ويملأ البكسلات غير المستخدمة بأصفار مطوَّعة؛ ولا تُدوَّر القصاصة 180 درجة إلا عندما تتجاوز درجة الانقلاب 0.9، حتى لا تقلب توقعات الاتجاه الضعيفة النصوص القصيرة
عندما يضمّن النموذج بيانات محارف فوقية، يتحقق المصنع أيضًا من كل مدخل في القاموس ومن ترتيبه؛ وحجم القاموس وحده لا يكفي
الصينية والروسية واللغات الشائعة
تختار THPDFRapidOCRDLLOptions.ForLanguage نموذج تعرف وقاموسًا مطابقًا ضمن دليل النماذج المحلي مع الإبقاء على الافتراضيات المشتركة للكاشف والمصنِّف والخيوط والبكسلات والمهلة
يقبل التابع أسماء لغات بديلة غير حساسة لحالة الأحرف ويحوّل الشرطات السفلية إلى شرطات عادية ويقتطع الفراغات المحيطة؛ والوسم الفارغ أو غير المدعوم يرفع EArgumentException قبل تحميل النماذج
| دليل الملف الجانبي | اللغات | أسماء بديلة مقبولة شائعًا |
|---|---|---|
ch | الصينية المبسطة والإنجليزية | zh، zh-CN، zh-Hans، chi_sim |
chinese_cht | الصينية التقليدية | zh-TW، zh-HK، zh-Hant، chi_tra |
en | الإنجليزية | en، en-US، en-GB، eng |
latin | الفرنسية والألمانية والإسبانية والبرتغالية والإيطالية والهولندية والتركية | fr، de، es، pt-BR، it، nl، tr |
japan | اليابانية | ja، ja-JP، jpn |
korean | الكورية | ko، ko-KR، kor |
cyrillic | الروسية والأوكرانية والبلغارية والبيلاروسية | ru، ru-RU، rus، uk، bg، be |
arabic | العربية والفارسية والأردية | ar، fa، ur، ara، fas، urd |
devanagari | الهندية والمراتية والنيبالية | hi، mr، ne، hin، mar، nep |
يستخدم كل ملف جانبي <profile>/recognition.onnx و<profile>/dictionary.txt؛ وتُقبل أسماء الملفات الجانبية مباشرةً، والأسماء البديلة الإقليمية المعترف بها معرَّفة صراحةً لا مستنتجةً من بادئة اعتباطية
ثبّت مجموعات النماذج المختارة قبل النشر بواسطة مساعد التجهيز المثبَّت ببصمات SHA256
& tools/Install-RapidOCRModels.ps1 `
-Destination C:/OCR/models `
-Language ch,chinese_cht,en,latin,japan,korean,cyrillic,arabic,devanagari
يثبّت -Language All الملفات الجانبية التسعة كلها؛ و-SkipClassifier يستبعد المصنِّف الاختياري، وعندها اضبط UseAngleClassifier := False عند إنشاء المحرك
يتحقق المساعد من بصمات SHA256 المثبتة ويثبّت كاشفًا ومصنِّفًا متعددي اللغات مشتركين تحت أسماء الملفات الجذرية التي يستخدمها Default؛ ويعمل التعرف دون اتصال ولا يُنزّل النماذج المفقودة تلقائيًا أبدًا
اختر لغة المحرك لكل صفحة أو منطقة؛ فالمحرك الواحد لا يكتشف اللغة تلقائيًا ولا يجمع مُعرِّفات منفصلة لأنظمة كتابة مختلفة
تستخدم الحزم المثبتة نماذج PP-OCRv3 و PP-OCRv4 متوافقة؛ ودقة التعرف تتوقف على النموذج والخط والدقة والقصاصة، ونموذج اللاتينية قد يخلط بين العلامات مثل ñ حتى مع مُدخل نظيف
قد تتطلب نماذج PP-OCRv5 الأحدث إصدار ONNX Runtime أحدث من المكتبات الساكنة المستخدمة لبناء المكتبة؛ وصيغة النموذج غير المدعومة تجعل التهيئة تفشل مع تشخيص
يجب أن تقبل نماذج الكشف موتر صورة float32 واحدًا وتنتج خريطة احتمالات float32 بشكل [1, 1, H, W] عند دقة المُدخل بعد تغيير الحجم؛ والأنواع أو الأبعاد غير المتوافقة والقيم غير المنتهية والاحتمالات خارج [0, 1] بأكثر من أربعة epsilons آلية لـ float32 تفشل مع تشخيص قبل استخدام نتائج الكشف
تُقصّ أخطاء تقريب sigmoid الطفيفة ضمن هذه السماحية إلى [0, 1] قبل التحديد العتبي وتقييم الحدود، حتى يحتفظ النماذج الصالحة بسلوك الكشف المعتاد
مثال صيني
uses SysUtils, HPDFDoc, HPDFRapidOCRRecognition;
procedure AddNativeRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Models: THPDFRapidOCRDLLOptions;
Layer: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Models := THPDFRapidOCRDLLOptions.ForLanguage('zh-CN');
Models.UseAngleClassifier := False;
Engine := HPDFCreateRapidOCRDLLOCREngine(
'C:\OCR\Win64\HotPDFRapidOCR.dll', 'C:\OCR\models', Models);
Layer := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
raise Exception.Create('Native RapidOCR text layer was not added');
end;
احتفظ بواجهة المحرك عبر الطلبيات لإعادة استخدام نماذجه؛ واستخدم مكتبة DLL تطابق بنية التطبيق المستدعي، ووفّر تبعياتها بجوارها أو في أدلّة محمّل Windows القياسية
مثال روسي
procedure AddRussianRapidOCRText(PDF: THotPDF);
var
Engine: IHPDFOCREngine;
Models: THPDFRapidOCRDLLOptions;
Layer: THPDFOCRTextLayerOptions;
Info: THPDFOCRTextLayerInfo;
begin
Models := THPDFRapidOCRDLLOptions.ForLanguage('ru-RU');
Engine := HPDFCreateRapidOCRDLLOCREngine(
'C:\OCR\Win64\HotPDFRapidOCR.dll', 'C:\OCR\models', Models);
Layer := THPDFOCRTextLayerOptions.Default;
if not PDF.ApplyLoadedOCRTextLayer([0], Engine, Layer, Info) then
raise Exception.Create('Russian RapidOCR text layer was not added');
end;
تختار ru وru-RU وrus نموذج التعرف cyrillic وقاموسه نفسه
النتائج وعمر المحرك
ينسخ المهايئ الـbitmap الحالي إلى لقطة BGR مستقلة من الأعلى إلى الأسفل؛ ويتحقق من الأبعاد وميزانية البكسلات قبل التخصيص ولا يعدّل الـbitmap المُستعار
يُصدر خط الأنابيب الأصلي نتيجة واحدة لكل سطر نص معترف به، بحدود ببكسلات الصورة الأصلية وبمتوسط ثقة المحارف؛ ويستهلك كل سطر مقعدًا واحدًا من MaxWords، ولا يُوفَّر خط أساس أصلي
تتبع الصناديق المكتشفة ترتيب قراءة الصفوف الأفقية، من اليسار إلى اليمين افتراضيًا ومن اليمين إلى اليسار عند تفعيل RightToLeft؛ والإعداد الجاهز للعربية يفعّل هذا الخيار
يصحح تصنيف الزوايا قصاصات النص المنفردة؛ وهو لا يحدد اتجاه الصفحة كاملة ولا يعيد ترتيب صناديق الكشف المنفصلة لصفحة مقلوبة في ترتيب القراءة المنطقي
يبقى النص المعترف به بترتيب Unicode المنطقي لدى النموذج؛ والمهايئ لا يعكس سلاسل العربية تلقائيًا ولا يطبّق التشكيل الثنائي الاتجاه
يتحقق المهايئ من UTF-8 ومحارف تحكم Unicode والحدود والثقة وحد MaxTextCodeUnits الخاص بالطلبية، بسقف نص صارم قدره 1,048,576 وحدة UTF-16؛ وتستهلك المحارف التكميلية وحدتين
تنجح الصفحة الفارغة بمصفوفة نتائج فارغة؛ والفشل يمسح النتائج الجزئية، ويحتفظ نشر PDF قابل للبحث بسلوك المعاملة الذرية للصفحات القائم
تُسلسل الاستدعاءات على المحرك نفسه؛ وانتظار قفل المحرك يتحقق من الإلغاء ومن الموعد النهائي للتعرف كل 25 ميلي ثانية
تتحقق النداءات الأصلية من الإلغاء والمواعيد النهائية قبل الكشف والتصنيف وكل سطر معترف به وبعدها؛ ولا يمكن مقاطعة استدلال ONNX المنفرد قسرًا، لذا قد يعود الإلغاء بعد اكتمال المرحلة الحالية
تحدّ حدود المُدخل والنص تخصيصات المهايئ والمخرجات المقبولة، لكنها لا تفرض سقفًا صارمًا على ذاكرة النموذج أو الكشف أو القص أو الاستدلال
البناء وواجهة ABI
يضم Native/RapidOCR جسر C++ ومُعرِّف نماذج متوافقًا وترويسة C ذات إصدار وتعريف exports ومشروع CMake؛ وجهّز مصادر شبكات CPU متوافقة تكشف DbNet وAngleNet وOcrUtils مع مكتبتي ONNX Runtime و OpenCV المطابقتين
استخدم MSVC على Windows مع C++17 وحزمة Windows SDK و CMake 3.20 أو أحدث؛ والبناء الافتراضي يستخدم CRT الإصدار الساكن الذي يجب أن يطابق المكتبات المُجهَّزة
& tools/Build-HotPDFRapidOCR.ps1 `
-NativeSourceDirectory C:/OCR/native-sources `
-OnnxRuntimeDirectory C:/OCR/onnxruntime/windows-x64 `
-OpenCVDirectory C:/OCR/opencv/x64/vc16/staticlib `
-Platform Win64
يجب أن يحتوي OnnxRuntimeDirectory على OnnxRuntimeConfig.cmake، وأن يشير OpenCVDirectory إلى إعداد المكتبات الخاص بالبنية؛ واختر Win32 ومكتبات x86 مطابقة لمكتبة DLL ذات 32 بت
يكتب مساعد البناء المكتبة في Lib/Native/RapidOCR/<Platform>/HotPDFRapidOCR.dll؛ ويمكن لـ -BuildDirectory و-OutputDirectory و-Generator تجاوز موضع البناء ومولّد Visual Studio
يحيط الجسر باستثناءات C++ ويكشف إصدار ABI 1 عبر HPDFRapidOCRAbiVersion وHPDFRapidOCRCreate وHPDFRapidOCRRecognize وHPDFRapidOCRDestroy؛ وكلها تستخدم cdecl وقيم حالة بـ 32 بت وأطوال بايتات UTF-8 صريحة
يعرّف إصدار ABI 1 أيضًا الـexport الاختياري HPDFRapidOCRSetReadingDirection؛ ولا يشترطه المهايئ إلا عند تفعيل RightToLeft، فيبقى بوسع مكتبات DLL القائمة خدمة الطلبيات من اليسار إلى اليمين
تستعير النداءات نصها لمدة الاستدعاء فقط؛ وينسخ المهايئ النص المتحقق منه قبل العودة، ومدمّر المحرك يدمّر النماذج قبل إلغاء تحميل المكتبة
التحقق
مع حزمة onnx لـ Python وبناء أصلي مفعَّل فيه BUILD_TESTING، شغّل python tools/test_rapidocr_detector.py <build>/Release/NativeDetectorTests.exe لفحص الخرج الفارغ الصالح ورتب الموترات غير الصالحة والقنوات والأنماط والأبعاد المكانية غير المتطابقة والاحتمالات غير الصالحة عبر واجهة DLL ABI؛ ويمكن لمسارات مشغّل متعددة التحقق من البنيتين في استدعاء واحد
أضف -RapidOCRLanguageModelDirectory وأحد معاملي مكتبة DLL الأصلية أو كليهما إلى مشغّل مهايئ Delphi أو FPC للتحقق من كل الإعدادات الجاهزة المثبتة بعينات صينية وروسية ويابانية وكورية ولغات لاتينية شائعة وعربية وهندية؛ وتخضع الروسية والصينية التقليدية أيضًا لحفظ PDF قابل للبحث وإعادة تحميله واستخراج نصه ومقارنة بكسلاته
تختبر مشغّلات مهايئي Delphi و FPC عمر النماذج الدائم وتخطيط صفوف BGR ومحارف Unicode والتكميلية وفحوص ABI والنتائج غير الصالحة والميزانيات والإلغاء التعاوني وانتظار القفل المُسلسَل والتنظيف
مرّر -RapidOCRNativeWin32Library و-RapidOCRNativeWin64Library و-RapidOCRNativeModelDirectory إلى Tests/Delphi/Run-TesseractRecognitionTests.ps1 أو Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 للتحقق من النماذج الحقيقية والصفحات الفارغة والتعامل مع النماذج التالفة وتعرف الإنجليزية والصينية وذهاب وإياب PDF قابل للبحث ببكسلات مرسومة دون تغيير
راجع طبقات نص OCR القابلة للبحث لرسم الصفحات وربط نص Unicode بـ PDF وتجميع المحتوى الاختياري وقيود المطابقة