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

CampoPadrãoSignificado
DetectionModelch_PP-OCRv4_det_mobile.onnxModelo de detecção local
RecognitionModelch_PP-OCRv4_rec_mobile.onnxModelo de reconhecimento local
ClassificationModelch_ppocr_mobile_v2.0_cls_mobile.onnxExigido apenas quando a classificação de ângulo está habilitada
CharacterDictionaryVazioUsa os metadados de caracteres embutidos do modelo de reconhecimento; forneça um dicionário local quando o modelo não tiver esses metadados
FontPathVazioResolve para %WINDIR%\Fonts\arial.ttf para o contêiner de resultados do RapidOCR
UseAngleClassifierTrueHabilita a classificação de ângulo do texto; quando desabilitada, nenhum modelo de classificação é exigido nem passado
IntraOpThreads1Threads intra-operação do ONNX, de 1 a 64, limitadas à contagem de CPUs lógicas do worker
InterOpThreads1Threads inter-operação do ONNX com os mesmos limites
MaxPixels16777216Orçamento de pixels de entrada, de 1 a 67.108.864
TimeoutMilliseconds60000Prazo 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