Adapter τοπικών μοντέλων RapidOCR

Για cached συμπεράσματα ONNX in-process, χρησιμοποιήστε τον εγγενή DLL adapter του RapidOCR με τα HPDFCreateRapidOCRDLLOCREngine και THPDFRapidOCRDLLOptions

Ο εγγενής adapter παρέχει προεπιλογές THPDFRapidOCRDLLOptions.ForLanguage για Απλοποιημένα και Παραδοσιακά Κινεζικά, Αγγλικά, Λατινικές γλώσσες, Ιαπωνικά, Κορεάτικα, κυριλλικές γλώσσες συμπεριλαμβανομένων των Ρωσικών, αραβικές γλώσσες, και γλώσσες Devanagari

Το HPDFRapidOCRRecognition παρέχει έναν adapter διεργασίας Windows που υλοποιεί το IHPDFOCREngine σε builds Delphi, C++Builder, και FPC/Lazarus Win32 και Win64

Προμηθεύστε Python με τα rapidocr και onnxruntime, το συνοδευτικό bridge tools/OCR/rapidocr_tsv.py, και συμβατά τοπικά μοντέλα ONNX· ο adapter δεν εγκαθιστά πακέτα ούτε κατεβάζει μοντέλα, λεξικά, ή γραμματοσειρές

Η Python τρέχει σε ξεχωριστή κρυφή διεργασία, οπότε η αρχιτεκτονική της μπορεί να διαφέρει από αυτή της καλούσας εφαρμογής· το πακέτο ONNX Runtime της πρέπει να ταιριάζει με τη δική της αρχιτεκτονική Python

Overloads του factory

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

Το αρχικό overload με timeout παραμένει συμβατό με το υπάρχον πρωτόκολλο bridge και χρησιμοποιεί τα τρία προεπιλεγμένα ονόματα αρχείων μοντέλων PP-OCRv4· ελέγχει τις διαδρομές εκτελέσιμου, script, και καταλόγου κατά την κατασκευή, και ελέγχει τη διαθεσιμότητα μοντέλων στον worker

Το overload με options ελέγχει κάθε απαιτούμενο μοντέλο, ένα προαιρετικό λεξικό, και την τοπική γραμματοσειρά πριν επιστρέψει τον adapter· λείποντα αρχεία ή άκυρες επιλογές εγείρουν EArgumentException πριν ξεκινήσει η αναγνώριση

Σχετικές διαδρομές μοντέλων, λεξικών, και γραμματοσειρών επιλύονται ως προς το ModelDirectory· απόλυτες διαδρομές μπορούν να δείχνουν σε αρχεία προμηθευμένα ξεχωριστά

Χρησιμοποιήστε μοντέλα συμβατά με το pipeline ανίχνευσης, ταξινόμησης, και αναγνώρισης CTC του RapidOCR· ένα μοντέλο από άλλο pipeline OCR μπορεί να απαιτεί διαφορετική προεπεξεργασία και δεν είναι επιλέξιμο μόνο και μόνο επειδή χρησιμοποιεί τη μορφή ONNX

Επιλογή μοντέλων ανά γλώσσα

Ο adapter διεργασίας Python συνεχίζει να χρησιμοποιεί ρητές διαδρομές THPDFRapidOCROptions· το ForLanguage ανήκει στο options record του εγγενούς DLL και δεν είναι μέθοδος του adapter Python

Προμηθεύστε τοπικά μοντέλα και λεξικά γλωσσών με tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, ή επιλέξτε -Language All για και τα εννέα γλωσσικά προφίλ

Ο helper ελέγχει pinned hashes SHA256 και τοποθετεί κάθε recognizer στο <profile>/recognition.onnx με το αντίστοιχο <profile>/dictionary.txt του· η αναγνώριση χρόνου εκτέλεσης παραμένει offline χωρίς αυτόματα downloads

Για Ρωσικά, χρησιμοποιήστε τα 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';

Τα παραπάνω βασικά ονόματα αρχείων detector και classifier ταιριάζουν με τα κοινόχρηστα μοντέλα του provisioning helper· παραδώστε μαζί το αντίστοιχο μοντέλο αναγνώρισης και λεξικό, και διαλέξτε ξεχωριστή μηχανή για σελίδες ή περιοχές που χρειάζονται άλλο γραφικό σύστημα

Επιλογές και προεπιλογές

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 για το container αποτελεσμάτων του RapidOCR
UseAngleClassifierTrueΕνεργοποιεί ταξινόμηση γωνίας κειμένου· όταν απενεργοποιηθεί, δεν απαιτείται ούτε περνάται μοντέλο ταξινόμησης
IntraOpThreads1Νήματα intra-operation του ONNX, από 1 έως 64, με ταβάνι το πλήθος λογικών CPU του worker
InterOpThreads1Νήματα inter-operation του ONNX με τα ίδια όρια
MaxPixels16777216Προϋπολογισμός pixel εισόδου, από 1 έως 67.108.864
TimeoutMilliseconds60000Συνολικό deadline αιτήματος, από 1 έως 3.600.000 χιλιοστά του δευτερολέπτου

