Adapter RapidOCR con modelli locali
Per l'inferenza ONNX in-process con modelli mantenuti in cache, usa l'adapter RapidOCR con DLL nativa con HPDFCreateRapidOCRDLLOCREngine e THPDFRapidOCRDLLOptions
L'adapter nativo fornisce i preset THPDFRapidOCRDLLOptions.ForLanguage per cinese semplificato e tradizionale, inglese, lingue latine, giapponese, coreano, lingue cirilliche incluso il russo, lingue arabe e lingue devanagari
HPDFRapidOCRRecognition offre un adapter a processo Windows che implementa IHPDFOCREngine nelle build Delphi, C++Builder e FPC/Lazarus Win32 e Win64
Provisiona Python con rapidocr e onnxruntime, il bridge tools/OCR/rapidocr_tsv.py fornito e modelli ONNX locali compatibili; l'adapter non installa pacchetti né scarica modelli, dizionari o font
Python gira in un processo nascosto separato, quindi la sua architettura può differire da quella dell'applicazione chiamante; il suo pacchetto ONNX Runtime deve corrispondere all'architettura del suo stesso Python
Overload delle 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;
L'overload originale con timeout resta compatibile con il protocollo del bridge esistente e usa i tre nomi di file predefiniti dei modelli PP-OCRv4; controlla i percorsi di eseguibile, script e directory alla costruzione e verifica la disponibilità dei modelli nel worker
L'overload con opzioni controlla ogni modello richiesto, un dizionario opzionale e il font locale prima di restituire l'adapter; file mancanti o opzioni non valide sollevano EArgumentException prima che il riconoscimento parta
I percorsi relativi di modelli, dizionario e font si risolvono rispetto a ModelDirectory; i percorsi assoluti possono puntare a file provisionati separatamente
Usa modelli compatibili con la pipeline di rilevamento, classificazione e riconoscimento CTC di RapidOCR; un modello di un'altra pipeline OCR può richiedere un preprocessing diverso e non può essere scelto solo perché usa il formato ONNX
Selezione dei modelli per lingua
L'adapter a processo Python continua a usare percorsi espliciti di THPDFRapidOCROptions; ForLanguage appartiene al record di opzioni della DLL nativa e non è un metodo dell'adapter Python
Provisiona modelli e dizionari locali per lingua con tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, oppure seleziona -Language All per tutti e nove i profili linguistici
L'helper verifica gli hash SHA256 pinnati e colloca ogni recognizer in <profile>/recognition.onnx con il suo <profile>/dictionary.txt corrispondente; il riconoscimento a runtime resta offline senza download automatici
Per il russo usa cyrillic/recognition.onnx e cyrillic/dictionary.txt; il cinese semplificato usa il profilo ch e quello tradizionale 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';
I nomi radice del detector e del classifier qui sopra corrispondono ai modelli condivisi dell'helper di provisioning; fornisci insieme il modello di riconoscimento e il dizionario corrispondenti, e scegli un engine separato per le pagine o le regioni che richiedono un altro script
Opzioni e default
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;
Inizializza il record con THPDFRapidOCROptions.Default prima di sovrascrivere i campi
| Campo | Default | Significato |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Modello di rilevamento locale |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Modello di riconoscimento locale |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Richiesto solo quando la classificazione dell'angolo è abilitata |
CharacterDictionary | Vuoto | Usa i metadati dei caratteri incorporati nel modello di riconoscimento; fornisci un dizionario locale quando il modello non contiene quei metadati |
FontPath | Vuoto | Si risolve in %WINDIR%\Fonts\arial.ttf per il contenitore dei risultati di RapidOCR |
UseAngleClassifier | True | Abilita la classificazione dell'angolo del testo; quando disabilitata, nessun modello di classificazione è richiesto o passato |
IntraOpThreads | 1 | Thread ONNX intra-operazione, da 1 a 64, limitati al numero di CPU logiche del worker |
InterOpThreads | 1 | Thread ONNX inter-operazione con gli stessi limiti |
MaxPixels | 16777216 | Budget di pixel in ingresso, da 1 a 67.108.864 |
TimeoutMilliseconds | 60000 | Deadline totale della richiesta, da 1 a 3.600.000 millisecondi |
Il bridge seleziona esplicitamente il backend CPU di ONNX Runtime per tutte le fasi e disabilita i download automatici; se manca il dizionario dei caratteri incorporato serve un CharacterDictionary locale provisionato
Esempio con modelli selezionati esplicitamente
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;
Risultati, budget e cancellazione
Ogni richiesta serializza la bitmap presa in prestito in una directory temporanea privata, avvia un worker Python locale e ripulisce handle di processo e file temporanei quando la richiesta termina
L'overload con opzioni controlla MaxPixels prima di serializzare la bitmap; il worker verifica anche le dimensioni dell'input prima di caricare i modelli e riceve i limiti MaxWords e MaxTextCodeUnits della richiesta
Il bridge richiede le coordinate dei caratteri e valida geometria, confidenza e copertura testuale di ogni carattere, poi emette ogni riga riconosciuta completa con i suoi spazi interni e la sua punteggiatura originali, i bounds racchiudenti in pixel dell'immagine originale e la confidenza media nell'intervallo da 0 a 1
Ogni riga emessa consuma uno slot di MaxWords; gli spazi interni contano per MaxTextCodeUnits, e pubblicare la riga intera evita che il text layer confonda la spaziatura tra lettere con quella tra parole
La spaziatura viene preservata dal testo di riga del recognizer; il testo che il rilevamento spezza in box separati dipende ancora dall'inferenza spaziale dei gap tra parole, e i lettori PDF esterni possono ricostruire o collassare gli spazi ripetuti durante l'estrazione
I caratteri supplementari consumano due unità UTF-16; coordinate o confidenza non valide, caratteri di controllo o budget esauriti fanno fallire il riconoscimento e cancellano i risultati parziali
Una pagina vuota va a buon fine con un array di parole vuoto; non viene fornita nessuna baseline nativa, quindi il text layer usa il suo fallback geometrico esistente
Cancellazione, timeout e dimensioni dell'output vengono interrogati ogni 25 millisecondi; un job Windows contiente il worker e gli eventuali processi figli dell'interprete, e la terminazione attende fino a cinque secondi aggiuntivi per la pulizia dei processi
ApplyLoadedOCRTextLayer pubblica tutte le pagine selezionate atomicamente dopo che il riconoscimento è riuscito
L'output TSV è limitato a 64 MiB e l'output diagnostico a 1 MiB; i budget di input e output non impongono un tetto rigido all'uso di memoria dei modelli ONNX o dell'inferenza
L'inizializzazione dei modelli avviene in un nuovo processo Python per ogni richiesta ed è inclusa nella deadline
Validazione
I runner condivisi degli adapter Delphi e FPC coprono preflight dei modelli, percorsi personalizzati, classificazione opzionale, Unicode, budget, fallimenti del worker, cancellazione e timeout; i loro parametri RapidOCR opzionali abilitano il riconoscimento reale e i controlli di round-trip del PDF cercabile
Usa Tests/Delphi/Run-TesseractRecognitionTests.ps1 oppure Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 con -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel e -RapidOCRRecognitionModel
Vedi Layer di testo OCR cercabili per le opzioni di rendering, la mappatura del testo PDF Unicode, il raggruppamento optional-content e i limiti di conformità