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

CampoDefaultSignificato
DetectionModelch_PP-OCRv4_det_mobile.onnxModello di rilevamento locale
RecognitionModelch_PP-OCRv4_rec_mobile.onnxModello di riconoscimento locale
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxRichiesto solo quando la classificazione dell'angolo è abilitata
CharacterDictionaryVuotoUsa i metadati dei caratteri incorporati nel modello di riconoscimento; fornisci un dizionario locale quando il modello non contiene quei metadati
FontPathVuotoSi risolve in %WINDIR%\Fonts\arial.ttf per il contenitore dei risultati di RapidOCR
UseAngleClassifierTrueAbilita la classificazione dell'angolo del testo; quando disabilitata, nessun modello di classificazione è richiesto o passato
IntraOpThreads1Thread ONNX intra-operazione, da 1 a 64, limitati al numero di CPU logiche del worker
InterOpThreads1Thread ONNX inter-operazione con gli stessi limiti
MaxPixels16777216Budget di pixel in ingresso, da 1 a 67.108.864
TimeoutMilliseconds60000Deadline 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à