Adapter RapidOCR para modelos locais
Para inferência ONNX em processo com modelos em cache, use o adapter RapidOCR de DLL nativa com HPDFCreateRapidOCRDLLOCREngine e THPDFRapidOCRDLLOptions
O adapter nativo oferece presets THPDFRapidOCRDLLOptions.ForLanguage para chinês simplificado e tradicional, inglês, idiomas latinos, japonês, coreano, idiomas cirílicos incluindo o russo, idiomas árabes e idiomas devanágari
O HPDFRapidOCRRecognition fornece um adapter de processo do Windows que implementa a IHPDFOCREngine em builds Win32 e Win64 de Delphi, C++Builder e FPC/Lazarus
Provisione o Python com rapidocr e onnxruntime, a bridge tools/OCR/rapidocr_tsv.py fornecida e modelos ONNX locais compatíveis; o adapter não instala pacotes nem baixa modelos, dicionários ou fontes
O Python roda em um processo oculto separado, então a arquitetura dele pode diferir da aplicação chamadora; o pacote ONNX Runtime dele precisa corresponder à própria arquitetura do Python
Sobrecargas de 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 sobrecarga original com timeout continua compatível com o protocolo atual da bridge e usa os três nomes de arquivo padrão dos modelos PP-OCRv4; ela valida os caminhos de executável, script e diretório na construção e checa a disponibilidade dos modelos no worker
A sobrecarga com options checa todos os modelos exigidos, um dicionário opcional e a fonte local antes de devolver o adapter; arquivos ausentes ou options inválidas geram EArgumentException antes de o reconhecimento começar
Caminhos relativos de modelo, dicionário e fonte são resolvidos contra o ModelDirectory; caminhos absolutos podem apontar para arquivos provisionados separadamente
Use modelos compatíveis com o pipeline de detecção, classificação e reconhecimento CTC do RapidOCR; um modelo de outro pipeline de OCR pode exigir um preprocessing diferente e não pode ser escolhido só porque usa o formato ONNX
Seleção de modelos por idioma
O adapter de processo Python continua usando caminhos explícitos de THPDFRapidOCROptions; o ForLanguage pertence ao record de options da DLL nativa e não é um método do adapter Python
Provisione modelos e dicionários locais de idiomas com tools/Install-RapidOCRModels.ps1 -Destination C:/OCR/models -Language ch,cyrillic, ou selecione -Language All para todos os nove perfis de idioma
O helper confere hashes SHA256 fixados e coloca cada recognizer em <profile>/recognition.onnx com o <profile>/dictionary.txt correspondente; o reconhecimento em runtime permanece offline, sem downloads automáticos
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 arquivo raiz do detector e do classificador acima correspondem aos modelos compartilhados do helper de provisionamento; forneça o modelo de reconhecimento e o dicionário correspondentes juntos, e escolha uma engine separada para páginas ou regiões que precisem de outro script
Options e padrõ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 record com THPDFRapidOCROptions.Default antes de sobrescrever campos
| Campo | Padrão | Significado |
|---|---|---|
DetectionModel | ch_PP-OCRv4_det_mobile.onnx | Modelo de detecção local |
RecognitionModel | ch_PP-OCRv4_rec_mobile.onnx | Modelo de reconhecimento local |
ClassificationModel | ch_ppocr_mobile_v2.0_cls_mobile.onnx | Exigido apenas quando a classificação de ângulo está habilitada |
CharacterDictionary | Vazio | Usa os metadados de caracteres embutidos 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 contêiner de resultados do RapidOCR |
UseAngleClassifier | True | Habilita a classificação de ângulo do texto; quando desabilitada, nenhum modelo de classificação é exigido nem passado |
IntraOpThreads | 1 | Threads intra-operação do ONNX, de 1 a 64, limitadas à contagem de CPUs lógicas do worker |
InterOpThreads | 1 | Threads inter-operação do ONNX com os mesmos limites |
MaxPixels | 16777216 | Orçamento de pixels de entrada, de 1 a 67.108.864 |
TimeoutMilliseconds | 60000 | Prazo total da requisição, de 1 a 3.600.000 milissegundos |
A bridge seleciona explicitamente o backend de CPU do ONNX Runtime em todos os estágios e desativa downloads automáticos; um dicionário de caracteres embutido ausente exige um CharacterDictionary local provisionado
Exemplo com modelos selecionados explicitamente
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 requisição serializa o bitmap emprestado em um diretório temporário privado, inicia um worker Python local e limpa os handles de processo e os arquivos temporários quando a requisição termina
A sobrecarga com options checa o MaxPixels antes de serializar o bitmap; o worker também checa as dimensões de entrada antes de carregar os modelos e recebe os limites de MaxWords e MaxTextCodeUnits da requisição
A bridge solicita as coordenadas dos caracteres e valida a geometria, a confiança e a cobertura de texto de cada caractere, depois emite cada linha reconhecida completa com os espaços internos e a pontuação originais dela, os limites delimitadores em pixels da imagem original e a confiança média na faixa de 0 a 1
Cada linha emitida consome uma vaga de MaxWords; espaços internos contam para o MaxTextCodeUnits, e publicar a linha inteira evita que a camada de texto confunda espaçamento de letras com espaçamento de palavras
O espaçamento é preservado do texto de linha do recognizer; texto que a detecção separa em caixas distintas ainda depende de inferência espacial de lacunas entre palavras, e leitores PDF externos podem reconstruir ou colapsar espaços repetidos durante a extração
Caracteres suplementares consomem duas unidades UTF-16; coordenadas, confiança ou caracteres de controle inválidos, ou orçamentos esgotados, fazem o reconhecimento falhar e limpam os resultados parciais
Uma página vazia termina com sucesso e um array de palavras vazio; nenhuma baseline nativa é fornecida, então a camada de texto usa o fallback de geometria existente
Cancelamento, timeout e tamanhos de saída são verificados por polling a cada 25 milissegundos; um job do Windows contém o worker e qualquer processo filho do interpretador, e a terminação espera até cinco segundos adicionais pela limpeza dos processos
O ApplyLoadedOCRTextLayer publica todas as páginas selecionadas atomicamente depois que o reconhecimento tem sucesso
A saída TSV é limitada a 64 MiB e a saída de diagnóstico a 1 MiB; os orçamentos de entrada e saída não impõem um teto rígido ao uso de memória de modelos ONNX ou de inferência
A inicialização dos modelos acontece em um novo processo Python para cada requisição e entra no prazo do deadline
Validação
Os runners compartilhados de adapter de Delphi e FPC cobrem preflight de modelos, caminhos customizados, classificação opcional, Unicode, orçamentos, falha do worker, cancelamento e timeout; os parâmetros opcionais de RapidOCR deles habilitam reconhecimento real e checagens 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 do PDF, agrupamento de optional content e limites de conformidade