Adaptador de modelos locais do RapidOCR
Para inferência ONNX em cache e em processo, use o adaptador nativo de DLL do RapidOCR com HPDFCreateRapidOCRDLLOCREngine e THPDFRapidOCRDLLOptions
O adaptador nativo disponibiliza predefinições THPDFRapidOCRDLLOptions.ForLanguage para chinês simplificado e tradicional, inglês, línguas latinas, japonês, coreano, línguas cirílicas incluindo o russo, línguas árabes e línguas devanágari
O HPDFRapidOCRRecognition disponibiliza um adaptador de processo para Windows que implementa IHPDFOCREngine em builds Delphi, C++Builder e FPC/Lazarus Win32 e Win64
Aprovisione o Python com rapidocr e onnxruntime, a ponte tools/OCR/rapidocr_tsv.py fornecida e modelos ONNX locais compatíveis; o adaptador não instala pacotes nem descarrega modelos, dicionários ou fontes
O Python corre num processo oculto separado, pelo que a arquitetura pode diferir da aplicação chamadora; o respetivo pacote ONNX Runtime tem de corresponder à arquitetura do próprio Python
Overloads da 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;
A overload original com timeout continua compatível com o protocolo existente da ponte e usa os três nomes de ficheiro predefinidos dos modelos PP-OCRv4; verifica os caminhos do executável, do script e do diretório na construção, e a disponibilidade dos modelos no worker
A overload com opções verifica todos os modelos necessários, um dicionário opcional e a fonte local antes de devolver o adaptador; ficheiros em falta ou opções inválidas geram EArgumentException antes de o reconhecimento começar
Caminhos relativos de modelos, dicionários e fontes resolvem-se contra ModelDirectory; caminhos absolutos podem apontar para ficheiros aprovisionados separadamente
Use modelos compatíveis com o pipeline de deteção, classificação e reconhecimento CTC do RapidOCR; um modelo de outro pipeline de OCR pode exigir pré-processamento diferente e não pode ser selecionado apenas por usar o formato ONNX
Seleção de modelos por idioma
O adaptador de processo Python continua a usar caminhos explícitos de THPDFRapidOCROptions; o ForLanguage pertence ao registo de opções da DLL nativa e não é um método do adaptador Python
Aprovisione modelos e dicionários locais de idiomas com tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, ou selecione -Language All para os nove perfis de idioma
O helper verifica hashes SHA256 fixados e coloca cada reconhecedor em <profile>/recognition.onnx com o respetivo <profile>/dictionary.txt correspondente; o reconhecimento em runtime continua offline, sem descargas automáticas
Para russo, use cyrillic/recognition.onnx e cyrillic/dictionary.txt; o chinês simplificado usa o perfil ch e o chinês tradicional usa 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';
Os nomes de ficheiro de raiz do detetor e do classificador acima correspondem aos modelos partilhados do helper de aprovisionamento; forneça em conjunto o modelo de reconhecimento e o dicionário correspondentes, e escolha um motor separado para páginas ou regiões que precisem de outro script
Opções e predefinições
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;
Inicialize o registo com THPDFRapidOCROptions.Default antes de sobrepor campos
| Campo | Predefinição | Significado |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Modelo de deteção local |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Modelo de reconhecimento local |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Necessário apenas quando a classificação de ângulo está ativada |
CharacterDictionary | Vazio | Usa os metadados de carateres incorporados do modelo de reconhecimento; forneça um dicionário local quando o modelo não tiver esses metadados |
FontPath | Vazio | Resolve para %WINDIR%\Fonts\arial.ttf para o contentor de resultados do RapidOCR |
UseAngleClassifier | True | Ativa a classificação de ângulo do texto; quando desativada, nenhum modelo de classificação é exigido ou passado |
IntraOpThreads | 1 | Threads ONNX intra-operação, de 1 a 64, limitadas à contagem de CPUs lógicos do worker |
InterOpThreads | 1 | Threads ONNX inter-operação com os mesmos limites |
MaxPixels | 16777216 | Orçamento de píxeis de entrada, de 1 a 67,108,864 |
TimeoutMilliseconds | 60000 | Prazo total do pedido, de 1 a 3,600,000 milissegundos |
A ponte seleciona explicitamente o backend CPU do ONNX Runtime para todas as fases e desativa as descargas automáticas; um dicionário de carateres incorporado em falta exige um CharacterDictionary local aprovisionado
Exemplo com modelos explicitamente selecionados
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;
Resultados, orçamentos e cancelamento
Cada pedido serializa o bitmap emprestado para um diretório temporário privado, arranca um worker Python local e limpa os handles de processo e os ficheiros temporários quando o pedido termina
A overload com opções verifica MaxPixels antes da serialização do bitmap; o worker também verifica as dimensões de entrada antes de carregar os modelos e recebe os limites MaxWords e MaxTextCodeUnits do pedido
A ponte pede coordenadas de carateres e valida a geometria, a confiança e a cobertura de texto de cada carater; depois emite cada linha reconhecida completa, com os espaços internos originais e a pontuação, os limites no espaço de píxeis da imagem original e a confiança média no intervalo de 0 a 1
Cada linha emitida consome um lugar de MaxWords; os espaços internos contam para MaxTextCodeUnits, e publicar a linha por inteiro impede que a camada de texto confunda o espaçamento entre letras com espaçamento entre palavras
O espaçamento é preservado a partir do texto de linha do reconhecedor; texto que a deteção divida em caixas separadas continua a depender da inferência espacial de intervalos entre palavras, e os leitores PDF externos podem reconstruir ou colapsar espaços repetidos durante a extração
Os carateres suplementares consomem duas unidades UTF-16; coordenadas, confiança, carateres de controlo inválidos ou orçamentos esgotados fazem o reconhecimento falhar e limpam os resultados parciais
Uma página vazia conclui com sucesso e um array de palavras vazio; nenhuma linha de base nativa é fornecida, pelo que a camada de texto usa o respetivo fallback de geometria existente
Cancelamento, timeout e tamanhos de saída são consultados a cada 25 milissegundos; um job do Windows contém o worker e quaisquer processos filhos do interpretador, e a terminação espera até mais cinco segundos pela limpeza dos processos
ApplyLoadedOCRTextLayer publica todas as páginas selecionadas atomicamente depois de o reconhecimento ter sucesso
A saída TSV está limitada a 64 MiB e a saída de diagnóstico a 1 MiB; os orçamentos de entrada e de saída não impõem um teto rígido ao uso de memória dos modelos ONNX ou da inferência
A inicialização dos modelos ocorre num novo processo Python para cada pedido e conta para o prazo
Validação
Os runners partilhados de adaptadores Delphi e FPC cobrem preflight de modelos, caminhos personalizados, classificação opcional, Unicode, orçamentos, falha do worker, cancelamento e timeout; os respetivos parâmetros opcionais do RapidOCR ativam verificações reais de reconhecimento e de round-trip de PDF pesquisável
Use Tests/Delphi/Run-TesseractRecognitionTests.ps1 ou Tests/Delphi/Run-TesseractFPCRecognitionTests.ps1 com -RapidOCRPython, -RapidOCRModelDirectory, -RapidOCRDetectionModel e -RapidOCRRecognitionModel
Veja Camadas de texto OCR pesquisáveis para opções de renderização, mapeamento de texto Unicode para PDF, agrupamento em conteúdo opcional e limites de conformidade