Εγγενής 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· οι προεπιλογές χρησιμοποιούν τα παρακάτω τοπικά αρχεία

ΠεδίοΠροεπιλογήΣημασία
DetectionModelch_PP-OCRv3_det_infer.onnxΜοντέλο ανίχνευσης DB
RecognitionModelch_PP-OCRv3_rec_infer.onnxΣυμβατό μοντέλο αναγνώρισης CTC PP-OCRv3 ή PP-OCRv4
ClassificationModelch_ppocr_mobile_v2.0_cls_infer.onnxΠροαιρετικό μοντέλο προσανατολισμού κειμένου
CharacterDictionaryppocr_keys_v1.txtΛεξικό UTF-8 χωρίς BOM, στη σειρά χαρακτήρων του μοντέλου
UseAngleClassifierTrueΌταν απενεργοποιηθεί, δεν απαιτείται ούτε αρχικοποιείται μοντέλο ταξινόμησης
RightToLeftFalseΔιατάσσει τα ανιχνευμένα boxes από δεξιά προς τα αριστερά μέσα σε οριζόντιες γραμμές· ενεργοποιείται από το προφίλ Arabic
Threads1Πλήθος νημάτων CPU του ONNX από 1 έως 64, με ταβάνι το πλήθος λογικών επεξεργαστών
MaxPixels16777216Όριο pixel εισόδου, από 1 έως 67.108.864
TimeoutMilliseconds60000Συνεργατικό 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, και περιορισμούς συμμόρφωσης