Η γέφυρα επιλέγει ρητά το CPU backend του ONNX Runtime για όλα τα στάδια και απενεργοποιεί τα αυτόματα downloads· λείπει ενσωματωμένο λεξικό χαρακτήρων σημαίνει ότι απαιτείται προμηθευμένο τοπικό 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 σε έναν ιδιωτικό προσωρινό κατάλογο, ξεκινά έναν τοπικό worker Python, και καθαρίζει τα handles της διεργασίας και τα προσωρινά αρχεία όταν το αίτημα τελειώσει

Το overload με options ελέγχει το MaxPixels πριν τη σειριοποίηση bitmap· ο worker ελέγχει επίσης τις διαστάσεις εισόδου πριν φορτώσει τα μοντέλα και λαμβάνει τα όρια MaxWords και MaxTextCodeUnits του αιτήματος

Η γέφυρα ζητά συντεταγμένες χαρακτήρων και επικυρώνει τη γεωμετρία, την εμπιστοσύνη, και την κάλυψη κειμένου κάθε χαρακτήρα, και μετά εκδίδει κάθε πλήρη αναγνωρισμένη γραμμή με τα αρχικά εσωτερικά της κενά και τη στίξη της, τα περικλείοντα όρια σε pixel της αρχικής εικόνας, και μέση εμπιστοσύνη στο εύρος 0 έως 1

Κάθε εκδοθείσα γραμμή καταναλώνει μια θέση MaxWords· τα εσωτερικά κενά μετρούν στο MaxTextCodeUnits, και η δημοσίευση ολόκληρης γραμμής αποτρέπει το να μπερδέψει το text layer την απόσταση γραμμάτων με το κενό λέξης

Η απόσταση διατηρείται από το κείμενο γραμμής του recognizer· κείμενο που η ανίχνευση διαχώρισε σε ξεχωριστά boxes εξακολουθεί να βασίζεται στη χωρική συλλογιστική κενού λέξης, και εξωτερικοί readers PDF μπορεί να ανακατασκευάσουν ή να συμπτύξουν επαναλαμβανόμενα κενά κατά την εξαγωγή

Οι συμπληρωματικοί χαρακτήρες καταναλώνουν δύο μονάδες UTF-16· άκυρες συντεταγμένες, εμπιστοσύνη, χαρακτήρες ελέγχου, ή εξαντλημένοι προϋπολογισμοί αποτυγχάνουν την αναγνώριση και εκκαθαρίζουν τα μερικά αποτελέσματα

Μια κενή σελίδα πετυχαίνει με κενό πίνακα λέξεων· δεν παρέχεται εγγενής baseline, οπότε το text layer χρησιμοποιεί το υπάρχον γεωμετρικό fallback του

Η ακύρωση, το timeout, και τα μεγέθη εξόδου ερωτώνται κάθε 25 χιλιοστά του δευτερολέπτου· ένα Windows job περικλείει τον worker και τυχόν θυγατρικές διεργασίες interpreter, και ο τερματισμός περιμένει έως πέντε επιπλέον δευτερόλεπτα για τον καθαρισμό διεργασιών

Η ApplyLoadedOCRTextLayer δημοσιεύει όλες τις επιλεγμένες σελίδες ατομικά μετά την επιτυχή αναγνώριση

Η έξοδος TSV περιορίζεται στα 64 MiB και η διαγνωστική έξοδος στο 1 MiB· οι προϋπολογισμοί εισόδου και εξόδου δεν επιβάλλουν σκληρό ταβάνι στη χρήση μνήμης μοντέλων ή συμπερασμάτων ONNX

Η αρχικοποίηση μοντέλων γίνεται σε νέα διεργασία Python για κάθε αίτημα και μετράει στο deadline

Επικύρωση

Οι κοινοί runners adapter Delphi και FPC καλύπτουν preflight μοντέλων, προσαρμοσμένες διαδρομές, προαιρετική ταξινόμηση, Unicode, προϋπολογισμούς, αποτυχία worker, ακύρωση, και timeout· οι προαιρετικές παράμετροι RapidOCR τους ενεργοποιούν για πραγματικούς ελέγχους αναγνώρισης και round-trip αναζητήσιμου PDF

Χρησιμοποιήστε τα Tests/Delphi/Run-TesseractRecognitionTests.ps1 ή Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 με -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel, και -RapidOCRRecognitionModel

Δείτε τα Αναζητήσιμα επίπεδα κειμένου OCR για επιλογές απόδοσης, αντιστοίχιση κειμένου Unicode PDF, ομαδοποίηση optional-content, και όρια συμμόρφωσης