Εγγενής DLL adapter του RapidOCR
Το HPDFRapidOCRRecognition εκθέτει ένα in-process IHPDFOCREngine βασισμένο στο HotPDFRapidOCR.dll, με το ίδιο δημόσιο API σε builds Delphi, C++Builder, και FPC/Lazarus Win32 και Win64 για Windows
Το DLL εκτελεί απευθείας CPU συμπεράσματα ONNX πάνω σε στιγμιότυπα μνήμης και κρατά αρχικοποιημένα μοντέλα μέχρι να απελευθερωθεί η διεπαφή της μηχανής· η ανάπτυξη χρόνου εκτέλεσης συνίσταται στο συμβατό εγγενές DLL και σε συμβατά τοπικά μοντέλα και λεξικό
Ο υπάρχων adapter διεργασίας Python παραμένει διαθέσιμος με τα αρχικά overloads του factory
Factory και επιλογές
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 | Διατάσσει τα ανιχνευμένα boxes από δεξιά προς τα αριστερά μέσα σε οριζόντιες γραμμές· ενεργοποιείται από το προφίλ Arabic |
Threads | 1 | Πλήθος νημάτων CPU του ONNX από 1 έως 64, με ταβάνι το πλήθος λογικών επεξεργαστών |
MaxPixels | 16777216 | Όριο pixel εισόδου, από 1 έως 67.108.864 |
TimeoutMilliseconds | 60000 | Συνεργατικό deadline αναγνώρισης, από 1 έως 3.600.000 χιλιοστά του δευτερολέπτου |
Σχετικά ονόματα αρχείων επιλύονται ως προς το ModelDirectory· απόλυτες διαδρομές μπορούν να επιλέξουν αρχεία προμηθευμένα ξεχωριστά
Το factory ελέγχει τη διαθεσιμότητα αρχείων, τις επιλογές, τα απαιτούμενα exports, και την έκδοση ABI πριν αρχικοποιήσει τα μοντέλα· άκυρη ρύθμιση εγείρει EArgumentException, και αποτυχίες φόρτωσης μοντέλων εγείρουν EInvalidOperation με εγγενές διαγνωστικό
Η αρχικοποίηση μοντέλων γίνεται στο factory και βρίσκεται εκτός deadline αναγνώρισης· οι μετρητές κλάσεων του λεξικού πρέπει να ταιριάζουν με το μοντέλο αναγνώρισης, και το ίδιο το πλήθος κλάσεων δεν αποδεικνύει ότι η σειρά χαρακτήρων ή η προεπεξεργασία είναι συμβατές
Το συνοδευτικό pipeline χρησιμοποιεί ανίχνευση DB με μέγιστη πλευρά ανίχνευσης 1.024 pixel και 50 pixel λευκού padding· ο recognizer δέχεται συμβατά μοντέλα NCHW με σταθερό ύψος εισόδου 32 ή 48 και χρησιμοποιεί 48 για δυναμικό ύψος
Η αναγνώριση διατηρεί την αναλογία διαστάσεων για μοντέλα δυναμικού πλάτους και κανονικοποιεί inputs με padding με ελάχιστο πλάτος 320· ένα μοντέλο σταθερού πλάτους βάζει ταβάνι στο πλάτος του resized crop, κάτι που μπορεί να συμπυκνώσει μια μακριά γραμμή κειμένου
Η ταξινόμηση γωνίας διατηρεί την αναλογία διαστάσεων του crop εντός του πλάτους εισόδου του μοντέλου της και γεμίζει τα αχρησιμοποίητα pixels με κανονικοποιημένα μηδενικά· ένα crop περιστρέφεται κατά 180 μοίρες μόνο όταν το σκορ ανάποδης θέας ξεπερνά το 0,9, ώστε αδύναμες προβλέψεις κατεύθυνσης να μην αναποδογυρίζουν σύντομο κείμενο
Το λεξικό πρέπει να ταιριάζει με τη σειρά χαρακτήρων και το πλήθος κλάσεων εξόδου του μοντέλου· γραμμές λεξικού με CRLF γίνονται δεκτές, αλλά BOM UTF-8 απορρίπτεται
Όταν το μοντέλο ενσωματώνει μεταδεδομένα χαρακτήρων, το factory επαληθεύει επίσης κάθε εγγραφή του λεξικού και τη σειρά της· το μέγεθος του λεξικού από μόνο του δεν φτάνει
Κινεζικά, Ρωσικά, και συνηθισμένες γλώσσες
Η THPDFRapidOCRDLLOptions.ForLanguage επιλέγει μοντέλο αναγνώρισης και αντίστοιχο λεξικό κάτω από τον τοπικό κατάλογο μοντέλων, διατηρώντας τις κοινόχρηστες προεπιλογές detector, classifier, νημάτων, pixel, και timeout
Η μέθοδος δέχεται aliases γλωσσών χωρίς διάκριση πεζών-κεφαλαίων, αλλάζει underscores σε hyphens, και κόβει κενά γύρω από το tag· κενό ή μη υποστηριζόμενο tag εγείρει EArgumentException πριν φορτωθούν μοντέλα
| Κατάλογος προφίλ | Γλώσσες | Συνηθισμένα αποδεκτά aliases |
|---|---|---|
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· τα ονόματα προφίλ γίνονται δεκτά απευθείας, και τα αναγνωρισμένα regional aliases ορίζονται ρητά αντί να συναχθούν από αυθαίρετο πρόθεμα
Εγκαταστήστε τα επιλεγμένα σετ μοντέλων πριν την ανάπτυξη με τον provisioning helper με pinned SHA256
& tools/Install-RapidOCRModels.ps1 `
-Destination C:/OCR/models `
-Language ch,chinese_cht,en,latin,japan,korean,cyrillic,arabic,devanagari
Το -Language All εγκαθιστά και τα εννέα προφίλ· το -SkipClassifier παραλείπει τον προαιρετικό classifier, οπότε ορίστε UseAngleClassifier := False κατά τη δημιουργία μηχανής
Ο helper επαληθεύει pinned hashes SHA256 και εγκαθιστά έναν κοινόχρηστο πολύγλωσσο detector και classifier κάτω από τα βασικά ονόματα αρχείων που χρησιμοποιεί η Default· η αναγνώριση τρέχει offline και δεν κατεβάζει ποτέ μόνη της λείποντα μοντέλα
Διαλέξτε τη γλώσσα της μηχανής για κάθε σελίδα ή περιοχή· μία μηχανή δεν ανιχνεύει αυτόματα τη γλώσσα ούτε συνδυάζει ξεχωριστούς recognizers για διαφορετικά γραφικά συστήματα
Τα pinned πακέτα χρησιμοποιούν συμβατά μοντέλα PP-OCRv3 και PP-OCRv4· η ακρίβεια αναγνώρισης εξαρτάται από το μοντέλο, τη γραμματοσειρά, την ανάλυση, και το crop, και το Λατινικό μοντέλο μπορεί να μπερδέψει τονισμούς όπως το ñ ακόμη και σε καθαρή είσοδο
Νεότερα μοντέλα PP-OCRv5 μπορεί να απαιτούν νεότερο ONNX Runtime από τις static βιβλιοθήκες με τις οποίες χτίστηκε το DLL· μια μη υποστηριζόμενη μορφή μοντέλου αποτυγχάνει την αρχικοποίηση με διαγνωστικό
Τα μοντέλα ανίχνευσης πρέπει να δέχονται ένα μεμονωμένο tensor εικόνας float32 και να παράγουν χάρτη πιθανοτήτων float32 με σχήμα [1, 1, H, W] στην resized ανάλυση εισόδου· μη συμβατοί τύποι, διαστάσεις, μη πεπερασμένες τιμές, ή πιθανότητες εκτός [0, 1] κατά πάνω από τέσσερα float32 machine epsilons αποτυγχάνουν με διαγνωστικό πριν χρησιμοποιηθούν τα αποτελέσματα ανίχνευσης
Μικροσκοπικά σφάλματα στρογγυλοποίησης sigmoid εντός αυτής της ανοχής συμπιέζονται σε [0, 1] πριν το thresholding και τη βαθμολόγηση contours, ώστε έγκυρα μοντέλα να διατηρούν τη φυσιολογική συμπεριφορά ανίχνευσής τους
Παράδειγμα με Κινεζικά
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 που ταιριάζει με την αρχιτεκτονική της καλούσας εφαρμογής και παραδώστε τις εξαρτήσεις του δίπλα του ή σε τυπικούς καταλόγους loader των 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
Αποτελέσματα και διάρκεια ζωής
Ο adapter αντιγράφει το τρέχον bitmap σε ένα ανεξάρτητο στιγμιότυπο BGR με αρχή πάνω· ελέγχει διαστάσεις και προϋπολογισμό pixel πριν από την κατανομή, και δεν τροποποιεί το δανεισμένο bitmap
Το εγγενές pipeline εκδίδει ένα αποτέλεσμα ανά αναγνωρισμένη γραμμή κειμένου, με όρια σε pixel της αρχικής εικόνας και μέση εμπιστοσύνη χαρακτήρων· κάθε γραμμή καταναλώνει μια θέση MaxWords, και δεν παρέχεται εγγενές baseline
Τα ανιχνευμένα boxes ακολουθούν σειρά ανάγνωσης οριζόντιας γραμμής, από αριστερά προς τα δεξιά από προεπιλογή και από δεξιά προς τα αριστερά όταν είναι ενεργό το RightToLeft· το προφίλ Arabic ενεργοποιεί αυτή την επιλογή
Η ταξινόμηση γωνίας διορθώνει μεμονωμένα crops κειμένου· δεν καθορίζει τον προσανατολισμό ολόκληρης σελίδας ούτε αναδιατάσσει τα ξεχωριστά boxes ανιχνεύσης μιας ανάποδης σελίδας σε λογική σειρά ανάγνωσης
Το αναγνωρισμένο κείμενο παραμένει στη λογική σειρά Unicode του μοντέλου· ο adapter δεν αντιστρέφει αυτόματα αραβικά strings ούτε εφαρμόζει bidirectional shaping
Ο adapter επικυρώνει UTF-8, χαρακτήρες ελέγχου Unicode, όρια, εμπιστοσύνη, και το όριο MaxTextCodeUnits του αιτήματος, με σκληρό ταβάνι κειμένου 1.048.576 μονάδων UTF-16· οι συμπληρωματικοί χαρακτήρες καταναλώνουν δύο μονάδες
Μια κενή σελίδα πετυχαίνει με κενό πίνακα αποτελεσμάτων· μια αποτυχία εκκαθαρίζει τα μερικά αποτελέσματα, και η δημοσίευση αναζητήσιμου PDF διατηρεί την υπάρχουσα συμπεριφορά ατομικής συναλλαγής σελίδων
Κλήσεις πάνω στην ίδια μηχανή σειριοποιούνται· η αναμονή του κλειδώματος της μηχανής ελέγχει ακύρωση και deadline αναγνώρισης κάθε 25 χιλιοστά του δευτερολέπτου
Τα εγγενή callbacks ελέγχουν ακύρωση και deadlines πριν και μετά την ανίχνευση, την ταξινόμηση, και κάθε αναγνωρισμένη γραμμή· μια μεμονωμένη κλήση συμπεράσματος ONNX δεν μπορεί να διακοπεί βιαία, ώστε η ακύρωση μπορεί να επιστρέψει αφού τελειώσει το τρέχον στάδιο
Τα όρια εισόδου και κειμένου περικλείουν τις δεσμεύσεις του adapter και την αποδεκτή έξοδο, αλλά δεν επιβάλλουν σκληρό ταβάνι στη μνήμη μοντέλων, ανίχνευσης, crop, ή συμπερασμάτων
Κατασκευή και ABI
Το Native/RapidOCR περιέχει τη γέφυρα C++, τον συμβατό recognizer μοντέλων, την εκδοσιοποιημένη κεφαλίδα C, τον ορισμό exports, και το έργο CMake· προμηθεύστε συμβατικές πηγές CPU δικτύων που εκθέτουν DbNet, AngleNet, και OcrUtils, μαζί με αντίστοιχες βιβλιοθήκες ONNX Runtime και OpenCV
Χρησιμοποιήστε Windows MSVC με C++17, ένα Windows SDK, και CMake 3.20 ή νεότερο· το default build χρησιμοποιεί το static release 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-bit
Ο build helper γράφει το Lib/Native/RapidOCR/<Platform>/HotPDFRapidOCR.dll· τα -BuildDirectory, -OutputDirectory, και -Generator μπορούν να παρακάμψουν την τοποθέτηση build και τον generator του Visual Studio
Η γέφυρα περικλείει τις εξαιρέσεις C++ και εκθέτει ABI έκδοσης 1 μέσω των HPDFRapidOCRAbiVersion, HPDFRapidOCRCreate, HPDFRapidOCRRecognize, και HPDFRapidOCRDestroy· όλα χρησιμοποιούν cdecl, τιμές κατάστασης 32-bit, και ρητά μήκη byte UTF-8
Η ABI έκδοσης 1 ορίζει επίσης το προαιρετικό export HPDFRapidOCRSetReadingDirection· ο adapter το απαιτεί μόνο όταν είναι ενεργό το RightToLeft, οπότε υπάρχοντα DLL μπορούν ακόμα να εξυπηρετούν αιτήματα αριστερά-προς-δεξιά
Τα callbacks δανείζονται το κείμενό τους μόνο για τη διάρκεια της κλήσης· ο adapter αντιγράφει το επικυρωμένο κείμενο πριν επιστρέψει, και ο destructor της μηχανής καταστρέφει τα μοντέλα πριν ξεφορτώσει το DLL
Επικύρωση
Με το Python πακέτο onnx και ένα εγγενές build BUILD_TESTING, τρέξτε python tools/test_rapidocr_detector.py <build>/Release/NativeDetectorTests.exe για να ελέγξετε έγκυρη κενή έξοδο, μη έγκυρες βαθμίδες tensor, κανάλια και τύπους, ασύμβατες χωρικές διαστάσεις, και μη έγκυρες πιθανότητες μέσω του ABI του DLL· πολλαπλές διαδρομές runner μπορούν να επικυρώσουν και τις δύο αρχιτεκτονικές σε μία κλήση
Προσθέστε -RapidOCRLanguageModelDirectory και μία ή και τις δύο παραμέτρους εγγενών DLL στους runners adapter Delphi ή FPC για να επικυρώσετε όλα τα εγκατεστημένα προφίλ με δείγματα Κινεζικών, Ρωσικών, Ιαπωνικών, Κορεάτικων, συνηθισμένων Λατινικών γλωσσών, Αραβικών, και Χίντι· Ρωσικά και Παραδοσιακά Κινεζικά περνούν επιπλέον αποθήκευση, επαναφόρτωση, εξαγωγή κειμένου, και σύγκριση pixel αναζητήσιμου PDF
Οι runners adapter Delphi και FPC ελέγχουν την επίμονη διάρκεια ζωής μοντέλων, τη διάταξη γραμμών BGR, Unicode και συμπληρωματικούς χαρακτήρες, ελέγχους ABI, άκυρα αποτελέσματα, προϋπολογισμούς, συνεργατική ακύρωση, σειριοποιημένη αναμονή κλειδώματος, και καθαρισμό
Δώστε -RapidOCRNativeWin32Library, -RapidOCRNativeWin64Library, και -RapidOCRNativeModelDirectory στα Tests/Delphi/Run-TesseractRecognitionTests.ps1 ή Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 για πραγματική επικύρωση μοντέλων, κενές σελίδες, χειρισμό κατεστραμμένων μοντέλων, αναγνώριση Αγγλικών και Κινεζικών, και round trips αναζητήσιμου PDF με αμετάβλητα αποδοσμένα pixels
Δείτε τα Αναζητήσιμα επίπεδα κειμένου OCR για απόδοση σελίδων, αντιστοίχιση κειμένου Unicode PDF, ομαδοποίηση optional-content, και περιορισμούς συμμόρφωσης